Beispiel #1
0
void
WUploadThread::Reset()
{
	PRINT("WUploadThread::Reset()\n");
	SetFinished(true);
	if (fTunneled)
		SessionDisconnected(_sessionID);
	else
		qmtt->Reset();
	PRINT("WUploadThread::Reset() OK\n");
}
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
}
Beispiel #3
0
void
WUploadThread::ServerExited()
{
	SessionDisconnected(_sessionID);
}
Beispiel #4
0
void
WUploadThread::SessionDetached(const String &sessionID)
{
	SessionDisconnected(sessionID);
}
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();
}