engine: Implement message buffering. (#1071)
* Avoid losing console messages. Buffers up to 16k bytes of SVC_Print if buffer would overflow, then sends chunks every frame. Sends up to 2048 bytes per frame and does not split messages. * UNTESTED! Switch to ke::LinkedList<ke::AString> for PrintfBuffer. Switch from OnGameFrame to FramAction. Fix compiling on Episode1 by essentially disabling the feature. * UNTESTED! Cleanup on disconnect, passthrough for >= 2048 msgs * try reference for CPlayer. * fix * remove m_PrintfStop * remove m_PrintfStop * ensure empty queue when netchan drops * flip to serials. * serials * style * Update PlayerManager.cpp * lift consts to header. * remove local const references * ep1 static const * flip to queue - fix serial on resched. * Update PlayerManager.h * Update PlayerManager.cpp * Update PlayerManager.h * am-deque.h Co-authored-by: Kyle Sanderson <[email protected]>
This commit is contained in:
@@ -43,6 +43,7 @@
|
||||
#include <sh_list.h>
|
||||
#include <sh_vector.h>
|
||||
#include <am-string.h>
|
||||
#include <am-deque.h>
|
||||
#include "ConVarManager.h"
|
||||
|
||||
#include <steam/steamclientpublic.h>
|
||||
@@ -123,6 +124,7 @@ private:
|
||||
bool IsAuthStringValidated();
|
||||
bool SetEngineString();
|
||||
bool SetCSteamID();
|
||||
void ClearNetchannelQueue(void);
|
||||
private:
|
||||
bool m_IsConnected = false;
|
||||
bool m_IsInGame = false;
|
||||
@@ -152,6 +154,7 @@ private:
|
||||
#if SOURCE_ENGINE == SE_CSGO
|
||||
QueryCvarCookie_t m_LanguageCookie = InvalidQueryCvarCookie;
|
||||
#endif
|
||||
ke::Deque<ke::AString> m_PrintfBuffer;
|
||||
};
|
||||
|
||||
class PlayerManager :
|
||||
@@ -190,6 +193,8 @@ public:
|
||||
void OnClientSettingsChanged(edict_t *pEntity);
|
||||
//void OnClientSettingsChanged_Pre(edict_t *pEntity);
|
||||
void OnServerHibernationUpdate(bool bHibernating);
|
||||
void OnClientPrintf(edict_t *pEdict, const char *szMsg);
|
||||
void OnPrintfFrameAction(unsigned int serial);
|
||||
public: //IPlayerManager
|
||||
void AddClientListener(IClientListener *listener);
|
||||
void RemoveClientListener(IClientListener *listener);
|
||||
@@ -267,6 +272,9 @@ private:
|
||||
int m_SourceTVUserId;
|
||||
int m_ReplayUserId;
|
||||
bool m_bInCCKVHook;
|
||||
private:
|
||||
static const int NETMSG_TYPE_BITS = 5; // SVC_Print overhead for netmsg type
|
||||
static const int SVC_Print_BufferSize = 2048 - 1; // -1 for terminating \0
|
||||
};
|
||||
|
||||
#if SOURCE_ENGINE >= SE_ORANGEBOX
|
||||
|
||||
Reference in New Issue
Block a user