From 0f3194abc35679c2060d646d7d87fdd58ea1cd87 Mon Sep 17 00:00:00 2001 From: Rachel Bryk Date: Thu, 16 Oct 2014 02:36:39 -0400 Subject: [PATCH] Get rid of netpad and just send the GCPadStatus in netplay. --- Source/Core/Core/HW/SI_DeviceDanceMat.cpp | 12 +--- Source/Core/Core/HW/SI_DeviceDanceMat.h | 2 +- Source/Core/Core/HW/SI_DeviceGCController.cpp | 12 +--- Source/Core/Core/HW/SI_DeviceGCController.h | 2 +- .../Core/Core/HW/SI_DeviceGCSteeringWheel.cpp | 12 +--- .../Core/Core/HW/SI_DeviceGCSteeringWheel.h | 2 +- Source/Core/Core/NetPlayClient.cpp | 63 +++++-------------- Source/Core/Core/NetPlayClient.h | 18 ++---- Source/Core/Core/NetPlayServer.cpp | 7 ++- 9 files changed, 37 insertions(+), 93 deletions(-) diff --git a/Source/Core/Core/HW/SI_DeviceDanceMat.cpp b/Source/Core/Core/HW/SI_DeviceDanceMat.cpp index 76601b2604db..91ca7e6f431f 100644 --- a/Source/Core/Core/HW/SI_DeviceDanceMat.cpp +++ b/Source/Core/Core/HW/SI_DeviceDanceMat.cpp @@ -112,17 +112,11 @@ bool CSIDevice_DanceMat::GetData(u32& _Hi, u32& _Low) Pad::GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus); Movie::CallGCInputManip(&PadStatus, ISIDevice::m_iDeviceNumber); - u32 netValues[2]; - if (NetPlay_GetInput(ISIDevice::m_iDeviceNumber, PadStatus, netValues)) + Movie::SetPolledDevice(); + if (NetPlay_GetInput(ISIDevice::m_iDeviceNumber, &PadStatus)) { - _Hi = netValues[0]; // first 4 bytes - _Low = netValues[1]; // last 4 bytes - return true; } - - Movie::SetPolledDevice(); - - if (Movie::IsPlayingInput()) + else if (Movie::IsPlayingInput()) { Movie::PlayController(&PadStatus, ISIDevice::m_iDeviceNumber); Movie::InputUpdate(); diff --git a/Source/Core/Core/HW/SI_DeviceDanceMat.h b/Source/Core/Core/HW/SI_DeviceDanceMat.h index 1c5ba406258e..6f79417fb027 100644 --- a/Source/Core/Core/HW/SI_DeviceDanceMat.h +++ b/Source/Core/Core/HW/SI_DeviceDanceMat.h @@ -87,7 +87,7 @@ class CSIDevice_DanceMat : public ISIDevice virtual int RunBuffer(u8* _pBuffer, int _iLength) override; // Send and Receive pad input from network - static bool NetPlay_GetInput(u8 numPAD, GCPadStatus status, u32 *PADStatus); + static bool NetPlay_GetInput(u8 numPAD, GCPadStatus* status); static u8 NetPlay_InGamePadToLocalPad(u8 numPAD); // Return true on new data diff --git a/Source/Core/Core/HW/SI_DeviceGCController.cpp b/Source/Core/Core/HW/SI_DeviceGCController.cpp index 224e8e639e32..474f7fbeee39 100644 --- a/Source/Core/Core/HW/SI_DeviceGCController.cpp +++ b/Source/Core/Core/HW/SI_DeviceGCController.cpp @@ -112,17 +112,11 @@ bool CSIDevice_GCController::GetData(u32& _Hi, u32& _Low) Pad::GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus); Movie::CallGCInputManip(&PadStatus, ISIDevice::m_iDeviceNumber); - u32 netValues[2]; - if (NetPlay_GetInput(ISIDevice::m_iDeviceNumber, PadStatus, netValues)) + Movie::SetPolledDevice(); + if (NetPlay_GetInput(ISIDevice::m_iDeviceNumber, &PadStatus)) { - _Hi = netValues[0]; // first 4 bytes - _Low = netValues[1]; // last 4 bytes - return true; } - - Movie::SetPolledDevice(); - - if (Movie::IsPlayingInput()) + else if (Movie::IsPlayingInput()) { Movie::PlayController(&PadStatus, ISIDevice::m_iDeviceNumber); Movie::InputUpdate(); diff --git a/Source/Core/Core/HW/SI_DeviceGCController.h b/Source/Core/Core/HW/SI_DeviceGCController.h index ca4650689e28..ed41875bc437 100644 --- a/Source/Core/Core/HW/SI_DeviceGCController.h +++ b/Source/Core/Core/HW/SI_DeviceGCController.h @@ -88,7 +88,7 @@ class CSIDevice_GCController : public ISIDevice virtual int RunBuffer(u8* _pBuffer, int _iLength) override; // Send and Receive pad input from network - static bool NetPlay_GetInput(u8 numPAD, GCPadStatus status, u32 *PADStatus); + static bool NetPlay_GetInput(u8 numPAD, GCPadStatus* status); static u8 NetPlay_InGamePadToLocalPad(u8 numPAD); // Return true on new data diff --git a/Source/Core/Core/HW/SI_DeviceGCSteeringWheel.cpp b/Source/Core/Core/HW/SI_DeviceGCSteeringWheel.cpp index d9b66d583c10..3c48711b74ff 100644 --- a/Source/Core/Core/HW/SI_DeviceGCSteeringWheel.cpp +++ b/Source/Core/Core/HW/SI_DeviceGCSteeringWheel.cpp @@ -103,17 +103,11 @@ bool CSIDevice_GCSteeringWheel::GetData(u32& _Hi, u32& _Low) Pad::GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus); Movie::CallGCInputManip(&PadStatus, ISIDevice::m_iDeviceNumber); - u32 netValues[2]; - if (NetPlay_GetInput(ISIDevice::m_iDeviceNumber, PadStatus, netValues)) + Movie::SetPolledDevice(); + if (NetPlay_GetInput(ISIDevice::m_iDeviceNumber, &PadStatus)) { - _Hi = netValues[0]; // first 4 bytes - _Low = netValues[1]; // last 4 bytes - return true; } - - Movie::SetPolledDevice(); - - if (Movie::IsPlayingInput()) + else if (Movie::IsPlayingInput()) { Movie::PlayController(&PadStatus, ISIDevice::m_iDeviceNumber); Movie::InputUpdate(); diff --git a/Source/Core/Core/HW/SI_DeviceGCSteeringWheel.h b/Source/Core/Core/HW/SI_DeviceGCSteeringWheel.h index b435e19a7f4c..c6c399c25183 100644 --- a/Source/Core/Core/HW/SI_DeviceGCSteeringWheel.h +++ b/Source/Core/Core/HW/SI_DeviceGCSteeringWheel.h @@ -88,7 +88,7 @@ class CSIDevice_GCSteeringWheel : public ISIDevice virtual int RunBuffer(u8* _pBuffer, int _iLength) override; // Send and Receive pad input from network - static bool NetPlay_GetInput(u8 numPAD, GCPadStatus status, u32 *PADStatus); + static bool NetPlay_GetInput(u8 numPAD, GCPadStatus* status); static u8 NetPlay_InGamePadToLocalPad(u8 numPAD); // Return true on new data diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index 05eca0d6e416..2866870af066 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -21,24 +21,6 @@ static std::mutex crit_netplay_client; static NetPlayClient * netplay_client = nullptr; NetSettings g_NetPlaySettings; -NetPad::NetPad() -{ - nHi = 0x00808080; - nLo = 0x80800000; -} - -NetPad::NetPad(const GCPadStatus* const pad_status) -{ - nHi = (u32)((u8)pad_status->stickY); - nHi |= (u32)((u8)pad_status->stickX << 8); - nHi |= (u32)((u16)pad_status->button << 16); - nHi |= 0x00800000; - nLo = (u8)pad_status->triggerRight; - nLo |= (u32)((u8)pad_status->triggerLeft << 8); - nLo |= (u32)((u8)pad_status->substickY << 16); - nLo |= (u32)((u8)pad_status->substickX << 24); -} - // called from ---GUI--- thread NetPlayClient::~NetPlayClient() { @@ -207,12 +189,12 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet) case NP_MSG_PAD_DATA : { PadMapping map = 0; - NetPad np; - packet >> map >> np.nHi >> np.nLo; + GCPadStatus pad; + packet >> map >> pad.button >> pad.analogA >> pad.analogB >> pad.stickX >> pad.stickY >> pad.substickX >> pad.substickY >> pad.triggerLeft >> pad.triggerRight; // trusting server for good map value (>=0 && <4) // add to pad buffer - m_pad_buffer[map].Push(np); + m_pad_buffer[map].Push(pad); } break; @@ -425,13 +407,13 @@ void NetPlayClient::SendChatMessage(const std::string& msg) } // called from ---CPU--- thread -void NetPlayClient::SendPadState(const PadMapping in_game_pad, const NetPad& np) +void NetPlayClient::SendPadState(const PadMapping in_game_pad, const GCPadStatus& pad) { // send to server sf::Packet spac; spac << (MessageId)NP_MSG_PAD_DATA; spac << in_game_pad; - spac << np.nHi << np.nLo; + spac << pad.button << pad.analogA << pad.analogB << pad.stickX << pad.stickY << pad.substickX << pad.substickY << pad.triggerLeft << pad.triggerRight; std::lock_guard lks(m_crit.send); m_socket.Send(spac); @@ -556,7 +538,7 @@ void NetPlayClient::ClearBuffers() } // called from ---CPU--- thread -bool NetPlayClient::GetNetPads(const u8 pad_nb, const GCPadStatus* const pad_status, NetPad* const netvalues) +bool NetPlayClient::GetNetPads(const u8 pad_nb, GCPadStatus* pad_status) { // The interface for this is extremely silly. // @@ -589,17 +571,15 @@ bool NetPlayClient::GetNetPads(const u8 pad_nb, const GCPadStatus* const pad_sta // information given. if (in_game_num < 4) { - NetPad np(pad_status); - // adjust the buffer either up or down // inserting multiple padstates or dropping states while (m_pad_buffer[in_game_num].Size() <= m_target_buffer_size) { // add to buffer - m_pad_buffer[in_game_num].Push(np); + m_pad_buffer[in_game_num].Push(*pad_status); // send - SendPadState(in_game_num, np); + SendPadState(in_game_num, *pad_status); } } @@ -607,7 +587,7 @@ bool NetPlayClient::GetNetPads(const u8 pad_nb, const GCPadStatus* const pad_sta // retrieved from NetPlay. This could be the value we pushed // above if we're configured as P1 and the code is trying // to retrieve data for slot 1. - while (!m_pad_buffer[pad_nb].Pop(*netvalues)) + while (!m_pad_buffer[pad_nb].Pop(*pad_status)) { if (!m_is_running) return false; @@ -616,23 +596,14 @@ bool NetPlayClient::GetNetPads(const u8 pad_nb, const GCPadStatus* const pad_sta Common::SleepCurrentThread(1); } - GCPadStatus tmp; - tmp.stickY = ((u8*)&netvalues->nHi)[0]; - tmp.stickX = ((u8*)&netvalues->nHi)[1]; - tmp.button = ((u16*)&netvalues->nHi)[1]; - - tmp.substickX = ((u8*)&netvalues->nLo)[3]; - tmp.substickY = ((u8*)&netvalues->nLo)[2]; - tmp.triggerLeft = ((u8*)&netvalues->nLo)[1]; - tmp.triggerRight = ((u8*)&netvalues->nLo)[0]; if (Movie::IsRecordingInput()) { - Movie::RecordInput(&tmp, pad_nb); + Movie::RecordInput(pad_status, pad_nb); Movie::InputUpdate(); } else { - Movie::CheckPadStatus(&tmp, pad_nb); + Movie::CheckPadStatus(pad_status, pad_nb); } return true; @@ -844,12 +815,12 @@ u8 NetPlayClient::LocalWiimoteToInGameWiimote(u8 local_pad) // called from ---CPU--- thread // Actual Core function which is called on every frame -bool CSIDevice_GCController::NetPlay_GetInput(u8 numPAD, GCPadStatus PadStatus, u32 *PADStatus) +bool CSIDevice_GCController::NetPlay_GetInput(u8 numPAD, GCPadStatus* PadStatus) { std::lock_guard lk(crit_netplay_client); if (netplay_client) - return netplay_client->GetNetPads(numPAD, &PadStatus, (NetPad*)PADStatus); + return netplay_client->GetNetPads(numPAD, PadStatus); else return false; } @@ -864,14 +835,14 @@ bool WiimoteEmu::Wiimote::NetPlay_GetWiimoteData(int wiimote, u8* data, u8 size) return false; } -bool CSIDevice_GCSteeringWheel::NetPlay_GetInput(u8 numPAD, GCPadStatus PadStatus, u32 *PADStatus) +bool CSIDevice_GCSteeringWheel::NetPlay_GetInput(u8 numPAD, GCPadStatus* PadStatus) { - return CSIDevice_GCController::NetPlay_GetInput(numPAD, PadStatus, PADStatus); + return false; } -bool CSIDevice_DanceMat::NetPlay_GetInput(u8 numPAD, GCPadStatus PadStatus, u32 *PADStatus) +bool CSIDevice_DanceMat::NetPlay_GetInput(u8 numPAD, GCPadStatus* PadStatus) { - return CSIDevice_GCController::NetPlay_GetInput(numPAD, PadStatus, PADStatus); + return false; } // called from ---CPU--- thread diff --git a/Source/Core/Core/NetPlayClient.h b/Source/Core/Core/NetPlayClient.h index dc268088db6c..478fa2695e83 100644 --- a/Source/Core/Core/NetPlayClient.h +++ b/Source/Core/Core/NetPlayClient.h @@ -19,16 +19,6 @@ #include "InputCommon/GCPadStatus.h" -class NetPad -{ -public: - NetPad(); - NetPad(const GCPadStatus* const); - - u32 nHi; - u32 nLo; -}; - class NetPlayUI { public: @@ -76,7 +66,7 @@ class NetPlayClient // Send and receive pads values bool WiimoteUpdate(int _number, u8* data, const u8 size); - bool GetNetPads(const u8 pad_nb, const GCPadStatus* const, NetPad* const netvalues); + bool GetNetPads(const u8 pad_nb, GCPadStatus* pad_status); u8 LocalPadToInGamePad(u8 localPad); u8 InGamePadToLocalPad(u8 localPad); @@ -93,8 +83,8 @@ class NetPlayClient std::recursive_mutex players, send; } m_crit; - Common::FifoQueue m_pad_buffer[4]; - Common::FifoQueue m_wiimote_buffer[4]; + Common::FifoQueue m_pad_buffer[4]; + Common::FifoQueue m_wiimote_buffer[4]; NetPlayUI* m_dialog; sf::SocketTCP m_socket; @@ -118,7 +108,7 @@ class NetPlayClient private: void UpdateDevices(); - void SendPadState(const PadMapping in_game_pad, const NetPad& np); + void SendPadState(const PadMapping in_game_pad, const GCPadStatus& np); void SendWiimoteState(const PadMapping in_game_pad, const NetWiimote& nw); unsigned int OnData(sf::Packet& packet); diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index 6dca392b162b..1edc6c064d01 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -7,6 +7,7 @@ #include "Common/StringUtil.h" #include "Core/NetPlayServer.h" +#include "InputCommon/GCPadStatus.h" NetPlayServer::~NetPlayServer() { @@ -394,8 +395,8 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, sf::SocketTCP& socket) break; PadMapping map = 0; - int hi, lo; - packet >> map >> hi >> lo; + GCPadStatus pad; + packet >> map >> pad.button >> pad.analogA >> pad.analogB >> pad.stickX >> pad.stickY >> pad.substickX >> pad.substickY >> pad.triggerLeft >> pad.triggerRight; // If the data is not from the correct player, // then disconnect them. @@ -405,7 +406,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, sf::SocketTCP& socket) // Relay to clients sf::Packet spac; spac << (MessageId)NP_MSG_PAD_DATA; - spac << map << hi << lo; + spac << map << pad.button << pad.analogA << pad.analogB << pad.stickX << pad.stickY << pad.substickX << pad.substickY << pad.triggerLeft << pad.triggerRight; std::lock_guard lks(m_crit.send); SendToClients(spac, player.pid);