summaryrefslogtreecommitdiff
path: root/engine/networkstringtable.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /engine/networkstringtable.h
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'engine/networkstringtable.h')
-rw-r--r--engine/networkstringtable.h212
1 files changed, 212 insertions, 0 deletions
diff --git a/engine/networkstringtable.h b/engine/networkstringtable.h
new file mode 100644
index 0000000..46b9775
--- /dev/null
+++ b/engine/networkstringtable.h
@@ -0,0 +1,212 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+#ifndef NETWORKSTRINGTABLE_H
+#define NETWORKSTRINGTABLE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "networkstringtabledefs.h"
+#include "networkstringtableitem.h"
+
+#include <utldict.h>
+#include <utlbuffer.h>
+#include "tier1/bitbuf.h"
+
+class SVC_CreateStringTable;
+class CBaseClient;
+
+abstract_class INetworkStringDict
+{
+public:
+ virtual ~INetworkStringDict() {}
+
+ virtual unsigned int Count() = 0;
+ virtual void Purge() = 0;
+ virtual const char *String( int index ) = 0;
+ virtual bool IsValidIndex( int index ) = 0;
+ virtual int Insert( const char *pString ) = 0;
+ virtual int Find( const char *pString ) = 0;
+ virtual CNetworkStringTableItem &Element( int index ) = 0;
+ virtual const CNetworkStringTableItem &Element( int index ) const = 0;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Client/Server shared string table definition
+//-----------------------------------------------------------------------------
+class CNetworkStringTable : public INetworkStringTable
+{
+public:
+ // Construction
+ CNetworkStringTable( TABLEID id, const char *tableName, int maxentries, int userdatafixedsize, int userdatanetworkbits, bool bIsFilenames );
+ virtual ~CNetworkStringTable( void );
+
+public:
+ // INetworkStringTable interface:
+
+ const char *GetTableName( void ) const;
+ TABLEID GetTableId( void ) const;
+ int GetNumStrings( void ) const;
+ int GetMaxStrings( void ) const;
+ int GetEntryBits( void ) const;
+
+ // Networking
+ void SetTick( int tick );
+ bool ChangedSinceTick( int tick ) const;
+
+ int AddString( bool bIsServer, const char *value, int length = -1, const void *userdata = NULL );
+ const char *GetString( int stringNumber );
+
+ void SetStringUserData( int stringNumber, int length, const void *userdata );
+ const void *GetStringUserData( int stringNumber, int *length );
+ int FindStringIndex( char const *string );
+
+ void SetStringChangedCallback( void *object, pfnStringChanged changeFunc );
+
+ bool HasFileNameStrings() const;
+ bool IsUserDataFixedSize() const;
+ int GetUserDataSizeBits() const;
+ int GetUserDataSize() const;
+
+public:
+
+#ifndef SHARED_NET_STRING_TABLES
+ int WriteUpdate( CBaseClient *client, bf_write &buf, int tick_ack );
+ void ParseUpdate( bf_read &buf, int entries );
+
+ // HLTV change history & rollback
+ void EnableRollback();
+ void RestoreTick(int tick);
+
+ // local backdoor tables
+ void SetMirrorTable( INetworkStringTable *table );
+ void UpdateMirrorTable( int tick_ack );
+ void CopyStringTable(CNetworkStringTable * table);
+ // buffer IO
+ void WriteStringTable( bf_write& buf );
+ bool ReadStringTable( bf_read& buf );
+
+ bool WriteBaselines( SVC_CreateStringTable &msg, char *msg_buffer, int msg_buffer_size );
+#endif
+
+ void TriggerCallbacks( int tick_ack );
+
+ CNetworkStringTableItem *GetItem( int i );
+
+ // debug ouptput
+ virtual void Dump( void );
+ virtual void Lock( bool bLock );
+
+ void SetAllowClientSideAddString( bool state );
+ pfnStringChanged GetCallback();
+
+protected:
+ void DataChanged( int stringNumber, CNetworkStringTableItem *item );
+
+ // Destroy string table
+ void DeleteAllStrings( void );
+
+ CNetworkStringTable( const CNetworkStringTable & ); // not implemented, not allowed
+
+ TABLEID m_id;
+ char *m_pszTableName;
+ // Must be a power of 2, so encoding can determine # of bits to use based on log2
+ int m_nMaxEntries;
+ int m_nEntryBits;
+ int m_nTickCount;
+ int m_nLastChangedTick;
+
+ bool m_bChangeHistoryEnabled : 1;
+ bool m_bLocked : 1;
+ bool m_bAllowClientSideAddString : 1;
+ bool m_bUserDataFixedSize : 1;
+ bool m_bIsFilenames : 1;
+
+ int m_nUserDataSize;
+ int m_nUserDataSizeBits;
+
+ // Change function callback
+ pfnStringChanged m_changeFunc;
+ // Optional context/object
+ void *m_pObject;
+
+ // pointer to local backdoor table
+ INetworkStringTable *m_pMirrorTable;
+
+ INetworkStringDict *m_pItems;
+ INetworkStringDict *m_pItemsClientSide; // For m_bAllowClientSideAddString, these items are non-networked and are referenced by a negative string index!!!
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Implements game .dll string table interface
+//-----------------------------------------------------------------------------
+class CNetworkStringTableContainer : public INetworkStringTableContainer
+{
+public:
+ // Construction
+ CNetworkStringTableContainer( void );
+ ~CNetworkStringTableContainer( void );
+
+public:
+
+ // Implement INetworkStringTableContainer
+ INetworkStringTable *CreateStringTable( const char *tableName, int maxentries, int userdatafixedsize = 0, int userdatanetworkbits = 0 ) { return CreateStringTableEx( tableName, maxentries, userdatafixedsize, userdatanetworkbits, false ); }
+ INetworkStringTable *CreateStringTableEx( const char *tableName, int maxentries, int userdatafixedsize = 0, int userdatanetworkbits = 0, bool bIsFilenames = false );
+ void RemoveAllTables( void );
+
+ // table infos
+ INetworkStringTable *FindTable( const char *tableName ) const ;
+ INetworkStringTable *GetTable( TABLEID stringTable ) const;
+ int GetNumTables( void ) const;
+
+ virtual void SetAllowClientSideAddString( INetworkStringTable *table, bool bAllowClientSideAddString );
+
+public:
+
+ // Update a client (called once during packet sending per client)
+ void SetTick( int tick_count);
+
+#ifndef SHARED_NET_STRING_TABLES
+ // rollback feature
+ void EnableRollback( bool bState );
+ void RestoreTick( int tick );
+
+ // Buffer I/O
+ void WriteStringTables( bf_write& buf );
+ bool ReadStringTables( bf_read& buf );
+
+ void WriteUpdateMessage( CBaseClient *client, int tick_ack, bf_write &buf );
+ void WriteBaselines( bf_write &buf );
+ void DirectUpdate( int tick_ack ); // fill mirror table directly with updates
+#endif
+
+ void TriggerCallbacks( int tick_ack ); // fire callback functions
+
+
+
+ // Guards so game .dll can't create tables at the wrong time
+ void AllowCreation( bool state );
+
+
+
+ // Print table data to console
+ void Dump( void );
+ // Sets the lock and returns the previous lock state
+ bool Lock( bool bLock );
+
+ void SetAllowClientSideAddString( bool state );
+
+private:
+ bool m_bAllowCreation; // creat guard Guard
+ int m_nTickCount; // current tick
+ bool m_bLocked; // currently locked?
+ bool m_bEnableRollback; // enables rollback feature
+
+ CUtlVector < CNetworkStringTable* > m_Tables; // the string tables
+};
+
+#endif // NETWORKSTRINGTABLE_H