Skip to content

Commit cc47ff6

Browse files
authored
Fix implementation of per-player pad buffer
Fix implementation of per-player pad buffer
2 parents f3e5041 + 12bb551 commit cc47ff6

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

Source/Core/Core/NetPlayClient.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -334,14 +334,19 @@ void NetPlayClient::AdjustPlayerPadBufferSize(u32 buffer)
334334
m_local_player->buffer = buffer;
335335
if (m_local_player->buffer < m_minimum_buffer_size)
336336
m_local_player->buffer = m_minimum_buffer_size;
337-
338-
// need to rewrite this area
339-
340-
/* auto spac = std::make_unique<sf::Packet>();
341-
*spac << static_cast <MessageID>(OnPadBufferPlayer);
342-
*spac << local_player->buffer;
343-
SendAsync(std::move(spac)); */
344337

338+
339+
// not needed on clients with host input authority
340+
if (!m_host_input_authority)
341+
{
342+
// tell clients to change buffer size
343+
sf::Packet spac;
344+
spac << MessageID::PadBufferPlayer;
345+
spac << m_local_player->buffer;
346+
347+
SendAsync(std::move(spac));
348+
}
349+
345350
m_dialog->OnPlayerPadBufferChanged(m_local_player->buffer);
346351
}
347352

@@ -2263,7 +2268,7 @@ bool NetPlayClient::PollLocalPad(const int local_pad, sf::Packet& packet)
22632268
{
22642269
// adjust the buffer either up or down
22652270
// inserting multiple padstates or dropping states
2266-
while (m_pad_buffer[ingame_pad].Size() <= m_minimum_buffer_size)
2271+
while (m_pad_buffer[ingame_pad].Size() <= BufferSizeForPort(ingame_pad))
22672272
{
22682273
// add to buffer
22692274
m_pad_buffer[ingame_pad].Push(pad_status);

Source/Core/Core/NetPlayServer.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,7 @@ ConnectionError NetPlayServer::OnConnect(ENetPeer* incoming_connection, sf::Pack
454454
Client new_player{};
455455
new_player.pid = GiveFirstAvailableIDTo(incoming_connection);
456456
new_player.socket = incoming_connection;
457+
new_player.buffer = m_minimum_buffer_size;
457458

458459
received_packet >> new_player.revision;
459460
received_packet >> new_player.name;
@@ -499,6 +500,9 @@ ConnectionError NetPlayServer::OnConnect(ENetPeer* incoming_connection, sf::Pack
499500

500501
SendResponseToPlayer(new_player, MessageID::GameStatus, existing_player.pid,
501502
static_cast<u8>(existing_player.game_status));
503+
504+
SendResponseToPlayer(new_player, MessageID::PadBufferPlayer, existing_player.pid,
505+
static_cast<u8>(existing_player.buffer));
502506
}
503507

504508
if (Config::Get(Config::NETPLAY_ENABLE_QOS))
@@ -778,6 +782,22 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player)
778782
SendToClients(spac, player.pid);
779783
}
780784
break;
785+
786+
case MessageID::PadBufferPlayer:
787+
{
788+
u32 buffer;
789+
packet >> buffer;
790+
791+
player.buffer = buffer;
792+
793+
sf::Packet spac;
794+
spac << MessageID::PadBufferPlayer;
795+
spac << player.pid;
796+
spac << buffer;
797+
798+
SendToClients(spac, player.pid);
799+
}
800+
break;
781801

782802
case MessageID::ChunkedDataProgress:
783803
{

Source/Core/Core/NetPlayServer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class NetPlayServer : public Common::TraversalClientClient
9393
ENetPeer* socket = nullptr;
9494
u32 ping = 0;
9595
u32 current_game = 0;
96-
unsigned int m_player_buffer_size = 0;
96+
unsigned int buffer;
9797

9898
Common::QoSSession qos_session;
9999

0 commit comments

Comments
 (0)