steam relay networking

This commit is contained in:
2026-03-01 23:06:28 +02:00
parent 03c560c2b7
commit 468d765aa1
16 changed files with 628 additions and 101 deletions

View File

@@ -12,13 +12,16 @@ public:
virtual ~CLocalNetworkServer() override;
virtual void NetThink() override;
virtual void SetCallback( NetCallbackFn fnCallback ) override;
virtual uint32_t BHasUpdates() override;
virtual NetPacket_t RecievePacket() override;
virtual NetPacket_t PeekPacket() override;
virtual NetPacket_t PeekPacket() override;
virtual void SendPacket( NetPacket_t stPacket ) override;
virtual bool BIsActive() override;
virtual uint64_t GetSteamID() override;
virtual const char *GetIP() override;
virtual uint16_t GetPort() override;
@@ -27,6 +30,7 @@ public:
CUtlVector<NetPacket_t> m_packets;
CUtlVector<NetPacket_t> m_clientPackets;
CUtlVector<void*> m_freedPackets;
NetCallbackFn m_fnCallback;
const uint16_t m_uPort;
};
@@ -41,16 +45,18 @@ CLocalNetworkServer::~CLocalNetworkServer()
}
void CLocalNetworkServer::SetCallback( NetCallbackFn fnCallback )
{
m_fnCallback = fnCallback;
}
void CLocalNetworkServer::NetThink()
{
m_lock.Lock();
for ( auto p: m_freedPackets)
{
V_free(p);
}
m_freedPackets = {};
m_lock.Unlock();
}
@@ -61,23 +67,19 @@ uint32_t CLocalNetworkServer::BHasUpdates()
NetPacket_t CLocalNetworkServer::RecievePacket()
{
m_lock.Lock();
if (!BHasUpdates())
return {};
NetPacket_t p = m_clientPackets[0];
m_clientPackets.RemoveHead(1);
m_freedPackets.AppendTail(p.pData);
m_lock.Unlock();
return p;
}
NetPacket_t CLocalNetworkServer::PeekPacket()
{
m_lock.Lock();
if (!BHasUpdates())
return {};
NetPacket_t p = m_clientPackets[0];
m_lock.Unlock();
return p;
}
@@ -86,14 +88,17 @@ void CLocalNetworkServer::SendPacket( NetPacket_t stPacket )
{
NetPacket_t stSavedPacked;
stSavedPacked.uSize = stPacket.uSize;
stSavedPacked.m_uOwner = 0;
stSavedPacked.pData = V_malloc(stPacket.uSize);
V_memcpy(stSavedPacked.pData, stPacket.pData, stPacket.uSize);
m_lock.Lock();
m_packets.AppendTail(stSavedPacked);
m_lock.Unlock();
}
bool CLocalNetworkServer::BIsActive()
{
return true;
}
uint64_t CLocalNetworkServer::GetSteamID()
{
@@ -117,12 +122,15 @@ public:
virtual ~CLocalNetworkClient() override;
virtual void NetThink() override;
virtual void SetCallback( NetCallbackFn fnCallback ) override;
virtual uint32_t BHasUpdates() override;
virtual NetPacket_t RecievePacket() override;
virtual NetPacket_t PeekPacket() override;
virtual void SendPacket( NetPacket_t stPacket ) override;
virtual bool BIsActive() override;
virtual uint64_t GetSteamID() override;
virtual const char *GetIP() override;
@@ -131,6 +139,11 @@ public:
CLocalNetworkServer *m_pServer;
};
bool CLocalNetworkClient::BIsActive()
{
return true;
}
CLocalNetworkClient::CLocalNetworkClient( uint16_t uPort )
{
m_pServer = s_pLocalServers[uPort];
@@ -154,23 +167,19 @@ uint32_t CLocalNetworkClient::BHasUpdates()
NetPacket_t CLocalNetworkClient::RecievePacket()
{
m_pServer->m_lock.Lock();
if (!BHasUpdates())
return {};
NetPacket_t p = m_pServer->m_packets[0];
m_pServer->m_packets.RemoveHead(1);
m_pServer->m_freedPackets.AppendTail(p.pData);
m_pServer->m_lock.Unlock();
return p;
}
NetPacket_t CLocalNetworkClient::PeekPacket()
{
m_pServer->m_lock.Lock();
if (!BHasUpdates())
return {};
NetPacket_t p = m_pServer->m_packets[0];
m_pServer->m_lock.Unlock();
return p;
}
@@ -179,12 +188,15 @@ void CLocalNetworkClient::SendPacket( NetPacket_t stPacket )
{
NetPacket_t stSavedPacked;
stSavedPacked.uSize = stPacket.uSize;
stSavedPacked.m_uOwner = 0;
stSavedPacked.pData = V_malloc(stPacket.uSize);
V_memcpy(stSavedPacked.pData, stPacket.pData, stPacket.uSize);
m_pServer->m_lock.Lock();
m_pServer->m_clientPackets.AppendTail(stSavedPacked);
m_pServer->m_lock.Unlock();
}
void CLocalNetworkClient::SetCallback( NetCallbackFn fnCallback )
{
}