void ClientLobbyRoomProtocol::update(float dt) { switch (m_state) { case NONE: if (STKHost::get()->isConnectedTo(m_server_address)) { m_state = LINKED; } break; case LINKED: { core::stringw name; if(PlayerManager::getCurrentOnlineState()==PlayerProfile::OS_SIGNED_IN) name = PlayerManager::getCurrentOnlineUserName(); else name = PlayerManager::getCurrentPlayer()->getName(); std::string name_u8 = StringUtils::wideToUtf8(name); const std::string &password = NetworkConfig::get()->getPassword(); NetworkString *ns = getNetworkString(6+1+name_u8.size() +1+password.size()); // 4 (size of id), global id ns->addUInt8(LE_CONNECTION_REQUESTED).encodeString(name) .encodeString(NetworkConfig::get()->getPassword()); sendToServer(ns); delete ns; m_state = REQUESTING_CONNECTION; } break; case REQUESTING_CONNECTION: break; case CONNECTED: break; case KART_SELECTION: { NetworkKartSelectionScreen* screen = NetworkKartSelectionScreen::getInstance(); screen->push(); m_state = SELECTING_KARTS; } break; case SELECTING_KARTS: break; case PLAYING: break; case RACE_FINISHED: break; case DONE: m_state = EXITING; ProtocolManager::getInstance()->requestTerminate(this); break; case EXITING: break; } } // update
void ClientLobbyRoomProtocol::update() { switch (m_state) { case NONE: if (NetworkManager::getInstance()->isConnectedTo(m_server_address)) { m_state = LINKED; } break; case LINKED: { NetworkString ns(6); // 1 (connection request), 4 (size of id), global id ns.ai8(1).ai8(4).ai32(PlayerManager::getCurrentOnlineId()); m_listener->sendMessage(this, ns); m_state = REQUESTING_CONNECTION; } break; case REQUESTING_CONNECTION: break; case CONNECTED: break; case KART_SELECTION: { NetworkKartSelectionScreen* screen = NetworkKartSelectionScreen::getInstance(); screen->push(); m_state = SELECTING_KARTS; } break; case SELECTING_KARTS: break; case PLAYING: { if (NetworkWorld::getInstance<NetworkWorld>()->isRaceOver()) // race is now over, kill race protocols and return to connected state { Log::info("ClientLobbyRoomProtocol", "Game finished."); m_state = RACE_FINISHED; } } break; case RACE_FINISHED: break; case DONE: m_state = EXITING; m_listener->requestTerminate(this); break; case EXITING: break; } } // update