networking fixes

This commit is contained in:
2026-03-08 18:57:00 +02:00
parent 1a2a353e03
commit 321a2f31a9
13 changed files with 130 additions and 19 deletions

View File

@@ -37,6 +37,11 @@ public:
CUtlVector<HSteamNetPollGroup> m_hConnections;
CUtlVector<NetPacket_t> m_incomingPackets = {};
CUtlVector<SteamNetworkingMessage_t*> m_incomingSteamPackets = {};
CUtlVector<SteamNetworkingMessage_t*> m_freeSteamPackets = {};
CUtlLock m_lock;
STEAM_GAMESERVER_CALLBACK(CSteamNetworkServer, ClientConnected, SteamNetConnectionStatusChangedCallback_t);
STEAM_GAMESERVER_CALLBACK(CSteamNetworkServer, SteamNetAuthenticated, SteamNetAuthenticationStatus_t);
};
@@ -56,6 +61,31 @@ CSteamNetworkServer::~CSteamNetworkServer()
void CSteamNetworkServer::NetThink()
{
int nReceived = 1;
for ( auto p: m_freeSteamPackets )
{
p->Release();
}
m_freeSteamPackets = {};
for ( auto &hC: m_hConnections)
{
nReceived = 1;
while (nReceived)
{
SteamNetworkingMessage_t *pMessages[64];
nReceived = m_pInterface->ReceiveMessagesOnConnection(hC, pMessages, 64);
for ( int i = 0; i < nReceived; i++ )
{
m_incomingSteamPackets.AppendTail(pMessages[i]);
NetPacket_t packet = {};
packet.m_uOwner = pMessages[i]->GetConnection();
packet.uSize = pMessages[i]->GetSize();
packet.pData = (void*)pMessages[i]->GetData();
m_incomingPackets.AppendTail(packet);
}
}
}
}
void CSteamNetworkServer::SetCallback( NetCallbackFn fnCallback )
@@ -66,16 +96,30 @@ void CSteamNetworkServer::SetCallback( NetCallbackFn fnCallback )
uint32_t CSteamNetworkServer::BHasUpdates()
{
return 0;
return m_incomingPackets.GetSize();
}
NetPacket_t CSteamNetworkServer::PeekPacket()
{
m_lock.Lock();
if (!BHasUpdates())
return {};
NetPacket_t p = m_incomingPackets[0];
m_lock.Unlock();
return p;
}
NetPacket_t CSteamNetworkServer::RecievePacket()
{
m_lock.Lock();
if (!BHasUpdates())
return {};
NetPacket_t p = m_incomingPackets[0];
m_freeSteamPackets.AppendTail(m_incomingSteamPackets[0]);
m_incomingSteamPackets.RemoveHead(1);
m_incomingPackets.RemoveHead(1);
m_lock.Unlock();
return p;
}
@@ -281,7 +325,12 @@ NetPacket_t CSteamNetworkClient::RecievePacket()
void CSteamNetworkClient::SendPacket( NetPacket_t stPacket )
{
if (stPacket.m_eArrival == PACKET_MAY_ARRIVE)
{
m_pInterface->SendMessageToConnection(m_hConnection, stPacket.pData, stPacket.uSize, k_nSteamNetworkingSend_Unreliable, 0);
}
if (stPacket.m_eArrival == PACKET_MUST_ARRIVE)
m_pInterface->SendMessageToConnection(m_hConnection, stPacket.pData, stPacket.uSize, k_nSteamNetworkingSend_Reliable, 0);
}
bool CSteamNetworkClient::BIsActive()