void Config::setupMessagePump( Pipe* pipe ) { const bool isThreaded = pipe->isThreaded(); const WindowSystem windowSystem = pipe->getWindowSystem(); if( isThreaded && windowSystem.getName() != "AGL" ) return; // called from pipe threads - but only during init static co::base::Lock _lock; co::base::ScopedWrite mutex( _lock ); if( _eventQueue.getMessagePump( )) // Already done return; MessagePump* pump = pipe->createMessagePump(); _eventQueue.setMessagePump( pump ); ClientPtr client = getClient(); CommandQueue* queue = EQSAFECAST( CommandQueue*, client->getMainThreadQueue( )); EQASSERT( queue ); EQASSERT( !queue->getMessagePump( )); queue->setMessagePump( pump ); }
MessagePump* Config::getMessagePump() { ClientPtr client = getClient(); CommandQueue* queue = EQSAFECAST( CommandQueue*, client->getMainThreadQueue( )); if( queue ) return queue->getMessagePump(); return 0; }
void Server::setClient( ClientPtr client ) { Super::setClient( client ); if( !client ) return; co::CommandQueue* queue = client->getMainThreadQueue(); registerCommand( fabric::CMD_SERVER_CHOOSE_CONFIG_REPLY, CmdFunc( this, &Server::_cmdChooseConfigReply ), queue ); registerCommand( fabric::CMD_SERVER_RELEASE_CONFIG_REPLY, CmdFunc( this, &Server::_cmdReleaseConfigReply ), queue ); registerCommand( fabric::CMD_SERVER_SHUTDOWN_REPLY, CmdFunc( this, &Server::_cmdShutdownReply ), queue ); }
void Config::_exitMessagePump() { MessagePump* pump = _eventQueue.getMessagePump(); _eventQueue.setMessagePump( 0 ); ClientPtr client = getClient(); CommandQueue* queue = EQSAFECAST( CommandQueue*, client->getMainThreadQueue( )); EQASSERT( queue ); EQASSERT( queue->getMessagePump() == pump ); queue->setMessagePump( 0 ); delete pump; }