From 07af775afa919293b24091446f54b5c15edde569 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 22 Sep 2021 13:40:46 -0400 Subject: [PATCH 1/6] SFMLHelper: Add stream insertion overload helpers for enum types Will be used in future changes to eliminate the need to cast when inserting various message IDs --- Source/Core/Common/SFMLHelper.h | 29 ++++++++++++++++++++++++----- Source/Core/Core/NetPlayProto.h | 2 +- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Source/Core/Common/SFMLHelper.h b/Source/Core/Common/SFMLHelper.h index efc8f91f84..cd8bb2303b 100644 --- a/Source/Core/Common/SFMLHelper.h +++ b/Source/Core/Common/SFMLHelper.h @@ -3,18 +3,37 @@ #pragma once +#include + +#include + #include "Common/CommonTypes.h" #include "Common/Swap.h" -namespace sf -{ -class Packet; -} - sf::Packet& operator>>(sf::Packet& packet, Common::BigEndianValue& data); sf::Packet& operator>>(sf::Packet& packet, Common::BigEndianValue& data); sf::Packet& operator>>(sf::Packet& packet, Common::BigEndianValue& data); +template >* = nullptr> +sf::Packet& operator<<(sf::Packet& packet, Enum e) +{ + using Underlying = std::underlying_type_t; + packet << static_cast(e); + return packet; +} + +template >* = nullptr> +sf::Packet& operator>>(sf::Packet& packet, Enum& e) +{ + using Underlying = std::underlying_type_t; + + Underlying value{}; + packet >> value; + + e = static_cast(value); + return packet; +} + namespace Common { u64 PacketReadU64(sf::Packet& packet); diff --git a/Source/Core/Core/NetPlayProto.h b/Source/Core/Core/NetPlayProto.h index 4b7da05d80..657d33b19b 100644 --- a/Source/Core/Core/NetPlayProto.h +++ b/Source/Core/Core/NetPlayProto.h @@ -121,7 +121,7 @@ struct NetTraversalConfig }; // messages -enum +enum MessageID : u8 { NP_MSG_PLAYER_JOIN = 0x10, NP_MSG_PLAYER_LEAVE = 0x11, From af4aaf4609e19949ed998868cdd1c36f99537257 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 22 Sep 2021 14:17:42 -0400 Subject: [PATCH 2/6] NetPlayProto: Turn MessageID enum into an enum class Now we can leverage our helper to insert enum values without the need to cast. --- Source/Core/Core/NetPlayClient.cpp | 122 +++++++++++------------ Source/Core/Core/NetPlayProto.h | 91 +++++++++-------- Source/Core/Core/NetPlayServer.cpp | 155 ++++++++++++++--------------- 3 files changed, 183 insertions(+), 185 deletions(-) diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index 570c2e7c2e..42b5d903a9 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -313,143 +313,143 @@ static void ReceiveSyncIdentifier(sf::Packet& spac, SyncIdentifier& sync_identif // called from ---NETPLAY--- thread void NetPlayClient::OnData(sf::Packet& packet) { - MessageId mid; + MessageID mid; packet >> mid; INFO_LOG_FMT(NETPLAY, "Got server message: {:x}", mid); switch (mid) { - case NP_MSG_PLAYER_JOIN: + case MessageID::PlayerJoin: OnPlayerJoin(packet); break; - case NP_MSG_PLAYER_LEAVE: + case MessageID::PlayerLeave: OnPlayerLeave(packet); break; - case NP_MSG_CHAT_MESSAGE: + case MessageID::ChatMessage: OnChatMessage(packet); break; - case NP_MSG_CHUNKED_DATA_START: + case MessageID::ChunkedDataStart: OnChunkedDataStart(packet); break; - case NP_MSG_CHUNKED_DATA_END: + case MessageID::ChunkedDataEnd: OnChunkedDataEnd(packet); break; - case NP_MSG_CHUNKED_DATA_PAYLOAD: + case MessageID::ChunkedDataPayload: OnChunkedDataPayload(packet); break; - case NP_MSG_CHUNKED_DATA_ABORT: + case MessageID::ChunkedDataAbort: OnChunkedDataAbort(packet); break; - case NP_MSG_PAD_MAPPING: + case MessageID::PadMapping: OnPadMapping(packet); break; - case NP_MSG_GBA_CONFIG: + case MessageID::GBAConfig: OnGBAConfig(packet); break; - case NP_MSG_WIIMOTE_MAPPING: + case MessageID::WiimoteMapping: OnWiimoteMapping(packet); break; - case NP_MSG_PAD_DATA: + case MessageID::PadData: OnPadData(packet); break; - case NP_MSG_PAD_HOST_DATA: + case MessageID::PadHostData: OnPadHostData(packet); break; - case NP_MSG_WIIMOTE_DATA: + case MessageID::WiimoteData: OnWiimoteData(packet); break; - case NP_MSG_PAD_BUFFER: + case MessageID::PadBuffer: OnPadBuffer(packet); break; - case NP_MSG_HOST_INPUT_AUTHORITY: + case MessageID::HostInputAuthority: OnHostInputAuthority(packet); break; - case NP_MSG_GOLF_SWITCH: + case MessageID::GolfSwitch: OnGolfSwitch(packet); break; - case NP_MSG_GOLF_PREPARE: + case MessageID::GolfPrepare: OnGolfPrepare(packet); break; - case NP_MSG_CHANGE_GAME: + case MessageID::ChangeGame: OnChangeGame(packet); break; - case NP_MSG_GAME_STATUS: + case MessageID::GameStatus: OnGameStatus(packet); break; - case NP_MSG_START_GAME: + case MessageID::StartGame: OnStartGame(packet); break; - case NP_MSG_STOP_GAME: - case NP_MSG_DISABLE_GAME: + case MessageID::StopGame: + case MessageID::DisableGame: OnStopGame(packet); break; - case NP_MSG_POWER_BUTTON: + case MessageID::PowerButton: OnPowerButton(); break; - case NP_MSG_PING: + case MessageID::Ping: OnPing(packet); break; - case NP_MSG_PLAYER_PING_DATA: + case MessageID::PlayerPingData: OnPlayerPingData(packet); break; - case NP_MSG_DESYNC_DETECTED: + case MessageID::DesyncDetected: OnDesyncDetected(packet); break; - case NP_MSG_SYNC_GC_SRAM: + case MessageID::SyncGCSRAM: OnSyncGCSRAM(packet); break; - case NP_MSG_SYNC_SAVE_DATA: + case MessageID::SyncSaveData: OnSyncSaveData(packet); break; - case NP_MSG_SYNC_CODES: + case MessageID::SyncCodes: OnSyncCodes(packet); break; - case NP_MSG_COMPUTE_MD5: + case MessageID::ComputeMD5: OnComputeMD5(packet); break; - case NP_MSG_MD5_PROGRESS: + case MessageID::MD5Progress: OnMD5Progress(packet); break; - case NP_MSG_MD5_RESULT: + case MessageID::MD5Result: OnMD5Result(packet); break; - case NP_MSG_MD5_ERROR: + case MessageID::MD5Error: OnMD5Error(packet); break; - case NP_MSG_MD5_ABORT: + case MessageID::MD5Abort: OnMD5Abort(); break; @@ -547,7 +547,7 @@ void NetPlayClient::OnChunkedDataEnd(sf::Packet& packet) m_dialog->HideChunkedProgressDialog(); sf::Packet complete_packet; - complete_packet << static_cast(NP_MSG_CHUNKED_DATA_COMPLETE); + complete_packet << MessageID::ChunkedDataComplete; complete_packet << cid; Send(complete_packet, CHUNKED_DATA_CHANNEL); } @@ -572,7 +572,7 @@ void NetPlayClient::OnChunkedDataPayload(sf::Packet& packet) m_dialog->SetChunkedProgress(m_local_player->pid, data_packet.getDataSize()); sf::Packet progress_packet; - progress_packet << static_cast(NP_MSG_CHUNKED_DATA_PROGRESS); + progress_packet << MessageID::ChunkedDataProgress; progress_packet << cid; progress_packet << sf::Uint64{data_packet.getDataSize()}; Send(progress_packet, CHUNKED_DATA_CHANNEL); @@ -731,13 +731,13 @@ void NetPlayClient::OnGolfSwitch(sf::Packet& packet) if (m_local_player->pid == previous_golfer) { sf::Packet spac; - spac << static_cast(NP_MSG_GOLF_RELEASE); + spac << MessageID::GolfRelease; Send(spac); } else if (m_local_player->pid == pid) { sf::Packet spac; - spac << static_cast(NP_MSG_GOLF_ACQUIRE); + spac << MessageID::GolfAcquire; Send(spac); // Pads are already calibrated so we can just ignore this @@ -771,7 +771,7 @@ void NetPlayClient::OnChangeGame(sf::Packet& packet) SendGameStatus(); sf::Packet client_capabilities_packet; - client_capabilities_packet << static_cast(NP_MSG_CLIENT_CAPABILITIES); + client_capabilities_packet << MessageID::ClientCapabilities; client_capabilities_packet << ExpansionInterface::CEXIIPL::HasIPLDump(); client_capabilities_packet << Config::Get(Config::SESSION_USE_FMA); Send(client_capabilities_packet); @@ -924,7 +924,7 @@ void NetPlayClient::OnPing(sf::Packet& packet) packet >> ping_key; sf::Packet response_packet; - response_packet << static_cast(NP_MSG_PONG); + response_packet << MessageID::Pong; response_packet << ping_key; Send(response_packet); @@ -1643,7 +1643,7 @@ const NetSettings& NetPlayClient::GetNetSettings() const void NetPlayClient::SendChatMessage(const std::string& msg) { sf::Packet packet; - packet << static_cast(NP_MSG_CHAT_MESSAGE); + packet << MessageID::ChatMessage; packet << msg; SendAsync(std::move(packet)); @@ -1666,7 +1666,7 @@ void NetPlayClient::AddPadStateToPacket(const int in_game_pad, const GCPadStatus void NetPlayClient::SendWiimoteState(const int in_game_pad, const WiimoteInput& nw) { sf::Packet packet; - packet << static_cast(NP_MSG_WIIMOTE_DATA); + packet << MessageID::WiimoteData; packet << static_cast(in_game_pad); packet << static_cast(nw.report_id); packet << static_cast(nw.data.size()); @@ -1678,7 +1678,7 @@ void NetPlayClient::SendWiimoteState(const int in_game_pad, const WiimoteInput& void NetPlayClient::SendStartGamePacket() { sf::Packet packet; - packet << static_cast(NP_MSG_START_GAME); + packet << MessageID::StartGame; packet << m_current_game; SendAsync(std::move(packet)); @@ -1688,7 +1688,7 @@ void NetPlayClient::SendStartGamePacket() void NetPlayClient::SendStopGamePacket() { sf::Packet packet; - packet << static_cast(NP_MSG_STOP_GAME); + packet << MessageID::StopGame; SendAsync(std::move(packet)); } @@ -1760,7 +1760,7 @@ void NetPlayClient::SyncSaveDataResponse(const bool success) if (++m_sync_save_data_success_count >= m_sync_save_data_count) { sf::Packet response_packet; - response_packet << static_cast(NP_MSG_SYNC_SAVE_DATA); + response_packet << MessageID::SyncSaveData; response_packet << static_cast(SYNC_SAVE_DATA_SUCCESS); Send(response_packet); @@ -1769,7 +1769,7 @@ void NetPlayClient::SyncSaveDataResponse(const bool success) else { sf::Packet response_packet; - response_packet << static_cast(NP_MSG_SYNC_SAVE_DATA); + response_packet << MessageID::SyncSaveData; response_packet << static_cast(SYNC_SAVE_DATA_FAILURE); Send(response_packet); @@ -1784,7 +1784,7 @@ void NetPlayClient::SyncCodeResponse(const bool success) m_dialog->AppendChat(Common::GetStringT("Error processing codes.")); sf::Packet response_packet; - response_packet << static_cast(NP_MSG_SYNC_CODES); + response_packet << MessageID::SyncCodes; response_packet << static_cast(SYNC_CODES_FAILURE); Send(response_packet); @@ -1797,7 +1797,7 @@ void NetPlayClient::SyncCodeResponse(const bool success) m_dialog->AppendChat(Common::GetStringT("Codes received!")); sf::Packet response_packet; - response_packet << static_cast(NP_MSG_SYNC_CODES); + response_packet << MessageID::SyncCodes; response_packet << static_cast(SYNC_CODES_SUCCESS); Send(response_packet); @@ -1960,7 +1960,7 @@ bool NetPlayClient::GetNetPads(const int pad_nb, const bool batching, GCPadStatu { // Tell the server we've acknowledged the message sf::Packet spac; - spac << static_cast(NP_MSG_GOLF_PREPARE); + spac << MessageID::GolfPrepare; Send(spac); m_wait_on_input_received = false; @@ -1972,7 +1972,7 @@ bool NetPlayClient::GetNetPads(const int pad_nb, const bool batching, GCPadStatu if (IsFirstInGamePad(pad_nb) && batching) { sf::Packet packet; - packet << static_cast(NP_MSG_PAD_DATA); + packet << MessageID::PadData; bool send_packet = false; const int num_local_pads = NumLocalPads(); @@ -1990,11 +1990,11 @@ bool NetPlayClient::GetNetPads(const int pad_nb, const bool batching, GCPadStatu if (!batching) { - int local_pad = InGamePadToLocalPad(pad_nb); + const int local_pad = InGamePadToLocalPad(pad_nb); if (local_pad < 4) { sf::Packet packet; - packet << static_cast(NP_MSG_PAD_DATA); + packet << MessageID::PadData; if (PollLocalPad(local_pad, packet)) SendAsync(std::move(packet)); } @@ -2208,7 +2208,7 @@ void NetPlayClient::SendPadHostPoll(const PadIndex pad_num) return; sf::Packet packet; - packet << static_cast(NP_MSG_PAD_HOST_DATA); + packet << MessageID::PadHostData; if (pad_num < 0) { @@ -2309,7 +2309,7 @@ void NetPlayClient::RequestStopGame() void NetPlayClient::SendPowerButtonEvent() { sf::Packet packet; - packet << static_cast(NP_MSG_POWER_BUTTON); + packet << MessageID::PowerButton; SendAsync(std::move(packet)); } @@ -2319,7 +2319,7 @@ void NetPlayClient::RequestGolfControl(const PlayerId pid) return; sf::Packet packet; - packet << static_cast(NP_MSG_GOLF_REQUEST); + packet << MessageID::GolfRequest; packet << pid; SendAsync(std::move(packet)); } @@ -2410,7 +2410,7 @@ bool NetPlayClient::IsLocalPlayer(const PlayerId pid) const void NetPlayClient::SendGameStatus() { sf::Packet packet; - packet << static_cast(NP_MSG_GAME_STATUS); + packet << MessageID::GameStatus; SyncIdentifierComparison result; m_dialog->FindGameFile(m_selected_game, &result); @@ -2436,7 +2436,7 @@ void NetPlayClient::SendTimeBase() const sf::Uint64 timebase = SystemTimers::GetFakeTimeBase(); sf::Packet packet; - packet << static_cast(NP_MSG_TIMEBASE); + packet << MessageID::TimeBase; packet << timebase; packet << netplay_client->m_timebase_frame; @@ -2472,7 +2472,7 @@ void NetPlayClient::ComputeMD5(const SyncIdentifier& sync_identifier) if (file.empty() || !File::Exists(file)) { sf::Packet packet; - packet << static_cast(NP_MSG_MD5_ERROR); + packet << MessageID::MD5Error; packet << "file not found"; Send(packet); return; @@ -2483,7 +2483,7 @@ void NetPlayClient::ComputeMD5(const SyncIdentifier& sync_identifier) m_MD5_thread = std::thread([this, file]() { std::string sum = MD5::MD5Sum(file, [&](int progress) { sf::Packet packet; - packet << static_cast(NP_MSG_MD5_PROGRESS); + packet << MessageID::MD5Progress; packet << progress; SendAsync(std::move(packet)); @@ -2491,7 +2491,7 @@ void NetPlayClient::ComputeMD5(const SyncIdentifier& sync_identifier) }); sf::Packet packet; - packet << static_cast(NP_MSG_MD5_RESULT); + packet << MessageID::MD5Result; packet << sum; SendAsync(std::move(packet)); }); diff --git a/Source/Core/Core/NetPlayProto.h b/Source/Core/Core/NetPlayProto.h index 657d33b19b..1e63781322 100644 --- a/Source/Core/Core/NetPlayProto.h +++ b/Source/Core/Core/NetPlayProto.h @@ -120,64 +120,63 @@ struct NetTraversalConfig u16 traversal_port = 0; }; -// messages -enum MessageID : u8 +enum class MessageID : u8 { - NP_MSG_PLAYER_JOIN = 0x10, - NP_MSG_PLAYER_LEAVE = 0x11, + PlayerJoin = 0x10, + PlayerLeave = 0x11, - NP_MSG_CHAT_MESSAGE = 0x30, + ChatMessage = 0x30, - NP_MSG_CHUNKED_DATA_START = 0x40, - NP_MSG_CHUNKED_DATA_END = 0x41, - NP_MSG_CHUNKED_DATA_PAYLOAD = 0x42, - NP_MSG_CHUNKED_DATA_PROGRESS = 0x43, - NP_MSG_CHUNKED_DATA_COMPLETE = 0x44, - NP_MSG_CHUNKED_DATA_ABORT = 0x45, + ChunkedDataStart = 0x40, + ChunkedDataEnd = 0x41, + ChunkedDataPayload = 0x42, + ChunkedDataProgress = 0x43, + ChunkedDataComplete = 0x44, + ChunkedDataAbort = 0x45, - NP_MSG_PAD_DATA = 0x60, - NP_MSG_PAD_MAPPING = 0x61, - NP_MSG_PAD_BUFFER = 0x62, - NP_MSG_PAD_HOST_DATA = 0x63, - NP_MSG_GBA_CONFIG = 0x64, + PadData = 0x60, + PadMapping = 0x61, + PadBuffer = 0x62, + PadHostData = 0x63, + GBAConfig = 0x64, - NP_MSG_WIIMOTE_DATA = 0x70, - NP_MSG_WIIMOTE_MAPPING = 0x71, + WiimoteData = 0x70, + WiimoteMapping = 0x71, - NP_MSG_GOLF_REQUEST = 0x90, - NP_MSG_GOLF_SWITCH = 0x91, - NP_MSG_GOLF_ACQUIRE = 0x92, - NP_MSG_GOLF_RELEASE = 0x93, - NP_MSG_GOLF_PREPARE = 0x94, + GolfRequest = 0x90, + GolfSwitch = 0x91, + GolfAcquire = 0x92, + GolfRelease = 0x93, + GolfPrepare = 0x94, - NP_MSG_START_GAME = 0xA0, - NP_MSG_CHANGE_GAME = 0xA1, - NP_MSG_STOP_GAME = 0xA2, - NP_MSG_DISABLE_GAME = 0xA3, - NP_MSG_GAME_STATUS = 0xA4, - NP_MSG_CLIENT_CAPABILITIES = 0xA5, - NP_MSG_HOST_INPUT_AUTHORITY = 0xA6, - NP_MSG_POWER_BUTTON = 0xA7, + StartGame = 0xA0, + ChangeGame = 0xA1, + StopGame = 0xA2, + DisableGame = 0xA3, + GameStatus = 0xA4, + ClientCapabilities = 0xA5, + HostInputAuthority = 0xA6, + PowerButton = 0xA7, - NP_MSG_TIMEBASE = 0xB0, - NP_MSG_DESYNC_DETECTED = 0xB1, + TimeBase = 0xB0, + DesyncDetected = 0xB1, - NP_MSG_COMPUTE_MD5 = 0xC0, - NP_MSG_MD5_PROGRESS = 0xC1, - NP_MSG_MD5_RESULT = 0xC2, - NP_MSG_MD5_ABORT = 0xC3, - NP_MSG_MD5_ERROR = 0xC4, + ComputeMD5 = 0xC0, + MD5Progress = 0xC1, + MD5Result = 0xC2, + MD5Abort = 0xC3, + MD5Error = 0xC4, - NP_MSG_READY = 0xD0, - NP_MSG_NOT_READY = 0xD1, + Ready = 0xD0, + NotReady = 0xD1, - NP_MSG_PING = 0xE0, - NP_MSG_PONG = 0xE1, - NP_MSG_PLAYER_PING_DATA = 0xE2, + Ping = 0xE0, + Pong = 0xE1, + PlayerPingData = 0xE2, - NP_MSG_SYNC_GC_SRAM = 0xF0, - NP_MSG_SYNC_SAVE_DATA = 0xF1, - NP_MSG_SYNC_CODES = 0xF2, + SyncGCSRAM = 0xF0, + SyncSaveData = 0xF1, + SyncCodes = 0xF2, }; enum diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index 87ad99c454..bb69332521 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -242,7 +242,7 @@ void NetPlayServer::ThreadFunc() m_ping_key = Common::Timer::GetTimeMs(); sf::Packet spac; - spac << (MessageId)NP_MSG_PING; + spac << MessageID::Ping; spac << m_ping_key; m_ping_timer.Start(); @@ -427,7 +427,7 @@ unsigned int NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) // send join message to already connected clients sf::Packet spac; - spac << static_cast(NP_MSG_PLAYER_JOIN); + spac << MessageID::PlayerJoin; spac << player.pid << player.name << player.revision; SendToClients(spac); @@ -441,7 +441,7 @@ unsigned int NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) if (!m_selected_game_name.empty()) { spac.clear(); - spac << static_cast(NP_MSG_CHANGE_GAME); + spac << MessageID::ChangeGame; SendSyncIdentifier(spac, m_selected_game_identifier); spac << m_selected_game_name; Send(player.socket, spac); @@ -451,14 +451,14 @@ unsigned int NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) { // send the pad buffer value spac.clear(); - spac << static_cast(NP_MSG_PAD_BUFFER); - spac << static_cast(m_target_buffer_size); + spac << MessageID::PadBuffer; + spac << m_target_buffer_size; Send(player.socket, spac); } // send input authority state spac.clear(); - spac << static_cast(NP_MSG_HOST_INPUT_AUTHORITY); + spac << MessageID::HostInputAuthority; spac << m_host_input_authority; Send(player.socket, spac); @@ -466,12 +466,12 @@ unsigned int NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) for (const auto& p : m_players) { spac.clear(); - spac << static_cast(NP_MSG_PLAYER_JOIN); + spac << MessageID::PlayerJoin; spac << p.second.pid << p.second.name << p.second.revision; Send(player.socket, spac); spac.clear(); - spac << static_cast(NP_MSG_GAME_STATUS); + spac << MessageID::GameStatus; spac << p.second.pid << static_cast(p.second.game_status); Send(player.socket, spac); } @@ -506,7 +506,7 @@ unsigned int NetPlayServer::OnDisconnect(const Client& player) m_is_running = false; sf::Packet spac; - spac << (MessageId)NP_MSG_DISABLE_GAME; + spac << MessageID::DisableGame; // this thread doesn't need players lock SendToClients(spac); break; @@ -522,7 +522,7 @@ unsigned int NetPlayServer::OnDisconnect(const Client& player) } sf::Packet spac; - spac << (MessageId)NP_MSG_PLAYER_LEAVE; + spac << MessageID::PlayerLeave; spac << pid; enet_peer_disconnect(player.socket, 0); @@ -612,7 +612,7 @@ void NetPlayServer::SetWiimoteMapping(const PadMappingArray& mappings) void NetPlayServer::UpdatePadMapping() { sf::Packet spac; - spac << (MessageId)NP_MSG_PAD_MAPPING; + spac << MessageID::PadMapping; for (PlayerId mapping : m_pad_map) { spac << mapping; @@ -624,7 +624,7 @@ void NetPlayServer::UpdatePadMapping() void NetPlayServer::UpdateGBAConfig() { sf::Packet spac; - spac << static_cast(NP_MSG_GBA_CONFIG); + spac << MessageID::GBAConfig; for (const auto& config : m_gba_config) { spac << config.enabled << config.has_rom << config.title; @@ -638,7 +638,7 @@ void NetPlayServer::UpdateGBAConfig() void NetPlayServer::UpdateWiimoteMapping() { sf::Packet spac; - spac << (MessageId)NP_MSG_WIIMOTE_MAPPING; + spac << MessageID::WiimoteMapping; for (PlayerId mapping : m_wiimote_map) { spac << mapping; @@ -658,8 +658,8 @@ void NetPlayServer::AdjustPadBufferSize(unsigned int size) { // tell clients to change buffer size sf::Packet spac; - spac << static_cast(NP_MSG_PAD_BUFFER); - spac << static_cast(m_target_buffer_size); + spac << MessageID::PadBuffer; + spac << m_target_buffer_size; SendAsyncToClients(std::move(spac)); } @@ -673,7 +673,7 @@ void NetPlayServer::SetHostInputAuthority(const bool enable) // tell clients about the new value sf::Packet spac; - spac << static_cast(NP_MSG_HOST_INPUT_AUTHORITY); + spac << MessageID::HostInputAuthority; spac << m_host_input_authority; SendAsyncToClients(std::move(spac)); @@ -727,7 +727,7 @@ void NetPlayServer::SendChunkedToClients(sf::Packet&& packet, const PlayerId ski // called from ---NETPLAY--- thread unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) { - MessageId mid; + MessageID mid; packet >> mid; INFO_LOG_FMT(NETPLAY, "Got client message: {:x}", mid); @@ -737,14 +737,14 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) switch (mid) { - case NP_MSG_CHAT_MESSAGE: + case MessageID::ChatMessage: { std::string msg; packet >> msg; // send msg to other clients sf::Packet spac; - spac << (MessageId)NP_MSG_CHAT_MESSAGE; + spac << MessageID::ChatMessage; spac << player.pid; spac << msg; @@ -752,7 +752,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_CHUNKED_DATA_PROGRESS: + case MessageID::ChunkedDataProgress: { u32 cid; packet >> cid; @@ -762,7 +762,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_CHUNKED_DATA_COMPLETE: + case MessageID::ChunkedDataComplete: { u32 cid; packet >> cid; @@ -775,14 +775,14 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_PAD_DATA: + case MessageID::PadData: { // if this is pad data from the last game still being received, ignore it if (player.current_game != m_current_game) break; sf::Packet spac; - spac << static_cast(m_host_input_authority ? NP_MSG_PAD_HOST_DATA : NP_MSG_PAD_DATA); + spac << (m_host_input_authority ? MessageID::PadHostData : MessageID::PadData); while (!packet.endOfPacket()) { @@ -822,14 +822,14 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_PAD_HOST_DATA: + case MessageID::PadHostData: { // Kick player if they're not the golfer. if (m_current_golfer != 0 && player.pid != m_current_golfer) return 1; sf::Packet spac; - spac << static_cast(NP_MSG_PAD_DATA); + spac << MessageID::PadData; while (!packet.endOfPacket()) { @@ -853,7 +853,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_WIIMOTE_DATA: + case MessageID::WiimoteData: { // if this is Wiimote data from the last game still being received, ignore it if (player.current_game != m_current_game) @@ -875,7 +875,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) // relay to clients sf::Packet spac; - spac << (MessageId)NP_MSG_WIIMOTE_DATA; + spac << MessageID::WiimoteData; spac << map; spac << size; for (const u8& byte : data) @@ -885,7 +885,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_GOLF_REQUEST: + case MessageID::GolfRequest: { PlayerId pid; packet >> pid; @@ -900,25 +900,25 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) m_pending_golfer = pid; sf::Packet spac; - spac << static_cast(NP_MSG_GOLF_PREPARE); + spac << MessageID::GolfPrepare; Send(m_players[pid].socket, spac); } } break; - case NP_MSG_GOLF_RELEASE: + case MessageID::GolfRelease: { if (m_pending_golfer == 0) break; sf::Packet spac; - spac << static_cast(NP_MSG_GOLF_SWITCH); - spac << static_cast(m_pending_golfer); + spac << MessageID::GolfSwitch; + spac << m_pending_golfer; SendToClients(spac); } break; - case NP_MSG_GOLF_ACQUIRE: + case MessageID::GolfAcquire: { if (m_pending_golfer == 0) break; @@ -928,7 +928,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_GOLF_PREPARE: + case MessageID::GolfPrepare: { if (m_pending_golfer == 0) break; @@ -936,13 +936,13 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) m_current_golfer = 0; sf::Packet spac; - spac << static_cast(NP_MSG_GOLF_SWITCH); - spac << static_cast(0); + spac << MessageID::GolfSwitch; + spac << PlayerId{0}; SendToClients(spac); } break; - case NP_MSG_PONG: + case MessageID::Pong: { const u32 ping = (u32)m_ping_timer.GetTimeElapsed(); u32 ping_key = 0; @@ -954,7 +954,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } sf::Packet spac; - spac << (MessageId)NP_MSG_PLAYER_PING_DATA; + spac << MessageID::PlayerPingData; spac << player.pid; spac << player.ping; @@ -962,13 +962,13 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_START_GAME: + case MessageID::StartGame: { packet >> player.current_game; } break; - case NP_MSG_STOP_GAME: + case MessageID::StopGame: { if (!m_is_running) break; @@ -977,14 +977,14 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) // tell clients to stop game sf::Packet spac; - spac << (MessageId)NP_MSG_STOP_GAME; + spac << MessageID::StopGame; std::lock_guard lkp(m_crit.players); SendToClients(spac); } break; - case NP_MSG_GAME_STATUS: + case MessageID::GameStatus: { u32 status; packet >> status; @@ -993,7 +993,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) // send msg to other clients sf::Packet spac; - spac << static_cast(NP_MSG_GAME_STATUS); + spac << MessageID::GameStatus; spac << player.pid; spac << status; @@ -1001,22 +1001,22 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_CLIENT_CAPABILITIES: + case MessageID::ClientCapabilities: { packet >> m_players[player.pid].has_ipl_dump; packet >> m_players[player.pid].has_hardware_fma; } break; - case NP_MSG_POWER_BUTTON: + case MessageID::PowerButton: { sf::Packet spac; - spac << static_cast(NP_MSG_POWER_BUTTON); + spac << MessageID::PowerButton; SendToClients(spac, player.pid); } break; - case NP_MSG_TIMEBASE: + case MessageID::TimeBase: { u64 timebase = Common::PacketReadU64(packet); u32 frame; @@ -1049,7 +1049,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } sf::Packet spac; - spac << (MessageId)NP_MSG_DESYNC_DETECTED; + spac << MessageID::DesyncDetected; spac << pid_to_blame; spac << frame; SendToClients(spac); @@ -1061,13 +1061,13 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_MD5_PROGRESS: + case MessageID::MD5Progress: { int progress; packet >> progress; sf::Packet spac; - spac << static_cast(NP_MSG_MD5_PROGRESS); + spac << MessageID::MD5Progress; spac << player.pid; spac << progress; @@ -1075,13 +1075,13 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_MD5_RESULT: + case MessageID::MD5Result: { std::string result; packet >> result; sf::Packet spac; - spac << static_cast(NP_MSG_MD5_RESULT); + spac << MessageID::MD5Result; spac << player.pid; spac << result; @@ -1089,13 +1089,13 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_MD5_ERROR: + case MessageID::MD5Error: { std::string error; packet >> error; sf::Packet spac; - spac << static_cast(NP_MSG_MD5_ERROR); + spac << MessageID::MD5Error; spac << player.pid; spac << error; @@ -1103,7 +1103,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_SYNC_SAVE_DATA: + case MessageID::SyncSaveData: { MessageId sub_id; packet >> sub_id; @@ -1145,7 +1145,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case NP_MSG_SYNC_CODES: + case MessageID::SyncCodes: { // Receive Status of Code Sync MessageId sub_id; @@ -1217,8 +1217,8 @@ void NetPlayServer::OnTraversalStateChanged() void NetPlayServer::SendChatMessage(const std::string& msg) { sf::Packet spac; - spac << static_cast(NP_MSG_CHAT_MESSAGE); - spac << static_cast(0); // server id always 0 + spac << MessageID::ChatMessage; + spac << PlayerId{0}; // server ID always 0 spac << msg; SendAsyncToClients(std::move(spac)); @@ -1235,7 +1235,7 @@ bool NetPlayServer::ChangeGame(const SyncIdentifier& sync_identifier, // send changed game to clients sf::Packet spac; - spac << static_cast(NP_MSG_CHANGE_GAME); + spac << MessageID::ChangeGame; SendSyncIdentifier(spac, m_selected_game_identifier); spac << m_selected_game_name; @@ -1248,7 +1248,7 @@ bool NetPlayServer::ChangeGame(const SyncIdentifier& sync_identifier, bool NetPlayServer::ComputeMD5(const SyncIdentifier& sync_identifier) { sf::Packet spac; - spac << static_cast(NP_MSG_COMPUTE_MD5); + spac << MessageID::ComputeMD5; SendSyncIdentifier(spac, sync_identifier); SendAsyncToClients(std::move(spac)); @@ -1260,10 +1260,9 @@ bool NetPlayServer::ComputeMD5(const SyncIdentifier& sync_identifier) bool NetPlayServer::AbortMD5() { sf::Packet spac; - spac << static_cast(NP_MSG_MD5_ABORT); + spac << MessageID::MD5Abort; SendAsyncToClients(std::move(spac)); - return true; } @@ -1462,7 +1461,7 @@ bool NetPlayServer::StartGame() g_SRAM_netplay_initialized = true; } sf::Packet srampac; - srampac << static_cast(NP_MSG_SYNC_GC_SRAM); + srampac << MessageID::SyncGCSRAM; for (size_t i = 0; i < sizeof(g_SRAM) - offsetof(Sram, settings); ++i) { srampac << g_SRAM[offsetof(Sram, settings) + i]; @@ -1471,7 +1470,7 @@ bool NetPlayServer::StartGame() // tell clients to start game sf::Packet spac; - spac << static_cast(NP_MSG_START_GAME); + spac << MessageID::StartGame; spac << m_current_game; spac << m_settings.m_CPUthread; spac << static_cast>(m_settings.m_CPUcore); @@ -1620,7 +1619,7 @@ bool NetPlayServer::SyncSaveData() { sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_SAVE_DATA); + pac << MessageID::SyncSaveData; pac << static_cast(SYNC_SAVE_DATA_NOTIFY); pac << save_count; @@ -1657,7 +1656,7 @@ bool NetPlayServer::SyncSaveData() } sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_SAVE_DATA); + pac << MessageID::SyncSaveData; pac << static_cast(SYNC_SAVE_DATA_RAW); pac << is_slot_a << region << size_override; @@ -1682,7 +1681,7 @@ bool NetPlayServer::SyncSaveData() fmt::format("Card {}", is_slot_a ? 'A' : 'B'); sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_SAVE_DATA); + pac << MessageID::SyncSaveData; pac << static_cast(SYNC_SAVE_DATA_GCI); pac << is_slot_a; @@ -1734,7 +1733,7 @@ bool NetPlayServer::SyncSaveData() std::vector titles; sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_SAVE_DATA); + pac << MessageID::SyncSaveData; pac << static_cast(SYNC_SAVE_DATA_WII); // Shove the Mii data into the start the packet @@ -1825,7 +1824,7 @@ bool NetPlayServer::SyncSaveData() if (m_gba_config[i].enabled && m_gba_config[i].has_rom) { sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_SAVE_DATA); + pac << MessageID::SyncSaveData; pac << static_cast(SYNC_SAVE_DATA_GBA); pac << static_cast(i); @@ -1882,7 +1881,7 @@ bool NetPlayServer::SyncCodes() // Notify Clients of Incoming Code Sync { sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_CODES); + pac << MessageID::SyncCodes; pac << static_cast(SYNC_CODES_NOTIFY); SendAsyncToClients(std::move(pac)); } @@ -1910,7 +1909,7 @@ bool NetPlayServer::SyncCodes() // Send initial packet. Notify of the sync operation and total number of lines being sent. { sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_CODES); + pac << MessageID::SyncCodes; pac << static_cast(SYNC_CODES_NOTIFY_GECKO); pac << codelines; SendAsyncToClients(std::move(pac)); @@ -1919,7 +1918,7 @@ bool NetPlayServer::SyncCodes() // Send entire codeset in the second packet { sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_CODES); + pac << MessageID::SyncCodes; pac << static_cast(SYNC_CODES_DATA_GECKO); // Iterate through the active code vector and send each codeline for (const Gecko::GeckoCode& active_code : s_active_codes) @@ -1960,7 +1959,7 @@ bool NetPlayServer::SyncCodes() // Send initial packet. Notify of the sync operation and total number of lines being sent. { sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_CODES); + pac << MessageID::SyncCodes; pac << static_cast(SYNC_CODES_NOTIFY_AR); pac << codelines; SendAsyncToClients(std::move(pac)); @@ -1969,7 +1968,7 @@ bool NetPlayServer::SyncCodes() // Send entire codeset in the second packet { sf::Packet pac; - pac << static_cast(NP_MSG_SYNC_CODES); + pac << MessageID::SyncCodes; pac << static_cast(SYNC_CODES_DATA_AR); // Iterate through the active code vector and send each codeline for (const ActionReplay::ARCode& active_code : s_active_codes) @@ -2160,7 +2159,7 @@ void NetPlayServer::ChunkedDataThreadFunc() player_count = players.size(); sf::Packet pac; - pac << static_cast(NP_MSG_CHUNKED_DATA_START); + pac << MessageID::ChunkedDataStart; pac << id << e.title << sf::Uint64{e.packet.getDataSize()}; ChunkedDataSend(std::move(pac), e.target_pid, e.target_mode); @@ -2182,7 +2181,7 @@ void NetPlayServer::ChunkedDataThreadFunc() if (m_abort_chunked_data) { sf::Packet pac; - pac << static_cast(NP_MSG_CHUNKED_DATA_ABORT); + pac << MessageID::ChunkedDataAbort; pac << id; ChunkedDataSend(std::move(pac), e.target_pid, e.target_mode); break; @@ -2199,7 +2198,7 @@ void NetPlayServer::ChunkedDataThreadFunc() auto start = std::chrono::steady_clock::now(); sf::Packet pac; - pac << static_cast(NP_MSG_CHUNKED_DATA_PAYLOAD); + pac << MessageID::ChunkedDataPayload; pac << id; size_t len = std::min(CHUNKED_DATA_UNIT_SIZE, e.packet.getDataSize() - index); pac.append(static_cast(e.packet.getData()) + index, len); @@ -2217,7 +2216,7 @@ void NetPlayServer::ChunkedDataThreadFunc() if (!m_abort_chunked_data) { sf::Packet pac; - pac << static_cast(NP_MSG_CHUNKED_DATA_END); + pac << MessageID::ChunkedDataEnd; pac << id; ChunkedDataSend(std::move(pac), e.target_pid, e.target_mode); } From dedd0b7ba1d33f2c09026b4ab82a9afdeec8ab9f Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 22 Sep 2021 14:49:41 -0400 Subject: [PATCH 3/6] NetPlayProto: Turn Sync-related enums into enum classes --- Source/Core/Core/NetPlayClient.cpp | 32 +++++++++++++++--------------- Source/Core/Core/NetPlayProto.h | 32 +++++++++++++++--------------- Source/Core/Core/NetPlayServer.cpp | 32 +++++++++++++++--------------- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index 42b5d903a9..212a938c6c 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -981,7 +981,7 @@ void NetPlayClient::OnSyncGCSRAM(sf::Packet& packet) void NetPlayClient::OnSyncSaveData(sf::Packet& packet) { - MessageId sub_id; + SyncSaveDataID sub_id; packet >> sub_id; if (m_local_player->IsHost()) @@ -989,23 +989,23 @@ void NetPlayClient::OnSyncSaveData(sf::Packet& packet) switch (sub_id) { - case SYNC_SAVE_DATA_NOTIFY: + case SyncSaveDataID::Notify: OnSyncSaveDataNotify(packet); break; - case SYNC_SAVE_DATA_RAW: + case SyncSaveDataID::RawData: OnSyncSaveDataRaw(packet); break; - case SYNC_SAVE_DATA_GCI: + case SyncSaveDataID::GCIData: OnSyncSaveDataGCI(packet); break; - case SYNC_SAVE_DATA_WII: + case SyncSaveDataID::WiiData: OnSyncSaveDataWii(packet); break; - case SYNC_SAVE_DATA_GBA: + case SyncSaveDataID::GBAData: OnSyncSaveDataGBA(packet); break; @@ -1239,29 +1239,29 @@ void NetPlayClient::OnSyncSaveDataGBA(sf::Packet& packet) void NetPlayClient::OnSyncCodes(sf::Packet& packet) { // Recieve Data Packet - MessageId sub_id; + SyncCodeID sub_id; packet >> sub_id; // Check Which Operation to Perform with This Packet switch (sub_id) { - case SYNC_CODES_NOTIFY: + case SyncCodeID::Notify: OnSyncCodesNotify(); break; - case SYNC_CODES_NOTIFY_GECKO: + case SyncCodeID::NotifyGecko: OnSyncCodesNotifyGecko(packet); break; - case SYNC_CODES_DATA_GECKO: + case SyncCodeID::GeckoData: OnSyncCodesDataGecko(packet); break; - case SYNC_CODES_NOTIFY_AR: + case SyncCodeID::NotifyAR: OnSyncCodesNotifyAR(packet); break; - case SYNC_CODES_DATA_AR: + case SyncCodeID::ARData: OnSyncCodesDataAR(packet); break; @@ -1761,7 +1761,7 @@ void NetPlayClient::SyncSaveDataResponse(const bool success) { sf::Packet response_packet; response_packet << MessageID::SyncSaveData; - response_packet << static_cast(SYNC_SAVE_DATA_SUCCESS); + response_packet << SyncSaveDataID::Success; Send(response_packet); } @@ -1770,7 +1770,7 @@ void NetPlayClient::SyncSaveDataResponse(const bool success) { sf::Packet response_packet; response_packet << MessageID::SyncSaveData; - response_packet << static_cast(SYNC_SAVE_DATA_FAILURE); + response_packet << SyncSaveDataID::Failure; Send(response_packet); } @@ -1785,7 +1785,7 @@ void NetPlayClient::SyncCodeResponse(const bool success) sf::Packet response_packet; response_packet << MessageID::SyncCodes; - response_packet << static_cast(SYNC_CODES_FAILURE); + response_packet << SyncCodeID::Failure; Send(response_packet); return; @@ -1798,7 +1798,7 @@ void NetPlayClient::SyncCodeResponse(const bool success) sf::Packet response_packet; response_packet << MessageID::SyncCodes; - response_packet << static_cast(SYNC_CODES_SUCCESS); + response_packet << SyncCodeID::Success; Send(response_packet); } diff --git a/Source/Core/Core/NetPlayProto.h b/Source/Core/Core/NetPlayProto.h index 1e63781322..f24c1efbe5 100644 --- a/Source/Core/Core/NetPlayProto.h +++ b/Source/Core/Core/NetPlayProto.h @@ -187,26 +187,26 @@ enum CON_ERR_NAME_TOO_LONG = 4 }; -enum +enum class SyncSaveDataID : u8 { - SYNC_SAVE_DATA_NOTIFY = 0, - SYNC_SAVE_DATA_SUCCESS = 1, - SYNC_SAVE_DATA_FAILURE = 2, - SYNC_SAVE_DATA_RAW = 3, - SYNC_SAVE_DATA_GCI = 4, - SYNC_SAVE_DATA_WII = 5, - SYNC_SAVE_DATA_GBA = 6 + Notify = 0, + Success = 1, + Failure = 2, + RawData = 3, + GCIData = 4, + WiiData = 5, + GBAData = 6 }; -enum +enum class SyncCodeID : u8 { - SYNC_CODES_NOTIFY = 0, - SYNC_CODES_NOTIFY_GECKO = 1, - SYNC_CODES_NOTIFY_AR = 2, - SYNC_CODES_DATA_GECKO = 3, - SYNC_CODES_DATA_AR = 4, - SYNC_CODES_SUCCESS = 5, - SYNC_CODES_FAILURE = 6, + Notify = 0, + NotifyGecko = 1, + NotifyAR = 2, + GeckoData = 3, + ARData = 4, + Success = 5, + Failure = 6, }; constexpr u32 MAX_NAME_LENGTH = 30; diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index bb69332521..b26d1f5c91 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -1105,12 +1105,12 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) case MessageID::SyncSaveData: { - MessageId sub_id; + SyncSaveDataID sub_id; packet >> sub_id; switch (sub_id) { - case SYNC_SAVE_DATA_SUCCESS: + case SyncSaveDataID::Success: { if (m_start_pending) { @@ -1127,7 +1127,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case SYNC_SAVE_DATA_FAILURE: + case SyncSaveDataID::Failure: { m_dialog->AppendChat(Common::FmtFormatT("{0} failed to synchronize.", player.name)); m_dialog->OnGameStartAborted(); @@ -1148,13 +1148,13 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) case MessageID::SyncCodes: { // Receive Status of Code Sync - MessageId sub_id; + SyncCodeID sub_id; packet >> sub_id; // Check If Code Sync was successful or not switch (sub_id) { - case SYNC_CODES_SUCCESS: + case SyncCodeID::Success: { if (m_start_pending) { @@ -1170,7 +1170,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) } break; - case SYNC_CODES_FAILURE: + case SyncCodeID::Failure: { m_dialog->AppendChat(Common::FmtFormatT("{0} failed to synchronize codes.", player.name)); m_dialog->OnGameStartAborted(); @@ -1620,7 +1620,7 @@ bool NetPlayServer::SyncSaveData() { sf::Packet pac; pac << MessageID::SyncSaveData; - pac << static_cast(SYNC_SAVE_DATA_NOTIFY); + pac << SyncSaveDataID::Notify; pac << save_count; // send this on the chunked data channel to ensure it's sequenced properly @@ -1657,7 +1657,7 @@ bool NetPlayServer::SyncSaveData() sf::Packet pac; pac << MessageID::SyncSaveData; - pac << static_cast(SYNC_SAVE_DATA_RAW); + pac << SyncSaveDataID::RawData; pac << is_slot_a << region << size_override; if (File::Exists(path)) @@ -1682,7 +1682,7 @@ bool NetPlayServer::SyncSaveData() sf::Packet pac; pac << MessageID::SyncSaveData; - pac << static_cast(SYNC_SAVE_DATA_GCI); + pac << SyncSaveDataID::GCIData; pac << is_slot_a; if (File::IsDirectory(path)) @@ -1734,7 +1734,7 @@ bool NetPlayServer::SyncSaveData() sf::Packet pac; pac << MessageID::SyncSaveData; - pac << static_cast(SYNC_SAVE_DATA_WII); + pac << SyncSaveDataID::WiiData; // Shove the Mii data into the start the packet { @@ -1825,7 +1825,7 @@ bool NetPlayServer::SyncSaveData() { sf::Packet pac; pac << MessageID::SyncSaveData; - pac << static_cast(SYNC_SAVE_DATA_GBA); + pac << SyncSaveDataID::GBAData; pac << static_cast(i); std::string path; @@ -1882,7 +1882,7 @@ bool NetPlayServer::SyncCodes() { sf::Packet pac; pac << MessageID::SyncCodes; - pac << static_cast(SYNC_CODES_NOTIFY); + pac << SyncCodeID::Notify; SendAsyncToClients(std::move(pac)); } // Sync Gecko Codes @@ -1910,7 +1910,7 @@ bool NetPlayServer::SyncCodes() { sf::Packet pac; pac << MessageID::SyncCodes; - pac << static_cast(SYNC_CODES_NOTIFY_GECKO); + pac << SyncCodeID::NotifyGecko; pac << codelines; SendAsyncToClients(std::move(pac)); } @@ -1919,7 +1919,7 @@ bool NetPlayServer::SyncCodes() { sf::Packet pac; pac << MessageID::SyncCodes; - pac << static_cast(SYNC_CODES_DATA_GECKO); + pac << SyncCodeID::GeckoData; // Iterate through the active code vector and send each codeline for (const Gecko::GeckoCode& active_code : s_active_codes) { @@ -1960,7 +1960,7 @@ bool NetPlayServer::SyncCodes() { sf::Packet pac; pac << MessageID::SyncCodes; - pac << static_cast(SYNC_CODES_NOTIFY_AR); + pac << SyncCodeID::NotifyAR; pac << codelines; SendAsyncToClients(std::move(pac)); } @@ -1969,7 +1969,7 @@ bool NetPlayServer::SyncCodes() { sf::Packet pac; pac << MessageID::SyncCodes; - pac << static_cast(SYNC_CODES_DATA_AR); + pac << SyncCodeID::ARData; // Iterate through the active code vector and send each codeline for (const ActionReplay::ARCode& active_code : s_active_codes) { From a034f378a05b51211a6ac49e5847922cb15ef14b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 22 Sep 2021 15:06:46 -0400 Subject: [PATCH 4/6] NetPlayProto: Turn connection error enum into an enum class Continues the migration off the MessageId type alias --- Source/Core/Core/NetPlayClient.cpp | 12 ++++++------ Source/Core/Core/NetPlayProto.h | 11 ++++++----- Source/Core/Core/NetPlayServer.cpp | 18 +++++++++--------- Source/Core/Core/NetPlayServer.h | 2 +- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index 212a938c6c..bcab00351f 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -244,25 +244,25 @@ bool NetPlayClient::Connect() return false; } - MessageId error; + ConnectionError error; rpac >> error; // got error message - if (error) + if (error != ConnectionError::NoError) { switch (error) { - case CON_ERR_SERVER_FULL: + case ConnectionError::ServerFull: m_dialog->OnConnectionError(_trans("The server is full.")); break; - case CON_ERR_VERSION_MISMATCH: + case ConnectionError::VersionMismatch: m_dialog->OnConnectionError( _trans("The server and client's NetPlay versions are incompatible.")); break; - case CON_ERR_GAME_RUNNING: + case ConnectionError::GameRunning: m_dialog->OnConnectionError(_trans("The game is currently running.")); break; - case CON_ERR_NAME_TOO_LONG: + case ConnectionError::NameTooLong: m_dialog->OnConnectionError(_trans("Nickname is too long.")); break; default: diff --git a/Source/Core/Core/NetPlayProto.h b/Source/Core/Core/NetPlayProto.h index f24c1efbe5..4a2e4d263c 100644 --- a/Source/Core/Core/NetPlayProto.h +++ b/Source/Core/Core/NetPlayProto.h @@ -179,12 +179,13 @@ enum class MessageID : u8 SyncCodes = 0xF2, }; -enum +enum class ConnectionError : u8 { - CON_ERR_SERVER_FULL = 1, - CON_ERR_GAME_RUNNING = 2, - CON_ERR_VERSION_MISMATCH = 3, - CON_ERR_NAME_TOO_LONG = 4 + NoError = 0, + ServerFull = 1, + GameRunning = 2, + VersionMismatch = 3, + NameTooLong = 4 }; enum class SyncSaveDataID : u8 diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index b26d1f5c91..f75daf2208 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -297,16 +297,16 @@ void NetPlayServer::ThreadFunc() if (!netEvent.peer->data) { // uninitialized client, we'll assume this is their initialization packet - unsigned int error; + ConnectionError error; { std::lock_guard lkg(m_crit.game); error = OnConnect(netEvent.peer, rpac); } - if (error) + if (error != ConnectionError::NoError) { sf::Packet spac; - spac << static_cast(error); + spac << error; // don't need to lock, this client isn't in the client map Send(netEvent.peer, spac); @@ -374,7 +374,7 @@ static void SendSyncIdentifier(sf::Packet& spac, const SyncIdentifier& sync_iden } // called from ---NETPLAY--- thread -unsigned int NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) +ConnectionError NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) { // give new client first available id PlayerId pid = 1; @@ -392,15 +392,15 @@ unsigned int NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) rpac >> npver; // Dolphin netplay version if (npver != Common::scm_rev_git_str) - return CON_ERR_VERSION_MISMATCH; + return ConnectionError::VersionMismatch; // game is currently running or game start is pending if (m_is_running || m_start_pending) - return CON_ERR_GAME_RUNNING; + return ConnectionError::GameRunning; // too many players if (m_players.size() >= 255) - return CON_ERR_SERVER_FULL; + return ConnectionError::ServerFull; Client player; player.pid = pid; @@ -410,7 +410,7 @@ unsigned int NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) rpac >> player.name; if (StringUTF8CodePointCount(player.name) > MAX_NAME_LENGTH) - return CON_ERR_NAME_TOO_LONG; + return ConnectionError::NameTooLong; // cause pings to be updated m_update_pings = true; @@ -488,7 +488,7 @@ unsigned int NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) UpdateWiimoteMapping(); } - return 0; + return ConnectionError::NoError; } // called from ---NETPLAY--- thread diff --git a/Source/Core/Core/NetPlayServer.h b/Source/Core/Core/NetPlayServer.h index 87c1d46f63..76c1d7ae94 100644 --- a/Source/Core/Core/NetPlayServer.h +++ b/Source/Core/Core/NetPlayServer.h @@ -129,7 +129,7 @@ private: void SendToClients(const sf::Packet& packet, PlayerId skip_pid = 0, u8 channel_id = DEFAULT_CHANNEL); void Send(ENetPeer* socket, const sf::Packet& packet, u8 channel_id = DEFAULT_CHANNEL); - unsigned int OnConnect(ENetPeer* socket, sf::Packet& rpac); + ConnectionError OnConnect(ENetPeer* socket, sf::Packet& rpac); unsigned int OnDisconnect(const Client& player); unsigned int OnData(sf::Packet& packet, Client& player); From 80b4a4d7fdf09627a74ab244ccb564cb948ae884 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 22 Sep 2021 15:10:31 -0400 Subject: [PATCH 5/6] NetPlayProto: Remove now-unused MessageId type alias Now that we have enum helpers for inserting values into packets and have migrated all other enumerations over, there's no need to keep this alias around any longer. --- Source/Core/Core/NetPlayProto.h | 3 ++- Source/Core/Core/NetPlayServer.cpp | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/NetPlayProto.h b/Source/Core/Core/NetPlayProto.h index 4a2e4d263c..4d3cf436fb 100644 --- a/Source/Core/Core/NetPlayProto.h +++ b/Source/Core/Core/NetPlayProto.h @@ -122,6 +122,8 @@ struct NetTraversalConfig enum class MessageID : u8 { + ConnectionSuccessful = 0, + PlayerJoin = 0x10, PlayerLeave = 0x11, @@ -225,7 +227,6 @@ struct WiimoteInput u8 report_id; std::vector data; }; -using MessageId = u8; using PlayerId = u8; using FrameNum = u32; using PadIndex = s8; diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index f75daf2208..c125cef358 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -431,9 +431,9 @@ ConnectionError NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) spac << player.pid << player.name << player.revision; SendToClients(spac); - // send new client success message with their id + // send new client success message with their ID spac.clear(); - spac << static_cast(0); + spac << MessageID::ConnectionSuccessful; spac << player.pid; Send(player.socket, spac); From 3840b552924f2c8d212c109a1ef3cb1661f2b643 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 22 Sep 2021 15:29:04 -0400 Subject: [PATCH 6/6] NetPlayClient/NetPlayServer: Remove now-unnecessary static_casts Now that we have the enum helpers in place, quite a few casts on their own can be removed. --- Source/Core/Core/NetPlayClient.cpp | 38 ++++++------------------------ Source/Core/Core/NetPlayServer.cpp | 12 +++++----- 2 files changed, 13 insertions(+), 37 deletions(-) diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index bcab00351f..8f730038ef 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -784,10 +784,7 @@ void NetPlayClient::OnGameStatus(sf::Packet& packet) { std::lock_guard lkp(m_crit.players); - Player& player = m_players[pid]; - u32 status; - packet >> status; - player.game_status = static_cast(status); + packet >> m_players[pid].game_status; } m_dialog->Update(); @@ -797,19 +794,12 @@ void NetPlayClient::OnStartGame(sf::Packet& packet) { { std::lock_guard lkg(m_crit.game); - packet >> m_current_game; - packet >> m_net_settings.m_CPUthread; INFO_LOG_FMT(NETPLAY, "Start of game {}", m_selected_game.game_id); - { - std::underlying_type_t core; - if (packet >> core) - m_net_settings.m_CPUcore = static_cast(core); - else - m_net_settings.m_CPUcore = PowerPC::CPUCore::CachedInterpreter; - } - + packet >> m_current_game; + packet >> m_net_settings.m_CPUthread; + packet >> m_net_settings.m_CPUcore; packet >> m_net_settings.m_EnableCheats; packet >> m_net_settings.m_SelectedLanguage; packet >> m_net_settings.m_OverrideRegionSettings; @@ -819,24 +809,14 @@ void NetPlayClient::OnStartGame(sf::Packet& packet) packet >> m_net_settings.m_RAMOverrideEnable; packet >> m_net_settings.m_Mem1Size; packet >> m_net_settings.m_Mem2Size; - - { - std::underlying_type_t tmp; - packet >> tmp; - m_net_settings.m_FallbackRegion = static_cast(tmp); - } - + packet >> m_net_settings.m_FallbackRegion; packet >> m_net_settings.m_AllowSDWrites; packet >> m_net_settings.m_CopyWiiSave; packet >> m_net_settings.m_OCEnable; packet >> m_net_settings.m_OCFactor; for (auto& device : m_net_settings.m_EXIDevice) - { - int tmp; - packet >> tmp; - device = static_cast(tmp); - } + packet >> device; for (u32& value : m_net_settings.m_SYSCONFSettings) packet >> value; @@ -1183,11 +1163,7 @@ void NetPlayClient::OnSyncSaveDataWii(sf::Packet& packet) { WiiSave::Storage::SaveFile file; packet >> file.mode >> file.attributes; - { - u8 tmp; - packet >> tmp; - file.type = static_cast(tmp); - } + packet >> file.type; packet >> file.path; if (file.type == WiiSave::Storage::SaveFile::Type::File) diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index c125cef358..806f4967ac 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -472,7 +472,7 @@ ConnectionError NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac) spac.clear(); spac << MessageID::GameStatus; - spac << p.second.pid << static_cast(p.second.game_status); + spac << p.second.pid << p.second.game_status; Send(player.socket, spac); } @@ -986,10 +986,10 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) case MessageID::GameStatus: { - u32 status; + SyncIdentifierComparison status; packet >> status; - m_players[player.pid].game_status = static_cast(status); + m_players[player.pid].game_status = status; // send msg to other clients sf::Packet spac; @@ -1473,7 +1473,7 @@ bool NetPlayServer::StartGame() spac << MessageID::StartGame; spac << m_current_game; spac << m_settings.m_CPUthread; - spac << static_cast>(m_settings.m_CPUcore); + spac << m_settings.m_CPUcore; spac << m_settings.m_EnableCheats; spac << m_settings.m_SelectedLanguage; spac << m_settings.m_OverrideRegionSettings; @@ -1483,7 +1483,7 @@ bool NetPlayServer::StartGame() spac << m_settings.m_RAMOverrideEnable; spac << m_settings.m_Mem1Size; spac << m_settings.m_Mem2Size; - spac << static_cast>(m_settings.m_FallbackRegion); + spac << m_settings.m_FallbackRegion; spac << m_settings.m_AllowSDWrites; spac << m_settings.m_CopyWiiSave; spac << m_settings.m_OCEnable; @@ -1797,7 +1797,7 @@ bool NetPlayServer::SyncSaveData() // Files for (const WiiSave::Storage::SaveFile& file : *files) { - pac << file.mode << file.attributes << static_cast(file.type) << file.path; + pac << file.mode << file.attributes << file.type << file.path; if (file.type == WiiSave::Storage::SaveFile::Type::File) {