From 6803d0a0c4e2391f012c50a01d784c01225fa19c Mon Sep 17 00:00:00 2001 From: Nicolas Date: Thu, 29 Nov 2018 05:04:56 -0300 Subject: [PATCH] Remove SMOProtocol --- src/NetworkSyncManager.cpp | 833 ----------------------------------- src/NetworkSyncManager.h | 61 --- src/ScreenGameplay.cpp | 11 +- src/ScreenGameplay.h | 6 - src/ScreenNetRoom.cpp | 4 - src/ScreenNetSelectBase.cpp | 1 - src/ScreenNetSelectMusic.cpp | 6 +- src/ScreenSMOnlineLogin.cpp | 35 -- src/ScreenSelectMusic.cpp | 50 ++- 9 files changed, 32 insertions(+), 975 deletions(-) diff --git a/src/NetworkSyncManager.cpp b/src/NetworkSyncManager.cpp index 746c9db4c9..f7648177a2 100644 --- a/src/NetworkSyncManager.cpp +++ b/src/NetworkSyncManager.cpp @@ -214,7 +214,6 @@ AutoScreenMessage(SM_ChangeSong); AutoScreenMessage(SM_GotEval); AutoScreenMessage(SM_UsersUpdate); AutoScreenMessage(SM_FriendsUpdate); -AutoScreenMessage(SM_SMOnlinePack); AutoScreenMessage(ETTP_Disconnect); AutoScreenMessage(ETTP_LoginResponse); @@ -232,15 +231,6 @@ static LocalizedString CONNECTION_SUCCESSFUL("NetworkSyncManager", static LocalizedString CONNECTION_FAILED("NetworkSyncManager", "Connection failed."); -SMOProtocol::SMOProtocol() -{ - NetPlayerClient = new EzSockets; - NetPlayerClient->blocking = false; - BroadcastReception = new EzSockets; - BroadcastReception->create(IPPROTO_UDP); - BroadcastReception->bind(8765); - BroadcastReception->blocking = false; -} static LocalizedString INITIALIZING_CLIENT_NETWORK( "NetworkSyncManager", "Initializing Client Network..."); @@ -265,18 +255,6 @@ NetworkSyncManager::NetworkSyncManager(LoadingWindow* ld) } } -SMOProtocol::~SMOProtocol() -{ - if (NetPlayerClient) { - NetPlayerClient->close(); - SAFE_DELETE(NetPlayerClient); - } - - if (BroadcastReception != nullptr) { - BroadcastReception->close(); - SAFE_DELETE(BroadcastReception); - } -} NetworkSyncManager::~NetworkSyncManager() {} void @@ -328,49 +306,6 @@ NetworkSyncManager::OffEval() curProtocol->OffEval(); } -void -SMOProtocol::OffEval() -{ - ReportNSSOnOff(4); -} -void -SMOProtocol::OnEval() -{ - ReportNSSOnOff(5); -} -void -SMOProtocol::OnMusicSelect() -{ - ReportNSSOnOff(1); - ReportPlayerOptions(); -} -void -SMOProtocol::OffMusicSelect() -{ - ReportNSSOnOff(0); -} -void -SMOProtocol::OffRoomSelect() -{ - ReportNSSOnOff(6); -} -void -SMOProtocol::OnRoomSelect() -{ - ReportNSSOnOff(7); -} -void -SMOProtocol::OnOptions() -{ - ReportNSSOnOff(3); -} -void -SMOProtocol::OffOptions() -{ - ReportNSSOnOff(1); - ReportPlayerOptions(); -} - void ETTProtocol::OffEval() { @@ -416,14 +351,6 @@ ETTProtocol::OffOptions() state = 0; } -void -SMOProtocol::close() -{ - serverVersion = 0; - serverName = ""; - NetPlayerClient->close(); -} - void ETTProtocol::close() { @@ -462,7 +389,6 @@ NetworkSyncManager::CloseConnection() m_sArtist = ""; difficulty = Difficulty_Invalid; meter = -1; - SMOP.close(); ETTP.close(); curProtocol = nullptr; MESSAGEMAN->Broadcast("MultiplayerDisconnection"); @@ -505,10 +431,6 @@ NetworkSyncManager::PostStartUp(const RString& ServerIP) if (ETTP.Connect(this, iPort, sAddress)) curProtocol = &ETTP; - else - - if (SMOP.Connect(this, iPort, sAddress)) - curProtocol = &SMOP; if (curProtocol == nullptr) return; g_sLastServer.Set(ServerIP); @@ -1046,68 +968,6 @@ ETTProtocol::Update(NetworkSyncManager* n, float fDeltaTime) newMessages.clear(); } -bool -SMOProtocol::TryConnect(unsigned short port, RString address) -{ - NetPlayerClient->create(); // Initialize Socket - return NetPlayerClient->connect(address, port); -} - -bool -SMOProtocol::Connect(NetworkSyncManager* n, - unsigned short port, - RString address) -{ - if (!EzSockets::CanConnect(address, port) || !TryConnect(port, address)) { - n->m_startupStatus = 2; - LOG->Warn("SMOProtocol failed to connect"); - return false; - } - - // If network play is desired and the connection works, - // halt until we know what server version we're dealing with - - m_packet.ClearPacket(); - m_packet.Write1(NSCHello); // Hello Packet - m_packet.Write1(NETPROTOCOLVERSION); - m_packet.WriteNT(RString(string(PRODUCT_FAMILY) + product_version)); - - /* Block until response is received. - * Move mode to blocking in order to give CPU back to the system, - * and not wait. - */ - bool dontExit = true; - NetPlayerClient->blocking = true; - - // The following packet must get through, so we block for it. - // If we are serving, we do not block for this. - NetPlayerClient->SendPack(reinterpret_cast(m_packet.Data), - m_packet.Position); - m_packet.ClearPacket(); - while (dontExit) { - m_packet.ClearPacket(); - if (NetPlayerClient->ReadPack(reinterpret_cast(&m_packet), - NETMAXBUFFERSIZE) < 1) - dontExit = - false; // Also allow exit if there is a problem on the socket - if (m_packet.Read1() == NSServerOffset + NSCHello) - dontExit = false; - // Only allow passing on handshake; otherwise scoreboard updates and - // such will confuse us. - } - - NetPlayerClient->blocking = false; - serverVersion = m_packet.Read1(); - if (serverVersion >= 128) - n->isSMOnline = true; - serverName = m_packet.ReadNT(); - m_iSalt = m_packet.Read4(); - RString sMessage = - ssprintf(CONNECTION_SUCCESSFUL.GetValue(), serverName.c_str()); - SCREENMAN->SystemMessage(sMessage); - return true; -} - void NetworkSyncManager::StartUp() { @@ -1125,15 +985,6 @@ NetworkSyncManager::ReportNSSOnOff(int i) if (curProtocol != nullptr) curProtocol->ReportNSSOnOff(i); } -void -SMOProtocol::ReportNSSOnOff(int i) -{ - m_packet.ClearPacket(); - m_packet.Write1(NSCSMS); - m_packet.Write1((uint8_t)i); - NetPlayerClient->SendPack(reinterpret_cast(m_packet.Data), - m_packet.Position); -} RString NetworkSyncManager::GetServerName() @@ -1141,109 +992,6 @@ NetworkSyncManager::GetServerName() return curProtocol != nullptr ? curProtocol->serverName : ""; } -void -SMOProtocol::DealWithSMOnlinePack(PacketFunctions& SMOnlinePacket, - ScreenNetSelectMusic* s) -{ - if (SMOnlinePacket.Read1() == 1) { - switch (SMOnlinePacket.Read1()) { - case 0: // Room title Change - { - RString titleSub; - titleSub = SMOnlinePacket.ReadNT() + "\n"; - titleSub += SMOnlinePacket.ReadNT(); - if (SMOnlinePacket.Read1() != 1) { - RString SMOnlineSelectScreen = THEME->GetMetric( - "ScreenNetSelectMusic", "RoomSelectScreen"); - SCREENMAN->SetNewScreen(SMOnlineSelectScreen); - } - } - } - } -} - -int -SMOProtocol::DealWithSMOnlinePack(PacketFunctions& SMOnlinePacket, - ScreenSMOnlineLogin* s, - RString& response) -{ - int ResponseCode = SMOnlinePacket.Read1(); - if (ResponseCode == 0) { - int Status = SMOnlinePacket.Read1(); - if (Status == 0) { - NSMAN->loggedIn = true; - SCREENMAN->SetNewScreen( - THEME->GetMetric("ScreenSMOnlineLogin", "NextScreen")); - return 2; - } else { - response = SMOnlinePacket.ReadNT(); - return 3; - } - } - return 4; -} - -void -SMOProtocol::DealWithSMOnlinePack(PacketFunctions& SMOnlinePacket, - ScreenNetRoom* s) -{ - switch (SMOnlinePacket.Read1()) { - case 1: - switch (SMOnlinePacket.Read1()) { - case 0: // Room title Change - { - RString title, subtitle; - title = SMOnlinePacket.ReadNT(); - subtitle = SMOnlinePacket.ReadNT(); - - Message msg(MessageIDToString(Message_UpdateScreenHeader)); - msg.SetParam("Header", title); - msg.SetParam("Subheader", subtitle); - MESSAGEMAN->Broadcast(msg); - - if (SMOnlinePacket.Read1() != 0) { - RString SMOnlineSelectScreen = THEME->GetMetric( - "ScreenNetRoom", "MusicSelectScreen"); - SCREENMAN->SetNewScreen(SMOnlineSelectScreen); - } - } break; - case 1: // Rooms list change - { - int numRooms = SMOnlinePacket.Read1(); - (NSMAN->m_Rooms).clear(); - for (int i = 0; i < numRooms; ++i) { - RoomData tmpRoomData; - tmpRoomData.SetName(SMOnlinePacket.ReadNT()); - tmpRoomData.SetDescription(SMOnlinePacket.ReadNT()); - (NSMAN->m_Rooms).push_back(tmpRoomData); - } - // Abide by protocol and read room status - for (int i = 0; i < numRooms; ++i) - (NSMAN->m_Rooms)[i].SetState(SMOnlinePacket.Read1()); - - for (int i = 0; i < numRooms; ++i) - (NSMAN->m_Rooms)[i].SetFlags(SMOnlinePacket.Read1()); - - s->UpdateRoomsList(); - } break; - } - break; - case 3: - RoomInfo info; - info.songTitle = SMOnlinePacket.ReadNT(); - info.songSubTitle = SMOnlinePacket.ReadNT(); - info.songArtist = SMOnlinePacket.ReadNT(); - info.numPlayers = SMOnlinePacket.Read1(); - info.maxPlayers = SMOnlinePacket.Read1(); - info.players.resize(info.numPlayers); - for (int i = 0; i < info.numPlayers; ++i) - info.players[i] = SMOnlinePacket.ReadNT(); - - s->m_roomInfo.SetRoomInfo(info); - break; - } -} - void NetworkSyncManager::Logout() { @@ -1358,23 +1106,6 @@ ETTProtocol::Login(RString user, RString pass) SCREENMAN->SendMessageToTopScreen(ETTP_LoginResponse); }; } -void -SMOProtocol::Login(RString user, RString pass) -{ - RString HashedName = NSMAN->MD5Hex(pass); - int authMethod = 0; - if (m_iSalt != 0) { - authMethod = 1; - HashedName = NSMAN->MD5Hex(HashedName + ssprintf("%d", m_iSalt)); - } - SMOnlinePacket.ClearPacket(); - SMOnlinePacket.Write1((uint8_t)0); // Login command - SMOnlinePacket.Write1((uint8_t)0); // Player - SMOnlinePacket.Write1((uint8_t)authMethod); // MD5 hash style - SMOnlinePacket.WriteNT(user); - SMOnlinePacket.WriteNT(HashedName); - SendSMOnline(); -} void NetworkSyncManager::ReportScore(int playerID, @@ -1389,56 +1120,6 @@ NetworkSyncManager::ReportScore(int playerID, this, playerID, step, score, combo, offset, numNotes); } void -SMOProtocol::ReportScore(NetworkSyncManager* n, - int playerID, - int step, - int score, - int combo, - float offset, - int numNotes) -{ - if (!n->useSMserver) // Make sure that we are using the network - return; - - LOG->Trace("Player ID %i combo = %i", playerID, combo); - m_packet.ClearPacket(); - - m_packet.Write1(NSCGSU); - step = n->TranslateStepType(step); - uint8_t ctr = (uint8_t)(playerID * 16 + step - (SMOST_HITMINE - 1)); - m_packet.Write1(ctr); - - ctr = uint8_t(STATSMAN->m_CurStageStats.m_player[playerID].GetGrade() * 16 + - numNotes); - - if (STATSMAN->m_CurStageStats.m_player[playerID].m_bFailed) - ctr = - uint8_t(112); // Code for failed (failed constant seems not to work) - - m_packet.Write1(ctr); - m_packet.Write4(score); - m_packet.Write2((uint16_t)combo); - m_packet.Write2((uint16_t)n->m_playerLife); - - // Offset Info - // Note: if a 0 is sent, then disregard data. - - // ASSUMED: No step will be more than 16 seconds off center. - // If this assumption is false, read 16 seconds in either direction. - auto iOffset = int((offset + 16.384) * 2000.0f); - if (iOffset > 65535) - iOffset = 65535; - if (iOffset < 1) - iOffset = 1; - - // Report 0 if hold, or miss (don't forget mines should report) - if (step == SMOST_HITMINE || step > SMOST_W1) - iOffset = 0; - m_packet.Write2((uint16_t)iOffset); - NetPlayerClient->SendPack(reinterpret_cast(m_packet.Data), - m_packet.Position); -} -void NetworkSyncManager::ReportHighScore(HighScore* hs, PlayerStageStats& pss) { if (curProtocol != nullptr) @@ -1529,58 +1210,6 @@ NetworkSyncManager::ReportScore(int playerID, if (curProtocol != nullptr) curProtocol->ReportScore(this, playerID, step, score, combo, offset); } -void -SMOProtocol::ReportScore(NetworkSyncManager* n, - int playerID, - int step, - int score, - int combo, - float offset) -{ - if (!n->useSMserver) // Make sure that we are using the network - return; - - LOG->Trace("Player ID %i combo = %i", playerID, combo); - m_packet.ClearPacket(); - - m_packet.Write1(NSCGSU); - step = n->TranslateStepType(step); - uint8_t ctr = (uint8_t)(playerID * 16 + step - (SMOST_HITMINE - 1)); - m_packet.Write1(ctr); - - ctr = uint8_t(STATSMAN->m_CurStageStats.m_player[playerID].GetGrade() * 16); - - if (STATSMAN->m_CurStageStats.m_player[playerID].m_bFailed) - ctr = - uint8_t(112); // Code for failed (failed constant seems not to work) - - m_packet.Write1(ctr); - m_packet.Write4(score); - m_packet.Write2((uint16_t)combo); - m_packet.Write2((uint16_t)n->m_playerLife); - - // Offset Info - // Note: if a 0 is sent, then disregard data. - - // ASSUMED: No step will be more than 16 seconds off center. - // If this assumption is false, read 16 seconds in either direction. - auto iOffset = int((offset + 16.384) * 2000.0f); - - if (iOffset > 65535) - iOffset = 65535; - if (iOffset < 1) - iOffset = 1; - - // Report 0 if hold, or miss (don't forget mines should report) - if (step == SMOST_HITMINE || step > SMOST_W1) - iOffset = 0; - - m_packet.Write2((uint16_t)iOffset); - - NetPlayerClient->SendPack(reinterpret_cast(m_packet.Data), - m_packet.Position); -} - void NetworkSyncManager::ReportSongOver() { @@ -1597,41 +1226,12 @@ ETTProtocol::ReportSongOver(NetworkSyncManager* n) gameOver["id"] = msgId++; Send(gameOver); } -void -SMOProtocol::ReportSongOver(NetworkSyncManager* n) -{ - if (!n->useSMserver) // Make sure that we are using the network - return; - m_packet.ClearPacket(); - - m_packet.Write1(NSCGON); - - NetPlayerClient->SendPack(reinterpret_cast(&m_packet.Data), - m_packet.Position); - return; -} - void NetworkSyncManager::ReportStyle() { if (curProtocol != nullptr) curProtocol->ReportStyle(this); } -void -SMOProtocol::ReportStyle(NetworkSyncManager* n) -{ - LOG->Trace(R"(Sending "Style" to server)"); - - if (!n->useSMserver) - return; - m_packet.ClearPacket(); - m_packet.Write1(NSCSU); - m_packet.Write1((int8_t)GAMESTATE->GetNumPlayersEnabled()); - m_packet.Write1((uint8_t)PLAYER_1); - m_packet.WriteNT(GAMESTATE->GetPlayerDisplayName(PLAYER_1)); - NetPlayerClient->SendPack(reinterpret_cast(&m_packet.Data), - m_packet.Position); -} void NetworkSyncManager::StartRequest(short position) @@ -1641,125 +1241,6 @@ NetworkSyncManager::StartRequest(short position) if (curProtocol != nullptr) curProtocol->StartRequest(this, position); } -void -SMOProtocol::StartRequest(NetworkSyncManager* n, short position) -{ - if (!n->useSMserver) - return; - if (GAMESTATE->m_bDemonstrationOrJukebox) - return; - LOG->Trace("Requesting Start from Server."); - - m_packet.ClearPacket(); - m_packet.Write1(NSCGSR); - unsigned char ctr = 0; - - Steps* tSteps; - tSteps = GAMESTATE->m_pCurSteps[PLAYER_1]; - if (tSteps != NULL && GAMESTATE->IsPlayerEnabled(PLAYER_1)) - ctr = uint8_t(ctr + tSteps->GetMeter() * 16); - - tSteps = GAMESTATE->m_pCurSteps[PLAYER_2]; - if (tSteps != NULL && GAMESTATE->IsPlayerEnabled(PLAYER_2)) - ctr = uint8_t(ctr + tSteps->GetMeter()); - - m_packet.Write1(ctr); - ctr = 0; - - tSteps = GAMESTATE->m_pCurSteps[PLAYER_1]; - if (tSteps != NULL && GAMESTATE->IsPlayerEnabled(PLAYER_1)) - ctr = uint8_t(ctr + (int)tSteps->GetDifficulty() * 16); - - tSteps = GAMESTATE->m_pCurSteps[PLAYER_2]; - if (tSteps != NULL && GAMESTATE->IsPlayerEnabled(PLAYER_2)) - ctr = uint8_t(ctr + (int)tSteps->GetDifficulty()); - - m_packet.Write1(ctr); - // Notify server if this is for sync or not. - ctr = char(position * 16); - m_packet.Write1(ctr); - - if (GAMESTATE->m_pCurSong != NULL) { - m_packet.WriteNT(GAMESTATE->m_pCurSong->m_sMainTitle); - m_packet.WriteNT(GAMESTATE->m_pCurSong->m_sSubTitle); - m_packet.WriteNT(GAMESTATE->m_pCurSong->m_sArtist); - } else { - m_packet.WriteNT(""); - m_packet.WriteNT(""); - m_packet.WriteNT(""); - } - - m_packet.WriteNT(RString()); - - // Send Player (and song) Options - m_packet.WriteNT(GAMESTATE->m_SongOptions.GetCurrent().GetString()); - - int players = 0; - FOREACH_PlayerNumber(p) - { - ++players; - m_packet.WriteNT(GAMESTATE->m_pPlayerState[p] - ->m_PlayerOptions.GetCurrent() - .GetString()); - } - for (int i = 0; i < 2 - players; ++i) - m_packet.WriteNT(""); // Write a NULL if no player - - // Send chartkey - if (serverVersion >= 129) { - tSteps = GAMESTATE->m_pCurSteps[PLAYER_1]; - if (tSteps != NULL && GAMESTATE->IsPlayerEnabled(PLAYER_1)) { - m_packet.WriteNT(tSteps->GetChartKey()); - } else { - m_packet.WriteNT(""); - } - - tSteps = GAMESTATE->m_pCurSteps[PLAYER_2]; - if (tSteps != NULL && GAMESTATE->IsPlayerEnabled(PLAYER_2)) { - m_packet.WriteNT(tSteps->GetChartKey()); - } else { - m_packet.WriteNT(""); - } - - int rate = - (int)(GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate * 100); - m_packet.Write1(rate); - m_packet.WriteNT(GAMESTATE->m_pCurSong->GetFileHash()); - } - - // Block until go is recieved. - // Switch to blocking mode (this is the only - // way I know how to get precievably instantanious results - - bool dontExit = true; - - NetPlayerClient->blocking = true; - - // The following packet HAS to get through, so we turn blocking on for it as - // well Don't block if we are serving - NetPlayerClient->SendPack(reinterpret_cast(&m_packet.Data), - m_packet.Position); - - LOG->Trace("Waiting for RECV"); - - m_packet.ClearPacket(); - - while (dontExit) { - m_packet.ClearPacket(); - if (NetPlayerClient->ReadPack(reinterpret_cast(&m_packet), - NETMAXBUFFERSIZE) < 1) - dontExit = - false; // Also allow exit if there is a problem on the socket - // Only do if we are not the server, otherwise the sync - // gets hosed up due to non blocking mode. - - if (m_packet.Read1() == (NSServerOffset + NSCGSR)) - dontExit = false; - // Only allow passing on Start request; otherwise scoreboard updates - // and such will confuse us. - } - NetPlayerClient->blocking = false; -} void NetworkSyncManager::DisplayStartupStatus() @@ -1790,245 +1271,9 @@ NetworkSyncManager::Update(float fDeltaTime) if (curProtocol != nullptr) curProtocol->Update(this, fDeltaTime); } -void -SMOProtocol::Update(NetworkSyncManager* n, float fDeltaTime) -{ - if (n->useSMserver) - ProcessInput(n); - else - return; - PacketFunctions BroadIn; - if (BroadcastReception->ReadPack(reinterpret_cast(&BroadIn.Data), - 1020) != 0) { - NetServerInfo ThisServer; - BroadIn.Position = 0; - if (BroadIn.Read1() == 141) // SMLS_Info? - { - ThisServer.Name = BroadIn.ReadNT(); - int port = BroadIn.Read2(); - BroadIn.Read2(); // Num players connected. - uint32_t addy = - EzSockets::LongFromAddrIn(BroadcastReception->fromAddr); - ThisServer.Address = ssprintf("%u.%u.%u.%u:%d", - (addy << 0) >> 24, - (addy << 8) >> 24, - (addy << 16) >> 24, - (addy << 24) >> 24, - port); - - // It's fairly safe to assume that users will not be on networks - // with more than 30 or 40 servers. Until this point, maps would - // be slower than vectors. So I am going to use a vector to store - // all of the servers. - // - // In this situation, I will traverse the vector to find the element - // that contains the corresponding server. - - unsigned int i; - for (i = 0; i < n->m_vAllLANServers.size(); i++) { - if (n->m_vAllLANServers[i].Address == ThisServer.Address) { - n->m_vAllLANServers[i].Name = ThisServer.Name; - break; - } - } - if (i >= n->m_vAllLANServers.size()) - n->m_vAllLANServers.push_back(ThisServer); - } - } -} static LocalizedString CONNECTION_DROPPED("NetworkSyncManager", "Connection to server dropped."); -void -SMOProtocol::ProcessInput(NetworkSyncManager* n) -{ - // If we're disconnected, just exit - if ((NetPlayerClient->state != NetPlayerClient->skCONNECTED) || - NetPlayerClient->IsError()) { - SCREENMAN->SystemMessageNoAnimate(CONNECTION_DROPPED); - n->useSMserver = false; - n->isSMOnline = false; - n->loggedIn = false; - NetPlayerClient->close(); - MESSAGEMAN->Broadcast("MultiplayerDisconnection"); - return; - } - - // load new data into buffer - NetPlayerClient->update(); - m_packet.ClearPacket(); - - int packetSize; - while ((packetSize = NetPlayerClient->ReadPack( - reinterpret_cast(&m_packet), NETMAXBUFFERSIZE)) > 0) { - m_packet.size = packetSize; - int command = m_packet.Read1(); - // Check to make sure command is valid from server - if (command < NSServerOffset) { - LOG->Trace("CMD (below 128) Invalid> %d", command); - break; - } - - command = command - NSServerOffset; - - switch (command) { - case NSCPing: // Ping packet responce - m_packet.ClearPacket(); - m_packet.Write1(NSCPingR); - NetPlayerClient->SendPack( - reinterpret_cast(m_packet.Data), m_packet.Position); - break; - case NSCPingR: // These are in response to when/if we send packet - // 0's - case NSCHello: // This is already taken care of by the blocking code - // earlier - case NSCGSR: // This is taken care of by the blocking start code - break; - case NSCGON: { - int PlayersInPack = m_packet.Read1(); - n->m_EvalPlayerData.resize(PlayersInPack); - for (int i = 0; i < PlayersInPack; ++i) - n->m_EvalPlayerData[i].name = m_packet.Read1(); - for (int i = 0; i < PlayersInPack; ++i) - n->m_EvalPlayerData[i].score = m_packet.Read4(); - for (int i = 0; i < PlayersInPack; ++i) - n->m_EvalPlayerData[i].grade = m_packet.Read1(); - for (int i = 0; i < PlayersInPack; ++i) - n->m_EvalPlayerData[i].difficulty = - (Difficulty)m_packet.Read1(); - for (int j = 0; j < NETNUMTAPSCORES; ++j) - for (int i = 0; i < PlayersInPack; ++i) - n->m_EvalPlayerData[i].tapScores[j] = m_packet.Read2(); - for (int i = 0; i < PlayersInPack; ++i) - n->m_EvalPlayerData[i].playerOptions = m_packet.ReadNT(); - SCREENMAN->SendMessageToTopScreen(SM_GotEval); - } break; - case NSCGSU: // Scoreboard Update - { // Ease scope - int ColumnNumber = m_packet.Read1(); - int NumberPlayers = m_packet.Read1(); - RString ColumnData; - - switch (ColumnNumber) { - case NSSB_NAMES: - ColumnData = "Names\n"; - for (int i = 0; i < NumberPlayers; ++i) - ColumnData += - n->m_PlayerNames[m_packet.Read1()] + "\n"; - break; - case NSSB_COMBO: - ColumnData = "Combo\n"; - for (int i = 0; i < NumberPlayers; ++i) - ColumnData += ssprintf("%d\n", m_packet.Read2()); - break; - case NSSB_GRADE: - ColumnData = "Grade\n"; - for (int i = 0; i < NumberPlayers; i++) - ColumnData += - GradeToLocalizedString(Grade(m_packet.Read1())) + - "\n"; - break; - } - n->m_Scoreboard[ColumnNumber] = ColumnData; - n->m_scoreboardchange[ColumnNumber] = true; - /* - Message msg("ScoreboardUpdate"); - msg.SetParam( "NumPlayers", NumberPlayers ); - MESSAGEMAN->Broadcast( msg ); - */ - } break; - case NSCSU: // System message from server - { - RString SysMSG = m_packet.ReadNT(); - SCREENMAN->SystemMessage(SysMSG); - } break; - case NSCCM: // Chat message from server - { - n->m_sChatText += m_packet.ReadNT() + " \n "; - // 10000 chars backlog should be more than enough - n->m_sChatText = n->m_sChatText.Right(10000); - SCREENMAN->SendMessageToTopScreen(SM_AddToChat); - } break; - case NSCRSG: // Select Song/Play song - { - n->m_EvalPlayerData.clear(); - n->m_iSelectMode = m_packet.Read1(); - n->m_sMainTitle = m_packet.ReadNT(); - n->m_sArtist = m_packet.ReadNT(); - n->m_sSubTitle = m_packet.ReadNT(); - // Read songhash - if (serverVersion >= 129) { - n->m_sFileHash = m_packet.ReadNT(); - } - SCREENMAN->SendMessageToTopScreen(SM_ChangeSong); - SCREENMAN->SendMessageToTopScreen(SM_ChangeSong); - } break; - case NSCUUL: { - /*int ServerMaxPlayers=*/m_packet.Read1(); - int PlayersInThisPacket = m_packet.Read1(); - n->m_ActivePlayer.clear(); - n->m_PlayerStatus.clear(); - n->m_PlayerNames.clear(); - n->m_ActivePlayers = 0; - for (int i = 0; i < PlayersInThisPacket; ++i) { - int PStatus = m_packet.Read1(); - if (PStatus > 0) { - n->m_ActivePlayers++; - n->m_ActivePlayer.push_back(i); - } - n->m_PlayerStatus.push_back(PStatus); - n->m_PlayerNames.push_back(m_packet.ReadNT()); - } - SCREENMAN->SendMessageToTopScreen(SM_UsersUpdate); - } break; - case NSCSMS: { - RString StyleName, GameName; - GameName = m_packet.ReadNT(); - StyleName = m_packet.ReadNT(); - - GAMESTATE->SetCurGame(GAMEMAN->StringToGame(GameName)); - GAMESTATE->SetCurrentStyle(GAMEMAN->GameAndStringToStyle( - GAMESTATE->m_pCurGame, StyleName), - PLAYER_INVALID); - - SCREENMAN->SetNewScreen( - "ScreenNetSelectMusic"); // Should this be metric'd out? - } break; - case NSCSMOnline: { - SMOnlinePacket.size = packetSize - 1; - SMOnlinePacket.Position = 0; - memcpy( - SMOnlinePacket.Data, (m_packet.Data + 1), packetSize - 1); - LOG->Trace("Received SMOnline Command: %d, size:%d", - command, - packetSize - 1); - SCREENMAN->SendMessageToTopScreen(SM_SMOnlinePack); - } break; - case NSCAttack: { - PlayerNumber iPlayerNumber = (PlayerNumber)m_packet.Read1(); - - if (GAMESTATE->IsPlayerEnabled(iPlayerNumber)) // There was an - // attack here, - // now there isnt - { - } - m_packet.ClearPacket(); - } break; - case FLU: { - int PlayersInThisPacket = m_packet.Read1(); - n->fl_PlayerNames.clear(); - n->fl_PlayerStates.clear(); - for (int i = 0; i < PlayersInThisPacket; ++i) { - int PStatus = m_packet.Read1(); - n->fl_PlayerStates.push_back(PStatus); - n->fl_PlayerNames.push_back(m_packet.ReadNT()); - } - SCREENMAN->SendMessageToTopScreen(SM_FriendsUpdate); - } break; - } - m_packet.ClearPacket(); - } -} bool NetworkSyncManager::ChangedScoreboard(int Column) @@ -2045,27 +1290,6 @@ NetworkSyncManager::SendChat(const RString& message, string tab, int type) if (curProtocol != nullptr) curProtocol->SendChat(message, tab, type); } -void -SMOProtocol::SendChat(const RString& message, string tab, int type) -{ - m_packet.ClearPacket(); - m_packet.Write1(NSCCM); - m_packet.WriteNT(message); - NetPlayerClient->SendPack(reinterpret_cast(&m_packet.Data), - m_packet.Position); -} - -void -SMOProtocol::ReportPlayerOptions() -{ - ModsGroup& opts = - GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions; - m_packet.ClearPacket(); - m_packet.Write1(NSCUPOpts); - m_packet.WriteNT(opts.GetCurrent().GetString()); - NetPlayerClient->SendPack(reinterpret_cast(&m_packet.Data), - m_packet.Position); -} int NetworkSyncManager::GetServerVersion() @@ -2131,63 +1355,6 @@ ETTProtocol::SelectUserSong(NetworkSyncManager* n, Song* song) Send(selectChart); } } -void -SMOProtocol::SelectUserSong(NetworkSyncManager* n, Song* song) -{ - m_packet.ClearPacket(); - m_packet.Write1(NSCRSG); - m_packet.Write1((uint8_t)n->m_iSelectMode); - m_packet.WriteNT(n->m_sMainTitle); - m_packet.WriteNT(n->m_sArtist); - m_packet.WriteNT(n->m_sSubTitle); - // Send songhash - if (serverVersion >= 129) { - m_packet.WriteNT(GAMESTATE->m_pCurSong->GetFileHash()); - } - NetPlayerClient->SendPack(reinterpret_cast(&m_packet.Data), - m_packet.Position); -} - -void -SMOProtocol::SendSMOnline() -{ - m_packet.Position = SMOnlinePacket.Position + 1; - memcpy((m_packet.Data + 1), SMOnlinePacket.Data, SMOnlinePacket.Position); - m_packet.Data[0] = NSCSMOnline; - NetPlayerClient->SendPack(reinterpret_cast(&m_packet.Data), - m_packet.Position); -} -void -SMOProtocol::CreateNewRoom(RString name, RString desc, RString password) -{ - SMOnlinePacket.ClearPacket(); - SMOnlinePacket.Write1((uint8_t)2); // Create room command - SMOnlinePacket.Write1(1); // Type game room - SMOnlinePacket.WriteNT(name); - SMOnlinePacket.WriteNT(desc); - if (!password.empty()) - SMOnlinePacket.WriteNT(password); - SendSMOnline(); -} -void -SMOProtocol::EnterRoom(RString name, RString password) -{ - SMOnlinePacket.ClearPacket(); - SMOnlinePacket.Write1(1); - SMOnlinePacket.Write1(1); // Type (enter a room) - SMOnlinePacket.WriteNT(name); - if (!password.empty()) - SMOnlinePacket.WriteNT(password); - SendSMOnline(); -} -void -SMOProtocol::RequestRoomInfo(RString name) -{ - SMOnlinePacket.ClearPacket(); - SMOnlinePacket.Write1((uint8_t)3); // Request Room Info - SMOnlinePacket.WriteNT(name); - SendSMOnline(); -} void NetworkSyncManager::EnterRoom(RString name, RString password) diff --git a/src/NetworkSyncManager.h b/src/NetworkSyncManager.h index 843c0a9fee..2c2d5f23a6 100644 --- a/src/NetworkSyncManager.h +++ b/src/NetworkSyncManager.h @@ -227,66 +227,6 @@ class NetProtocol virtual void OnEval(){}; virtual void OffEval(){}; }; -class SMOProtocol : public NetProtocol -{ // Built on raw tcp - EzSockets* NetPlayerClient; - EzSockets* BroadcastReception; - PacketFunctions m_packet; - int m_iSalt; - bool TryConnect(unsigned short port, RString address); - void SendSMOnline(); - - public: - PacketFunctions SMOnlinePacket; - SMOProtocol(); - ~SMOProtocol(); - bool Connect(NetworkSyncManager* n, - unsigned short port, - RString address) override; // Connect and say hello - void close() override; - void Update(NetworkSyncManager* n, float fDeltaTime) override; - void SelectUserSong(NetworkSyncManager* n, Song* song) override; - void CreateNewRoom(RString name, RString desc, RString password) override; - void EnterRoom(RString name, RString password) override; - void RequestRoomInfo(RString name) override; - void ReportPlayerOptions(); - void SendChat(const RString& message, string tab, int type) override; - void ReportNSSOnOff(int i) override; - void ReportScore(NetworkSyncManager* n, - int playerID, - int step, - int score, - int combo, - float offset, - int numNotes) override; - void ReportScore(NetworkSyncManager* n, - int playerID, - int step, - int score, - int combo, - float offset) override; - void ReportSongOver(NetworkSyncManager* n) override; - void ReportStyle(NetworkSyncManager* n) override; - void StartRequest(NetworkSyncManager* n, short position) override; - void ProcessInput(NetworkSyncManager* n); - void Login(RString user, RString pass) override; - void OnMusicSelect() override; - void OffMusicSelect() override; - void OnRoomSelect() override; - void OffRoomSelect() override; - void OnOptions() override; - void OffOptions() override; - void OnEval() override; - void OffEval() override; - - static void DealWithSMOnlinePack(PacketFunctions& SMOnlinePacket, - ScreenNetSelectMusic* s); - static void DealWithSMOnlinePack(PacketFunctions& SMOnlinePacket, - ScreenNetRoom* s); - static int DealWithSMOnlinePack(PacketFunctions& SMOnlinePacket, - ScreenSMOnlineLogin* s, - RString& response); -}; class ETTProtocol : public NetProtocol { // Websockets using uwebsockets sending json @@ -355,7 +295,6 @@ class NetworkSyncManager public: NetworkSyncManager(LoadingWindow* ld = NULL); ~NetworkSyncManager(); - SMOProtocol SMOP; ETTProtocol ETTP; NetProtocol* curProtocol{ nullptr }; // If "useSMserver" then send score to server diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index d47187fb24..2e1ed06ef3 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -301,7 +301,6 @@ ScreenGameplay::ScreenGameplay() { m_pSongBackground = NULL; m_pSongForeground = NULL; - m_bForceNoNetwork = !GAMESTATE->m_bInNetGameplay; m_delaying_ready_announce = false; GAMESTATE->m_AdjustTokensBySongCostForFinalStageCheck = false; #if !defined(WITHOUT_NETWORKING) @@ -575,7 +574,7 @@ ScreenGameplay::Init() // we need to wait, so that there is no Dead On Start issues. // if you wait too long at the second checkpoint, you will // appear dead when you begin your game. - if (!m_bForceNoNetwork) + if (GAMESTATE->m_bPlayingMulti) NSMAN->StartRequest(0); // Add individual life meter @@ -618,7 +617,7 @@ ScreenGameplay::Init() #if !defined(WITHOUT_NETWORKING) // Only used in SMLAN/SMOnline: - if (!m_bForceNoNetwork && NSMAN->useSMserver && + if (GAMESTATE->m_bPlayingMulti && NSMAN->useSMserver && GAMESTATE->GetCurrentStyle(PLAYER_INVALID)->m_StyleType != StyleType_OnePlayerTwoSides) { m_bShowScoreboard = PREFSMAN->m_bEnableScoreboard.Get(); @@ -892,7 +891,7 @@ ScreenGameplay::~ScreenGameplay() m_GameplayAssist.StopPlaying(); - if (!m_bForceNoNetwork) + if (GAMESTATE->m_bPlayingMulti) NSMAN->ReportSongOver(); #if !defined(WITHOUT_NETWORKING) DLMAN->UpdateDLSpeed(false); @@ -1338,7 +1337,7 @@ ScreenGameplay::BeginScreen() SOUND->PlayOnceFromAnnouncer("gameplay intro"); // crowd cheer // Get the transitions rolling - if (!m_bForceNoNetwork && NSMAN->useSMserver) { + if (GAMESTATE->m_bPlayingMulti && NSMAN->useSMserver) { // If we're using networking, we must not have any delay. If we do, // this can cause inconsistency on different computers and // different themes. @@ -1785,7 +1784,7 @@ ScreenGameplay::Update(float fDeltaTime) PlayTicks(); SendCrossedMessages(); - if (!m_bForceNoNetwork && NSMAN->useSMserver) { + if (GAMESTATE->m_bPlayingMulti && NSMAN->useSMserver) { FOREACH_EnabledPlayerNumberInfo(m_vPlayerInfo, pi) if (pi->m_pLifeMeter) NSMAN->m_playerLife = int(pi->m_pLifeMeter->GetLife() * 10000); diff --git a/src/ScreenGameplay.h b/src/ScreenGameplay.h index a479f1d8d1..fb3fb3361e 100644 --- a/src/ScreenGameplay.h +++ b/src/ScreenGameplay.h @@ -325,12 +325,6 @@ class ScreenGameplay : public ScreenWithMenuElements // announcer sound needs to be delayed. See HandleScreenMessage for more. // -Kyz bool m_delaying_ready_announce; - - // HACK: We have no idea whether we're actually using SMOnline or not. - // No, seriously, NOWHERE is it stored what room we're in or whether we're - // in a room at all. Apparently we just hope the server is keeping track. - // All we can do is guess based on what subclass we are. - bool m_bForceNoNetwork; }; vector::iterator diff --git a/src/ScreenNetRoom.cpp b/src/ScreenNetRoom.cpp index 883def53d3..93347fa1d5 100644 --- a/src/ScreenNetRoom.cpp +++ b/src/ScreenNetRoom.cpp @@ -11,7 +11,6 @@ #include "ThemeManager.h" #include "WheelItemBase.h" -AutoScreenMessage(SM_SMOnlinePack); AutoScreenMessage(SM_BackFromRoomName); AutoScreenMessage(SM_BackFromRoomDesc); AutoScreenMessage(SM_BackFromRoomPass); @@ -90,9 +89,6 @@ ScreenNetRoom::HandleScreenMessage(const ScreenMessage SM) if (!ScreenTextEntry::s_bCancelledLast) { NSMAN->EnterRoom(m_sLastPickedRoom, ScreenTextEntry::s_sLastAnswer); } - } else if (SM == SM_SMOnlinePack) { - SMOProtocol::DealWithSMOnlinePack( - static_cast(NSMAN->curProtocol)->SMOnlinePacket, this); } else if (SM == ETTP_RoomsChange) { UpdateRoomsList(); } else if (SM == SM_BackFromRoomName) { diff --git a/src/ScreenNetSelectBase.cpp b/src/ScreenNetSelectBase.cpp index 59f93a14fc..d9ff65e198 100644 --- a/src/ScreenNetSelectBase.cpp +++ b/src/ScreenNetSelectBase.cpp @@ -26,7 +26,6 @@ AutoScreenMessage(SM_AddToChat); AutoScreenMessage(SM_UsersUpdate); AutoScreenMessage(SM_FriendsUpdate); -AutoScreenMessage(SM_SMOnlinePack); REGISTER_SCREEN_CLASS(ScreenNetSelectBase); diff --git a/src/ScreenNetSelectMusic.cpp b/src/ScreenNetSelectMusic.cpp index 15a256ff67..2948deb1d1 100644 --- a/src/ScreenNetSelectMusic.cpp +++ b/src/ScreenNetSelectMusic.cpp @@ -35,7 +35,6 @@ AutoScreenMessage(SM_AddToChat); AutoScreenMessage(SM_FriendsUpdate); AutoScreenMessage(SM_NoSongs); AutoScreenMessage(SM_ChangeSong); -AutoScreenMessage(SM_SMOnlinePack); AutoScreenMessage(SM_SetWheelSong); AutoScreenMessage(SM_RefreshWheelLocation); AutoScreenMessage(SM_SongChanged); @@ -55,7 +54,7 @@ void ScreenNetSelectMusic::Init() { ScreenSelectMusic::Init(); - + GAMESTATE->m_bPlayingMulti = true; SAMPLE_MUSIC_PREVIEW_MODE.Load(m_sName, "SampleMusicPreviewMode"); MUSIC_WHEEL_TYPE.Load(m_sName, "MusicWheelType"); PLAYER_OPTIONS_SCREEN.Load(m_sName, "PlayerOptionsScreen"); @@ -433,9 +432,6 @@ ScreenNetSelectMusic::HandleScreenMessage(const ScreenMessage SM) m_MusicWheel.Move(1); m_MusicWheel.Select(); } - } else if (SM == SM_SMOnlinePack) { - SMOProtocol::DealWithSMOnlinePack( - static_cast(NSMAN->curProtocol)->SMOnlinePacket, this); } else if (SM == SM_ConfirmDeleteSong) { if (ScreenPrompt::s_LastAnswer == ANSWER_YES) { OnConfirmSongDeletion(); diff --git a/src/ScreenSMOnlineLogin.cpp b/src/ScreenSMOnlineLogin.cpp index f0041a1c8c..489a620407 100644 --- a/src/ScreenSMOnlineLogin.cpp +++ b/src/ScreenSMOnlineLogin.cpp @@ -17,7 +17,6 @@ REGISTER_SCREEN_CLASS(ScreenSMOnlineLogin); -AutoScreenMessage(SM_SMOnlinePack); AutoScreenMessage(SM_PasswordDone); AutoScreenMessage(SM_UsernameDone); AutoScreenMessage(SM_NoProfilesDefined); @@ -165,40 +164,6 @@ ScreenSMOnlineLogin::HandleScreenMessage(const ScreenMessage SM) NULL); } } - } else if (SM == SM_SMOnlinePack) { - LOG->Trace("[ScreenSMOnlineLogin::HandleScreenMessage] SMOnlinePack"); - if (!GAMESTATE->IsPlayerEnabled(static_cast(m_iPlayer))) { - LuaHelpers::ReportScriptErrorFmt("Invalid player number: %i", - m_iPlayer); - return; - } - // This can cause problems in certain situations -aj - sLoginQuestion = - YOU_ARE_LOGGING_ON_AS.GetValue() + "\n" + - GAMESTATE->GetPlayerDisplayName((PlayerNumber)m_iPlayer) + "\n" + - ENTER_YOUR_PASSWORD.GetValue(); - RString Response; - switch (SMOProtocol::DealWithSMOnlinePack( - static_cast(NSMAN->curProtocol)->SMOnlinePacket, - this, - Response)) { - case 0: - SCREENMAN->SetNewScreen( - THEME->GetMetric(m_sName, "NextScreen")); - m_iPlayer = 0; - break; - case 1: - ScreenTextEntry::Password( - SM_PasswordDone, sLoginQuestion, NULL); - break; - case 2: - m_iPlayer = 0; - break; - case 3: - ScreenTextEntry::Password( - SM_PasswordDone, Response + "\n\n" + sLoginQuestion, NULL); - break; - } } else if (SM == SM_GoToNextScreen) { LOG->Trace("[ScreenSMOnlineLogin::HandleScreenMessage] GoToNextScreen"); vector v; diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index 7022bef692..61117015cd 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -80,6 +80,7 @@ REGISTER_SCREEN_CLASS(ScreenSelectMusic); void ScreenSelectMusic::Init() { + GAMESTATE->m_bPlayingMulti = false; g_ScreenStartedLoadingAt.Touch(); if (PREFSMAN->m_sTestInitialScreen.Get() == m_sName) { GAMESTATE->m_PlayMode.Set(PLAY_MODE_REGULAR); @@ -1711,7 +1712,7 @@ class LunaScreenSelectMusic : public Luna auto* td = GAMESTATE->m_pCurSteps[PLAYER_1]->GetTimingData(); // vector ihatemylife; auto nd = GAMESTATE->m_pCurSteps[PLAYER_1]->GetNoteData(); - auto nerv = nd.BuildAndGetNerv(); + auto nerv = nd.BuildAndGetNerv(); /* functionally dead code, may be removed -poco if (!hs->GetChordCohesion()) { for (auto r : nerv) @@ -1720,32 +1721,33 @@ class LunaScreenSelectMusic : public Luna } else { for (auto r : nerv) ihatemylife.emplace_back(r); - } + } */ - auto sdifs = td->BuildAndGetEtaner(nerv); - vector noterows; - for (auto t : timestamps) { - auto timestamptobeat = - td->GetBeatFromElapsedTime(t * hs->GetMusicRate()); - auto somenumberscaledbyoffsets = - sdifs[0] - (timestamps[0] * hs->GetMusicRate()); - timestamptobeat += somenumberscaledbyoffsets; - auto noterowfrombeat = BeatToNoteRow(timestamptobeat); - noterows.emplace_back(noterowfrombeat); - } - int noterowoffsetter = nerv[0] - noterows[0]; - for (auto& noterowwithoffset : noterows) + auto sdifs = td->BuildAndGetEtaner(nerv); + vector noterows; + for (auto t : timestamps) { + auto timestamptobeat = + td->GetBeatFromElapsedTime(t * hs->GetMusicRate()); + auto somenumberscaledbyoffsets = + sdifs[0] - (timestamps[0] * hs->GetMusicRate()); + timestamptobeat += somenumberscaledbyoffsets; + auto noterowfrombeat = BeatToNoteRow(timestamptobeat); + noterows.emplace_back(noterowfrombeat); + } + int noterowoffsetter = nerv[0] - noterows[0]; + for (auto& noterowwithoffset : noterows) noterowwithoffset += noterowoffsetter; GAMESTATE->SetProcessedTimingData(nullptr); - //hs->SetNoteRowVector(ihatemylife); - hs->SetNoteRowVector(noterows); - - // Since we keep misses on EO as 180ms, we need to convert them back. - auto offsets = hs->GetCopyOfOffsetVector(); - for (auto& offset : offsets) { - if (fabs(offset) >= .18f) - offset = -1.1f; // This is a miss to the replay reader. - } + // hs->SetNoteRowVector(ihatemylife); + hs->SetNoteRowVector(noterows); + + // Since we keep misses on EO as 180ms, we need to convert them + // back. + auto offsets = hs->GetCopyOfOffsetVector(); + for (auto& offset : offsets) { + if (fabs(offset) >= .18f) + offset = -1.1f; // This is a miss to the replay reader. + } hs->SetOffsetVector(offsets); }