// ------------------------------
  private void initialize(
      String user, String hashed_password, String userIp, HttpServletResponse res)
      throws Exception {

    sessionId_m =
        HtCommandProcessor.instance()
            .get_HtSecurityProxy()
            .remote_startUserSessionWithHashedPassword(user, hashed_password, userIp);

    if (sessionId_m == null) {
      throw new HtException(getContext(), "initialize", "Invalid user or password");
    }

    for (int i = 0; i < eventTypes_m.size(); i++) {
      RtGlobalEventManager.instance()
          .resolveListenerThread(RtGlobalEventManager.instance().MAIN_THREAD)
          .subscribeForEvent(eventTypes_m.get(i), 30, this);
    }

    // push event
    XmlEvent syncevent = new XmlEvent();
    syncevent.setEventType(XmlEvent.ET_SynchronizationEvent);
    RtGlobalEventManager.instance().pushCommonEvent(syncevent);

    // here we need to wait until the pending event will come through database layer to make sure
    // that we can select all data
    HtCommandProcessor.instance()
        .get_HtDatabaseProxy()
        .remote_waitDatabaseManagerWritePendingEvents(
            syncevent.getSequenceNumber(), WAIT_DB_PEND_EVENTS_SEC);
  }
  private byte[] eventToBytes(XmlEvent event) throws Exception {
    XmlParameter xmlparameter = new XmlParameter();
    XmlEvent.convertEventToXmlParameter(event, xmlparameter);

    StringBuilder out = new StringBuilder();
    handler_m.serializeParameter(xmlparameter, out);

    return out.toString().getBytes("UTF-8");
  }
  // ---------------------------
  // helpers
  private void sendSingleEvent(
      HttpServletResponse res, XmlEvent event, final ServletOutputStream ostrm) throws Exception {

    // need to filter out
    int evnetType = event.getEventType();
    if (evnetType == XmlEvent.ET_CommonLog) {
      CommonLogParameters clp =
          (CommonLogParameters) eventFilterParameters_m.get(XmlEvent.ET_CommonLog);

      CommonLog clog = event.getAsLog();

      // filter

      if (clp.end_date_hist > 0 && clog.getLogDate() > clp.end_date_hist) {
        return;
      }

      if (clp.begin_date_hist > 0 && clog.getLogDate() < clp.begin_date_hist) {
        return;
      }

      if (clog.getLogLevel() > clp.level) {
        return;
      }

      if (clp.threadFilter != null && clp.threadFilter.length() > 0) {
        Matcher mtch = clp.p_threadFilter.matcher(String.valueOf(clog.getLogThread()));
        if (!mtch.find()) {
          return;
        }
      }

      //
      if (clp.contextFilter != null && clp.contextFilter.length() > 0) {
        Matcher mtch = clp.p_contextFilter.matcher(String.valueOf(clog.getContext()));
        if (!mtch.find()) {
          return;
        }
      }

      if (clp.contentSmallFilter != null && clp.contentSmallFilter.length() > 0) {
        Matcher mtch = clp.p_contentSmallFilter.matcher(String.valueOf(clog.getContent()));
        if (!mtch.find()) {
          return;
        }
      }

      if (debugstream_m != null) {
        writeDebugEntry("Sending log event: " + clog.toSmallDebugString());
      }

    } else if (evnetType == XmlEvent.ET_DrawableObject) {
      DrawableObjectParameters clp =
          (DrawableObjectParameters) eventFilterParameters_m.get(XmlEvent.ET_DrawableObject);

      HtDrawableObject dobj = event.getAsDrawableObject();

      if (clp.end_date_hist > 0 && dobj.getTime() > clp.end_date_hist) {
        return;
      }

      if (clp.begin_date_hist > 0 && dobj.getTime() < clp.begin_date_hist) {
        return;
      }

      // filter out by type
      if (clp.allowed_type.size() > 0 && !clp.allowed_type.contains(dobj.getType())) {
        return;
      }

      if (clp.allowed_symbols_m != null) {
        if (!clp.allowed_symbols_m.contains(dobj.getSymbol())) {
          return;
        }
      }

      if (dobj.getType() == HtDrawableObject.DO_TEXT) {

        if (clp.shortTextFilter != null && clp.shortTextFilter.length() > 0) {
          Matcher mtch = clp.p_shortTextFilter.matcher(dobj.getAsText().shortText_m.toString());
          if (!mtch.find()) {
            return;
          }
        }

        if (clp.textFilter != null && clp.textFilter.length() > 0) {
          Matcher mtch = clp.p_textFilter.matcher(dobj.getAsText().text_m.toString());
          if (!mtch.find()) {
            return;
          }
        }
      }

    } else if (evnetType == XmlEvent.ET_RtProviderTicker) {
      RtDataParameters clp =
          (RtDataParameters) eventFilterParameters_m.get(XmlEvent.ET_RtProviderTicker);

      if (clp.allowed_symbols_m != null) {
        if (!clp.allowed_symbols_m.contains(event.getAsRtData().getSymbol())) {
          return;
        }
      }
    }

    HtXmlEventExchangePacket.Packet packet = new HtXmlEventExchangePacket.Packet();
    HtXmlEventExchangePacket.serializeSingleEvent(handler_m, event, packet);

    HtXmlEventExchangePacket.writePacketToStream(packet, ostrm, ll_m);
  }