private boolean processPublish(Object[] wamp_request) {
    final int kIndexTopicUri = 1;
    final int kIndexEventData = 2;
    final int kIndexExclude = 3;
    final int kIndexElligible = 4;

    if (wamp_request.length < 3) {
      log.trace("invalid publish request");
      return false;
    }
    Uri uri = createUri((String) wamp_request[kIndexTopicUri]);
    if (uri == null) {
      log.trace("invalid topic uri: {}", wamp_request[kIndexTopicUri]);
      return false;
    }
    Request request = new Request(uri, Request.RequestType.Publish, wamp_request[kIndexEventData]);
    if (wamp_request.length > kIndexExclude) {
      if (wamp_request[kIndexExclude] instanceof Boolean) {
        uri.setParameter("exclude", getSessionId());
      } else if (wamp_request[kIndexExclude] instanceof ArrayList) {
        ArrayList<String> exclude =
          json_mapper_.convertValue(wamp_request[kIndexExclude], string_array_list_type_);
        if (exclude.size() > 0) {
          uri.setParameter("exclude", Strings.join(exclude, ","));
        }
      }
      if (wamp_request.length > kIndexElligible) {
        if (wamp_request[kIndexElligible] instanceof ArrayList) {
          ArrayList<String> eligible =
            json_mapper_.convertValue(wamp_request[kIndexElligible], string_array_list_type_);
          if (eligible.size() > 0) {
            uri.setParameter("eligible", Strings.join(eligible, ","));
          }
        }
      }
    }
    Directory.Instance.handle(getHomePath(), request);
    log.trace("processed publish '{}'", wamp_request[kIndexTopicUri]);
    return true;
  }