void PollServerThread::run() { extern volatile bool gPhoneScreenSyncOn; while ( !m_exit && gPhoneScreenSyncOn ) { if ( !connecting() ) { int n = WaitForMessage(m_rfbClient, 500); if ( n < 0 ) { m_exit = true; break; } else if ( n > 0 ) { emit messageArrived(); m_lastMessageReceivedTimer.start(); } else if ( checkConnection() ) { if ( ((ConnectionWindow *)parent())->connected() && m_lastMessageReceivedTimer.elapsed() > QVNCVIEWER_CONNPEND_TIMEOUT ) { setCheckConnection(false); m_rfbClient->updateRect.x = m_rfbClient->updateRect.y = 0; m_rfbClient->updateRect.w = m_rfbClient->width; m_rfbClient->updateRect.h = m_rfbClient->height; SendIncrementalFramebufferUpdateRequest(m_rfbClient); } } QTest::qWait(0); } else if ( connecting() ) { setCheckConnection(true); qApp->processEvents(QEventLoop::AllEvents, 10); } } emit connectionClosed(); }
void ConnectionWindow::setConnected(bool conn) { m_connected = conn; if ( connected() ) { m_pollServerThread = new PollServerThread(m_rfbClient, this); connect(pollServerThread(), SIGNAL(messageArrived()), this, SLOT(messageArrived()), Qt::BlockingQueuedConnection); connect(pollServerThread(), SIGNAL(connectionClosed()), this, SLOT(connectionClosed())); switch ( surfaceType() ) { case QVNCVIEWER_SURFACE_RASTER: default: surfaceWidget()->setSurfaceSize(QSize(m_rfbClient->width, m_rfbClient->height)); surfaceWidget()->setDefaultMessage(tr("Connected")); surfaceWidget()->update(); surfaceWidget()->setFocus(); break; } pollServerThread()->start(); m_rfbClient->updateRect.x = m_rfbClient->updateRect.y = 0; m_rfbClient->updateRect.w = m_rfbClient->width; m_rfbClient->updateRect.h = m_rfbClient->height; SendIncrementalFramebufferUpdateRequest(m_rfbClient); } else { if ( pollServerThread() ) { pollServerThread()->disconnect(); pollServerThread()->setExit(true); pollServerThread()->wait(); delete pollServerThread(); m_pollServerThread = 0; } switch ( surfaceType() ) { case QVNCVIEWER_SURFACE_RASTER: default: surfaceWidget()->clearSurface(); surfaceWidget()->setDefaultMessage(tr("Disconnected")); surfaceWidget()->update(); break; } } }
/** * \brief put a message into the internal receive queue * \param message the message to be queued * \return true if message has been accepted else false * * called by messageHub to send a message * */ bool eveMessageChannel::queueMessage(eveMessage * message) { QWriteLocker locker(&recLock); if (!acceptInput) return false; if (message->getPriority() == EVEMESSAGEPRIO_HIGH) receiveFastMessageList.append(message); else receiveMessageList.append(message); emit messageArrived(); return true; }
void DecoderBase::mapEnd() { ATLAS_DEBUG(std::cout << "DecoderBase::mapEnd" << std::endl) assert(!m_maps.empty()); assert(!m_state.empty()); m_state.pop(); switch (m_state.top()) { case STATE_MAP: { MapType map = std::move(m_maps.top()); m_maps.pop(); assert(!m_maps.empty()); assert(!m_names.empty()); m_maps.top().emplace(std::move(m_names.top()), std::move(map)); m_names.pop(); } break; case STATE_LIST: { assert(!m_lists.empty()); m_lists.top().push_back(std::move(m_maps.top())); m_maps.pop(); } break; case STATE_STREAM: { messageArrived(std::move(m_maps.top())); m_maps.pop(); } break; default: { // MapType map = m_maps.top(); m_maps.pop(); } break; } }
//eveMessageChannel::eveMessageChannel(QObject *parent): QObject(parent) eveMessageChannel::eveMessageChannel(QObject *parent) { acceptInput = true; unregistered = false; connect(this, SIGNAL(messageArrived()), this, SLOT(newQueuedMessage()) ,Qt::QueuedConnection); }