diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index 0630fdd625..6cc6435b88 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -528,7 +528,7 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet) packet >> m_net_settings.m_EnableGPUTextureDecoding; packet >> m_net_settings.m_StrictSettingsSync; - g_netplay_initial_rtc = Common::PacketReadU64(packet); + m_initial_rtc = Common::PacketReadU64(packet); packet >> m_net_settings.m_SyncSaveData; packet >> m_net_settings.m_SaveDataRegion; @@ -1454,6 +1454,11 @@ bool NetPlayClient::GetNetPads(const int pad_nb, GCPadStatus* pad_status) return true; } +u64 NetPlayClient::GetInitialRTCValue() const +{ + return m_initial_rtc; +} + // called from ---CPU--- thread bool NetPlayClient::WiimoteUpdate(int _number, u8* data, const u8 size, u8 reporting_mode) { @@ -1811,7 +1816,7 @@ u64 ExpansionInterface::CEXIIPL::NetPlay_GetEmulatedTime() std::lock_guard lk(NetPlay::crit_netplay_client); if (NetPlay::netplay_client) - return NetPlay::g_netplay_initial_rtc; + return NetPlay::netplay_client->GetInitialRTCValue(); return 0; } diff --git a/Source/Core/Core/NetPlayClient.h b/Source/Core/Core/NetPlayClient.h index ad9d3ee971..c096b53495 100644 --- a/Source/Core/Core/NetPlayClient.h +++ b/Source/Core/Core/NetPlayClient.h @@ -102,6 +102,8 @@ public: bool WiimoteUpdate(int _number, u8* data, const u8 size, u8 reporting_mode); bool GetNetPads(int pad_nb, GCPadStatus* pad_status); + u64 GetInitialRTCValue() const; + void OnTraversalStateChanged() override; void OnConnectReady(ENetAddress addr) override; void OnConnectFailed(u8 reason) override; @@ -203,6 +205,7 @@ private: u8 m_sync_save_data_count = 0; u8 m_sync_save_data_success_count = 0; + u64 m_initial_rtc = 0; u32 m_timebase_frame = 0; }; diff --git a/Source/Core/Core/NetPlayProto.h b/Source/Core/Core/NetPlayProto.h index 76b098be11..3f643b9750 100644 --- a/Source/Core/Core/NetPlayProto.h +++ b/Source/Core/Core/NetPlayProto.h @@ -94,8 +94,6 @@ struct NetTraversalConfig u16 traversal_port = 0; }; -extern u64 g_netplay_initial_rtc; - struct Rpt : public std::vector { u16 channel; diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index e49626976c..fcf1fc886a 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -56,8 +56,6 @@ namespace NetPlay { -u64 g_netplay_initial_rtc = 1272737767; - NetPlayServer::~NetPlayServer() { if (is_connected) @@ -908,10 +906,7 @@ bool NetPlayServer::StartGame() // no change, just update with clients AdjustPadBufferSize(m_target_buffer_size); - if (SConfig::GetInstance().bEnableCustomRTC) - g_netplay_initial_rtc = SConfig::GetInstance().m_customRTCValue; - else - g_netplay_initial_rtc = Common::Timer::GetLocalTimeSinceJan1970(); + const u64 initial_rtc = GetInitialNetPlayRTC(); const std::string region = SConfig::GetDirectoryForRegion( SConfig::ToGameCubeRegion(m_dialog->FindGameFile(m_selected_game)->GetRegion())); @@ -974,7 +969,7 @@ bool NetPlayServer::StartGame() spac << m_settings.m_ArbitraryMipmapDetectionThreshold; spac << m_settings.m_EnableGPUTextureDecoding; spac << m_settings.m_StrictSettingsSync; - Common::PacketWriteU64(spac, g_netplay_initial_rtc); + Common::PacketWriteU64(spac, initial_rtc); spac << m_settings.m_SyncSaveData; spac << region; @@ -1289,6 +1284,16 @@ bool NetPlayServer::CompressBufferIntoPacket(const std::vector& in_buffer, s return true; } +u64 NetPlayServer::GetInitialNetPlayRTC() const +{ + const auto& config = SConfig::GetInstance(); + + if (config.bEnableCustomRTC) + return config.m_customRTCValue; + + return Common::Timer::GetLocalTimeSinceJan1970(); +} + // called from multiple threads void NetPlayServer::SendToClients(const sf::Packet& packet, const PlayerId skip_pid) { diff --git a/Source/Core/Core/NetPlayServer.h b/Source/Core/Core/NetPlayServer.h index b3484e858e..7dbc384a61 100644 --- a/Source/Core/Core/NetPlayServer.h +++ b/Source/Core/Core/NetPlayServer.h @@ -85,6 +85,8 @@ private: bool CompressFileIntoPacket(const std::string& file_path, sf::Packet& packet); bool CompressBufferIntoPacket(const std::vector& in_buffer, sf::Packet& packet); + u64 GetInitialNetPlayRTC() const; + void SendToClients(const sf::Packet& packet, const PlayerId skip_pid = 0); void Send(ENetPeer* socket, const sf::Packet& packet); unsigned int OnConnect(ENetPeer* socket);