コード例 #1
0
void QMessageTransceiverHandler :: HandleIncomingEvent(uint32 code, const MessageRef & next, const IPAddressAndPort & iap)
{
   switch(code)
   {
      case MTT_EVENT_INCOMING_MESSAGE:      emit MessageReceived(next);    break;
      case MTT_EVENT_SESSION_ATTACHED:      emit SessionAttached();        break;
      case MTT_EVENT_SESSION_CONNECTED:     emit SessionConnected(iap);    break;
      case MTT_EVENT_SESSION_DISCONNECTED:  emit SessionDisconnected();    break;
      case MTT_EVENT_SESSION_DETACHED:      emit SessionDetached();        break;
      case MTT_EVENT_OUTPUT_QUEUES_DRAINED: emit OutputQueueDrained(next); break;
   }
   emit InternalHandlerEvent(code, next);  // these get emitted for any event
}
コード例 #2
0
CSession2* CConfigServer::NewSessionL(
	const TVersion& /*aVersion*/,
	const RMessage2& /*aMessage*/) const
/**
 * The CConfigServer::NewSessionL method. Create a new If on this server.
 *
 * @internalComponent
 *
 * @param aVersion Not used.
 * @param aMessage Not used.
 * @return A new session to be used for the connection.
 */
	{
	__FLOG_STATIC(KConfigLoggingTag1(), KConfigLoggingTag2(),_L("CConfigServer::NewSessionL Start"));

	CConfigSession* ses = CConfigSession::NewL();
	SessionConnected();

	__FLOG_STATIC(KConfigLoggingTag1(), KConfigLoggingTag2(),_L("CConfigServer::NewSessionL End"));
	return ses;
	}
コード例 #3
0
void QMessageTransceiverThread :: HandleQueuedIncomingEvents()
{
   uint32 code;
   MessageRef next;
   String sessionID;
   uint32 factoryID;
   bool seenIncomingMessage = false;
   IPAddressAndPort iap;

   // Check for any new messages from our internal thread
   while(GetNextEventFromInternalThread(code, &next, &sessionID, &factoryID, &iap) >= 0)
   {
      switch(code)
      {
         case MTT_EVENT_INCOMING_MESSAGE: default:
            if (seenIncomingMessage == false)
            {
               seenIncomingMessage = true;
               emit BeginMessageBatch();
            }
            emit MessageReceived(next, sessionID); 
         break;

         case MTT_EVENT_SESSION_ACCEPTED:      emit SessionAccepted(sessionID, factoryID, iap); break;
         case MTT_EVENT_SESSION_ATTACHED:      emit SessionAttached(sessionID);                 break;
         case MTT_EVENT_SESSION_CONNECTED:     emit SessionConnected(sessionID, iap);           break;
         case MTT_EVENT_SESSION_DISCONNECTED:  emit SessionDisconnected(sessionID);             break;
         case MTT_EVENT_SESSION_DETACHED:      emit SessionDetached(sessionID);                 break;
         case MTT_EVENT_FACTORY_ATTACHED:      emit FactoryAttached(factoryID);                 break;
         case MTT_EVENT_FACTORY_DETACHED:      emit FactoryDetached(factoryID);                 break;
         case MTT_EVENT_OUTPUT_QUEUES_DRAINED: emit OutputQueuesDrained(next);                  break;
         case MTT_EVENT_SERVER_EXITED:         emit ServerExited();                             break;
      }
      emit InternalThreadEvent(code, next, sessionID, factoryID);  // these get emitted for any event

      const char * id = _handlers.HasItems() ? strchr(sessionID()+1, '/') : NULL;
      if (id)
      {
         QMessageTransceiverHandler * handler;
         if (_handlers.Get(atoi(id+1), handler) == B_NO_ERROR)
         {
            // If it's not already in the list, prepend it to the list and tell it to emit its BeginMessageBatch() signal
            if ((code == MTT_EVENT_INCOMING_MESSAGE)&&(handler != _lastSeenHandler)&&(handler->_nextSeen == NULL))
            {
               if (_firstSeenHandler == NULL) _firstSeenHandler = _lastSeenHandler = handler;
               else
               {
                  _firstSeenHandler->_prevSeen = handler;
                  handler->_nextSeen = _firstSeenHandler;
                  _firstSeenHandler = handler;
               }
               handler->EmitBeginMessageBatch();
            }
            handler->HandleIncomingEvent(code, next, iap);
         }
      }
   }

   FlushSeenHandlers(true);

   if (seenIncomingMessage) emit EndMessageBatch();
}