BootstrapDialog::BootstrapDialog( PlayerListener* listener, QWidget* parent ) : QProgressDialog( parent ) { #ifdef WIN32 m_plugins = Plugin::installed(); connect( listener, SIGNAL(bootstrapCompleted( QString )), SLOT(onBootstrapCompleted( QString )) ); #else Q_UNUSED( listener ); #endif }
void PlayerListener::onDataReady() { QLocalSocket* socket = qobject_cast<QLocalSocket*>(sender()); if (!socket) return; while (socket->canReadLine()) { QString const line = QString::fromUtf8( socket->readLine() ); try { PlayerCommandParser parser( line ); QString const id = parser.playerId(); PlayerConnection* connection = 0; if (!m_connections.contains( id )) { connection = m_connections[id] = new PlayerConnection( parser.playerId(), parser.playerName() ); emit newConnection( connection ); } else connection = m_connections[id]; switch (parser.command()) { case CommandBootstrap: emit bootstrapCompleted( parser.playerId() ); break; case CommandTerm: delete connection; m_connections.remove( parser.playerId() ); break; default: connection->handleCommand( parser.command(), parser.track() ); break; } socket->write( "OK\n" ); } catch (std::invalid_argument& e) { qWarning() << e.what(); QString s = "ERROR: " + QString::fromStdString(e.what()) + "\n"; socket->write( s.toUtf8() ); } } }