networking fixes
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user