bool ClientLobbyRoomProtocol::notifyEventAsynchronous(Event* event)
{
    assert(m_setup); // assert that the setup exists
    if (event->getType() == EVENT_TYPE_MESSAGE)
    {
        const NetworkString &data = event->data();
        assert(data.size()); // assert that data isn't empty
        uint8_t message_type = data[0];
        if (message_type == 0x03 ||
            message_type == 0x06)
            return false; // don't treat the event

        event->removeFront(1);
        Log::info("ClientLobbyRoomProtocol", "Asynchronous message of type %d", message_type);
        if (message_type == 0x01) // new player connected
            newPlayer(event);
        else if (message_type == 0x02) // player disconnected
            disconnectedPlayer(event);
        else if (message_type == 0x04) // start race
            startGame(event);
        else if (message_type == 0x05) // start selection phase
            startSelection(event);
        else if (message_type == 0x80) // connection refused
            connectionRefused(event);
        else if (message_type == 0x81) // connection accepted
            connectionAccepted(event);
        else if (message_type == 0x82) // kart selection refused
            kartSelectionRefused(event);
        else if (message_type == 0xc0) // vote for major mode
            playerMajorVote(event);
        else if (message_type == 0xc1) // vote for race count
            playerRaceCountVote(event);
        else if (message_type == 0xc2) // vote for minor mode
            playerMinorVote(event);
        else if (message_type == 0xc3) // vote for track
            playerTrackVote(event);
        else if (message_type == 0xc4) // vote for reversed mode
            playerReversedVote(event);
        else if (message_type == 0xc5) // vote for laps
            playerLapsVote(event);

        return true;
    } // message
    else if (event->getType() == EVENT_TYPE_CONNECTED)
    {
        return true;
    } // connection
    else if (event->getType() == EVENT_TYPE_DISCONNECTED) // means we left essentially
    {
        NetworkManager::getInstance()->removePeer(m_server);
        m_server = NULL;
        NetworkManager::getInstance()->disconnected();
        m_listener->requestTerminate(this);
        NetworkManager::getInstance()->reset();
        // probably the same as m_server
        NetworkManager::getInstance()->removePeer(event->getPeer());
        return true;
    } // disconnection
    return false;
}   // notifyEventAsynchronous
Exemple #2
0
void MainWindow::startListenTcp(){
    QThread *thr=new QThread(this);
    m_rpsvr =new RpSvrThread();
    m_rpsvr->init(m_strTCPHost,m_strTCPPort.toInt(),"*");
    m_rpsvr->moveToThread(thr);
    connect(thr,SIGNAL(started()),m_rpsvr,SLOT(startWork()));
    connect(m_rpsvr,SIGNAL(dataChanged()),this,SLOT(slUpdateTcpData()));
    connect(m_rpsvr,SIGNAL(connectionEstablished()),this,SLOT(slTcpEstablished()));
    connect(m_rpsvr,SIGNAL(connectionRefused(QString)),this,SLOT(slTcpRefused(QString)));
    thr->start();
}
void Communication::initTcpCommunication(Controller *pController)
{
    this->controller = pController;

    qDebug() << "Init TCP communication";
    qDebug() << "Connection to " << this->controller->getName() << " " << this->controller->getIpAddr() << " " << this->controller->getPort();

    this->tcpClient = new TcpClient(this->controller->getIpAddr(),this->controller->getPort());
    connect(this->tcpClient, SIGNAL(connectionRefused()), this, SLOT(catchTcpConnectionRefused()));
    connect(this->tcpClient, SIGNAL(connectionEstablished()), this, SLOT(catchTcpConnectionEstablished()));
    connect(this->tcpClient, SIGNAL(connectionClosed()), this, SLOT(catchTcpConnectionClosed()));
    this->tcpClient->connection();
}
void Communication::close()
{
    if (this->udp != NULL)
    {
        this->udp->closeConnection();
    }
    if (this->tcpClient != NULL)
    {
        this->tcpClient->closeConnection();
        disconnect(this->tcpClient, SIGNAL(connectionRefused()), 0, 0);
        disconnect(this->tcpClient, SIGNAL(connectionEstablished()), 0, 0);
        disconnect(this->tcpClient, SIGNAL(connectionClosed()), 0, 0);
        this->msleep(500);
    }
}
bool ClientLobbyRoomProtocol::notifyEventAsynchronous(Event* event)
{
    assert(m_setup); // assert that the setup exists
    if (event->getType() == EVENT_TYPE_MESSAGE)
    {
        NetworkString &data = event->data();
        assert(data.size()); // assert that data isn't empty
        uint8_t message_type = data.getUInt8();

        Log::info("ClientLobbyRoomProtocol", "Asynchronous message of type %d",
                  message_type);
        switch(message_type)
        {
            case LE_NEW_PLAYER_CONNECTED: newPlayer(event);              break;
            case LE_PLAYER_DISCONNECTED : disconnectedPlayer(event);     break;
            case LE_START_RACE: startGame(event);                        break;
            case LE_START_SELECTION: startSelection(event);              break;
            case LE_CONNECTION_REFUSED: connectionRefused(event);        break;
            case LE_CONNECTION_ACCEPTED: connectionAccepted(event);      break;
            case LE_KART_SELECTION_REFUSED: kartSelectionRefused(event); break;
            case LE_VOTE_MAJOR : playerMajorVote(event);                 break;
            case LE_VOTE_RACE_COUNT: playerRaceCountVote(event);         break;
            case LE_VOTE_MINOR: playerMinorVote(event);                  break;
            case LE_VOTE_TRACK: playerTrackVote(event);                  break;
            case LE_VOTE_REVERSE: playerReversedVote(event);             break;
            case LE_VOTE_LAPS: playerLapsVote(event);                    break;
        }   // switch

        return true;
    } // message
    else if (event->getType() == EVENT_TYPE_DISCONNECTED) 
    {
        // This means we left essentially.
        // We can't delete STKHost from this thread, since the main
        // thread might still test if STKHost exists and then call
        // the ProtocolManager, which might already have been deleted.
        // So only signal that STKHost should exit, which will be tested
        // from the main thread.
        STKHost::get()->requestShutdown();
        return true;
    } // disconnection
    return false;
}   // notifyEventAsynchronous