From 35de4a2c1501e6040325fa3e0aaf0b15fe15c083 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Fri, 29 Dec 2023 23:06:49 +0100 Subject: [PATCH] Server: add CServer::BroadcastMessage() Add CServer::BroadcastMessage and rename CServer::FrameJob parameter. --- r5dev/engine/server/server.cpp | 29 ++++++++++++++++++++--------- r5dev/engine/server/server.h | 13 +++++++++++-- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/r5dev/engine/server/server.cpp b/r5dev/engine/server/server.cpp index e34f3a86..fba24376 100644 --- a/r5dev/engine/server/server.cpp +++ b/r5dev/engine/server/server.cpp @@ -80,6 +80,17 @@ int CServer::GetNumClients(void) const return nClients; } +//--------------------------------------------------------------------------------- +// Purpose: Rejects connection request and sends back a message +// Input : iSocket - +// *pChallenge - +// *szMessage - +//--------------------------------------------------------------------------------- +void CServer::RejectConnection(int iSocket, netadr_t* pNetAdr, const char* szMessage) +{ + v_CServer_RejectConnection(this, iSocket, pNetAdr, szMessage); +} + //--------------------------------------------------------------------------------- // Purpose: Initializes a CSVClient for a new net connection. This will only be called // once for a player each game, not once for each level change. @@ -169,25 +180,25 @@ CClient* CServer::ConnectClient(CServer* pServer, user_creds_s* pChallenge) } //--------------------------------------------------------------------------------- -// Purpose: Rejects connection request and sends back a message -// Input : iSocket - -// *pChallenge - -// *szMessage - +// Purpose: Sends netmessage to all active clients +// Input : *msg - +// onlyActive - +// reliable - //--------------------------------------------------------------------------------- -void CServer::RejectConnection(int iSocket, netadr_t* pNetAdr, const char* szMessage) +void CServer::BroadcastMessage(CNetMessage* const msg, const bool onlyActive, const bool reliable) { - v_CServer_RejectConnection(this, iSocket, pNetAdr, szMessage); + v_CServer_BroadcastMessage(this, msg, onlyActive, reliable); } //--------------------------------------------------------------------------------- // Purpose: Runs the server frame job // Input : flFrameTime - // bRunOverlays - -// bUniformSnapshotInterval - +// bUpdateFrame - //--------------------------------------------------------------------------------- -void CServer::FrameJob(double flFrameTime, bool bRunOverlays, bool bUniformSnapshotInterval) +void CServer::FrameJob(double flFrameTime, bool bRunOverlays, bool bUpdateFrame) { - v_CServer_FrameJob(flFrameTime, bRunOverlays, bUniformSnapshotInterval); + v_CServer_FrameJob(flFrameTime, bRunOverlays, bUpdateFrame); } //--------------------------------------------------------------------------------- diff --git a/r5dev/engine/server/server.h b/r5dev/engine/server/server.h index 1055efeb..ddada952 100644 --- a/r5dev/engine/server/server.h +++ b/r5dev/engine/server/server.h @@ -56,8 +56,11 @@ public: void RejectConnection(int iSocket, netadr_t* pNetAdr, const char* szMessage); static CClient* ConnectClient(CServer* pServer, user_creds_s* pChallenge); + + void BroadcastMessage(CNetMessage* const msg, const bool onlyActive, const bool reliable); + void UpdateClientClocks(void); static void RunFrame(CServer* pServer); - static void FrameJob(double flFrameTime, bool bRunOverlays, bool bUniformSnapshotInterval); + static void FrameJob(double flFrameTime, bool bRunOverlays, bool bUpdateFrame); #endif // !CLIENT_DLL private: @@ -110,7 +113,7 @@ extern CServer* g_pServer; /* ==== CSERVER ========================================================================================================================================================= */ inline CMemory p_CServer_FrameJob; -inline void(*v_CServer_FrameJob)(double flFrameTime, bool bRunOverlays, bool bUniformSnapshotInterval); +inline void(*v_CServer_FrameJob)(double flFrameTime, bool bRunOverlays, bool bUpdateFrame); inline CMemory p_CServer_RunFrame; inline void(*v_CServer_RunFrame)(CServer* pServer); @@ -121,6 +124,9 @@ inline CClient*(*v_CServer_ConnectClient)(CServer* pServer, user_creds_s* pCreds inline CMemory p_CServer_RejectConnection; inline void*(*v_CServer_RejectConnection)(CServer* pServer, int iSocket, netadr_t* pNetAdr, const char* szMessage); +inline CMemory p_CServer_BroadcastMessage; +inline void (*v_CServer_BroadcastMessage)(CServer* pServer, CNetMessage* const msg, const bool onlyActive, const bool reliable); + /////////////////////////////////////////////////////////////////////////////// class VServer : public IDetour { @@ -131,6 +137,7 @@ class VServer : public IDetour LogFunAdr("CServer::RunFrame", p_CServer_RunFrame.GetPtr()); LogFunAdr("CServer::ConnectClient", p_CServer_ConnectClient.GetPtr()); LogFunAdr("CServer::RejectConnection", p_CServer_RejectConnection.GetPtr()); + LogFunAdr("CServer::BroadcastMessage", p_CServer_BroadcastMessage.GetPtr()); LogVarAdr("g_Server", reinterpret_cast<uintptr_t>(g_pServer)); #endif // !CLIENT_DLL } @@ -152,11 +159,13 @@ class VServer : public IDetour p_CServer_RunFrame = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 88 05 ?? ?? ?? ??").FollowNearCallSelf(); #endif p_CServer_RejectConnection = g_GameDll.FindPatternSIMD("4C 89 4C 24 ?? 53 55 56 57 48 81 EC ?? ?? ?? ?? 49 8B D9"); + p_CServer_BroadcastMessage = g_GameDll.FindPatternSIMD("4C 8B DC 45 88 43 18 56"); v_CServer_FrameJob = p_CServer_FrameJob.RCast<void (*)(double, bool, bool)>(); /*48 89 6C 24 ?? 56 41 54 41 56*/ v_CServer_RunFrame = p_CServer_RunFrame.RCast<void (*)(CServer*)>(); v_CServer_ConnectClient = p_CServer_ConnectClient.RCast<CClient* (*)(CServer*, user_creds_s*)>(); /*40 55 57 41 55 41 57 48 8D AC 24 ?? ?? ?? ??*/ v_CServer_RejectConnection = p_CServer_RejectConnection.RCast<void* (*)(CServer*, int, netadr_t*, const char*)>(); /*4C 89 4C 24 ?? 53 55 56 57 48 81 EC ?? ?? ?? ?? 49 8B D9*/ + v_CServer_BroadcastMessage = p_CServer_BroadcastMessage.RCast<void (*) (CServer*, CNetMessage* const, const bool, const bool)>(); #endif // !CLIENT_DLL } virtual void GetVar(void) const