4141#include " Core/Config/SessionSettings.h"
4242#include " Core/Config/WiimoteSettings.h"
4343#include " Core/ConfigManager.h"
44+ #include " Core/Core.h"
4445#include " Core/GeckoCode.h"
4546#include " Core/HW/EXI/EXI.h"
4647#include " Core/HW/EXI/EXI_DeviceIPL.h"
@@ -82,7 +83,7 @@ namespace NetPlay
8283using namespace WiimoteCommon ;
8384
8485static std::mutex crit_netplay_client;
85- static NetPlayClient* netplay_client = nullptr ;
86+ NetPlayClient* netplay_client = nullptr ;
8687static bool s_si_poll_batching = false ;
8788
8889// called from ---GUI--- thread
@@ -309,6 +310,7 @@ bool NetPlayClient::Connect()
309310 player.name = m_player_name;
310311 player.pid = m_pid;
311312 player.revision = Common::GetNetplayDolphinVer ();
313+ player.buffer = 0 /* will be raised once we get the packet */ ;
312314
313315 // add self to player list
314316 m_players[m_pid] = player;
@@ -322,6 +324,31 @@ bool NetPlayClient::Connect()
322324 }
323325}
324326
327+ // called from ---GUI--- and ---NETPLAY--- thread
328+ void NetPlayClient::AdjustPlayerPadBufferSize (u32 buffer)
329+ {
330+ std::lock_guard<std::recursive_mutex> lkp (m_crit.players );
331+
332+ m_local_player->buffer = buffer;
333+ if (m_local_player->buffer < m_minimum_buffer_size)
334+ m_local_player->buffer = m_minimum_buffer_size;
335+
336+ // need to rewrite this area
337+
338+ /* auto spac = std::make_unique<sf::Packet>();
339+ *spac << static_cast <MessageID>(OnPadBufferPlayer);
340+ *spac << local_player->buffer;
341+ SendAsync(std::move(spac)); */
342+
343+ m_dialog->OnPlayerPadBufferChanged (m_local_player->buffer );
344+ }
345+
346+ void NetPlayClient::AdjustMinimumPadBufferSize (const unsigned int size)
347+ {
348+ m_minimum_buffer_size = size;
349+ m_dialog->OnMinimumPadBufferChanged (size);
350+ }
351+
325352static void ReceiveSyncIdentifier (sf::Packet& spac, SyncIdentifier& sync_identifier)
326353{
327354 // We use a temporary variable here due to a potential long vs long long mismatch
@@ -400,8 +427,12 @@ void NetPlayClient::OnData(sf::Packet& packet)
400427 OnWiimoteData (packet);
401428 break ;
402429
403- case MessageID::PadBuffer:
404- OnPadBuffer (packet);
430+ case MessageID::PadBufferMinimum:
431+ OnPadBufferMinimum (packet);
432+ break ;
433+
434+ case MessageID::PadBufferPlayer:
435+ OnPadBufferPlayer (packet);
405436 break ;
406437
407438 case MessageID::HostInputAuthority:
@@ -751,13 +782,28 @@ void NetPlayClient::OnWiimoteData(sf::Packet& packet)
751782 }
752783}
753784
754- void NetPlayClient::OnPadBuffer (sf::Packet& packet)
785+ void NetPlayClient::OnPadBufferMinimum (sf::Packet& packet)
755786{
756787 u32 size = 0 ;
757788 packet >> size;
789+
790+ m_minimum_buffer_size = size;
791+ m_dialog->OnMinimumPadBufferChanged (size);
758792
759- m_target_buffer_size = size;
760- m_dialog->OnPadBufferChanged (size);
793+ if (m_local_player->buffer < m_minimum_buffer_size)
794+ AdjustPlayerPadBufferSize (m_minimum_buffer_size);
795+ }
796+
797+
798+ void NetPlayClient::OnPadBufferPlayer (sf::Packet& packet)
799+ {
800+ PlayerId pid;
801+ packet >> pid;
802+
803+ {
804+ std::lock_guard<std::recursive_mutex> lkp (m_crit.players );
805+ packet >> m_players[pid].buffer ;
806+ }
761807}
762808
763809void NetPlayClient::OnHostInputAuthority (sf::Packet& packet)
@@ -2084,7 +2130,7 @@ bool NetPlayClient::GetNetPads(const int pad_nb, const bool batching, GCPadStatu
20842130 // we toggle the emulation speed too quickly, so to prevent this
20852131 // we wait until the buffer has been over for at least 1 second.
20862132
2087- const bool buffer_over_target = m_pad_buffer[pad_nb].Size () > m_target_buffer_size + 1 ;
2133+ const bool buffer_over_target = m_pad_buffer[pad_nb].Size () > m_minimum_buffer_size + 1 ;
20882134 if (!buffer_over_target)
20892135 m_buffer_under_target_last = std::chrono::steady_clock::now ();
20902136
@@ -2214,7 +2260,7 @@ bool NetPlayClient::PollLocalPad(const int local_pad, sf::Packet& packet)
22142260 {
22152261 // adjust the buffer either up or down
22162262 // inserting multiple padstates or dropping states
2217- while (m_pad_buffer[ingame_pad].Size () <= m_target_buffer_size )
2263+ while (m_pad_buffer[ingame_pad].Size () <= m_minimum_buffer_size )
22182264 {
22192265 // add to buffer
22202266 m_pad_buffer[ingame_pad].Push (pad_status);
@@ -2237,7 +2283,7 @@ bool NetPlayClient::AddLocalWiimoteToBuffer(const int local_wiimote,
22372283
22382284 // adjust the buffer either up or down
22392285 // inserting multiple padstates or dropping states
2240- while (m_wiimote_buffer[ingame_pad].Size () <= m_target_buffer_size )
2286+ while (m_wiimote_buffer[ingame_pad].Size () <= m_minimum_buffer_size )
22412287 {
22422288 // add to buffer
22432289 m_wiimote_buffer[ingame_pad].Push (state);
@@ -2636,12 +2682,6 @@ const PadMappingArray& NetPlayClient::GetWiimoteMapping() const
26362682 return m_wiimote_map;
26372683}
26382684
2639- void NetPlayClient::AdjustPadBufferSize (const unsigned int size)
2640- {
2641- m_target_buffer_size = size;
2642- m_dialog->OnPadBufferChanged (size);
2643- }
2644-
26452685void NetPlayClient::SetWiiSyncData (std::unique_ptr<IOS::HLE::FS::FileSystem> fs,
26462686 std::vector<u64 > titles, std::string redirect_folder)
26472687{
0 commit comments