From 45b223f8b98668c0cb2ae774d653f41c1563372a Mon Sep 17 00:00:00 2001 From: GAMMACASE Date: Wed, 3 May 2023 02:21:57 +0300 Subject: [PATCH] Add INetworkMessages interface --- public/engine/igameeventsystem.h | 26 +++--- public/filesystem.h | 2 +- public/networksystem/inetworkmessages.h | 114 ++++++++++++++++++++++++ 3 files changed, 125 insertions(+), 17 deletions(-) create mode 100644 public/networksystem/inetworkmessages.h diff --git a/public/engine/igameeventsystem.h b/public/engine/igameeventsystem.h index 2dead8e2..739f385e 100644 --- a/public/engine/igameeventsystem.h +++ b/public/engine/igameeventsystem.h @@ -8,17 +8,11 @@ #include #include +#include #include -class IRecipientFilter; class CUtlSlot; -namespace google { - namespace protobuf { - class Message; - } -} - struct GameEventHandle_t__ { void *m_pUnknown; @@ -35,22 +29,22 @@ abstract_class IGameEventSystem : public IAppSystem { public: virtual void RegisterGameEvent( GameEventHandle_t__ *pEvent ) = 0; - virtual void RegisterGameEventHandlerAbstract( CUtlSlot *slot, const CUtlAbstractDelegate &delegate, - GameEventHandle_t__ *pEvent, int ) = 0; - virtual void UnregisterGameEventHandlerAbstract( CUtlSlot *slot, const CUtlAbstractDelegate &delegate, - GameEventHandle_t__ *pEvent ) = 0; - virtual void PostEventAbstract_Local( CSplitScreenSlot slot, GameEventHandle_t__ *, const void *pData, - unsigned long nSize ) = 0; + + virtual void RegisterGameEventHandlerAbstract( CUtlSlot *slot, const CUtlAbstractDelegate &delegate, GameEventHandle_t__ *pEvent, int ) = 0; + virtual void UnregisterGameEventHandlerAbstract( CUtlSlot *slot, const CUtlAbstractDelegate &delegate, GameEventHandle_t__ *pEvent ) = 0; + + virtual void PostEventAbstract_Local( CSplitScreenSlot slot, GameEventHandle_t__ *, const void *pData, unsigned long nSize ) = 0; + virtual void PostEventAbstract( CSplitScreenSlot slot, bool bLocalOnly, int nClientCount, const unsigned char *clients, GameEventHandle_t__ *pEvent, const void *pData, unsigned long nSize, NetChannelBufType_t bufType ) = 0; virtual void PostEventAbstract( CSplitScreenSlot slot, bool bLocalOnly, IRecipientFilter *pFilter, GameEventHandle_t__ *pEvent, const void *pData, unsigned long nSize ) = 0; - virtual void PostEntityEventAbstract( const CBaseHandle &hndl, GameEventHandle_t__ *pEvent, const void *pData, - unsigned long nSize, NetChannelBufType_t bufType ) = 0; + + virtual void PostEntityEventAbstract( const CBaseHandle &hndl, GameEventHandle_t__ *pEvent, const void *pData, unsigned long nSize, NetChannelBufType_t bufType ) = 0; + virtual void ProcessQueuedEvents( void ) = 0; virtual int GetEventSource( void ) const = 0; virtual void PurgeQueuedEvents( void ) = 0; }; - #endif // GAMEEVENTSYSTEM_H \ No newline at end of file diff --git a/public/filesystem.h b/public/filesystem.h index 2314d73b..c946693e 100644 --- a/public/filesystem.h +++ b/public/filesystem.h @@ -523,7 +523,7 @@ public: virtual bool GetWritePath(const char*, const char*, CBufferString *) = 0; // Returns the nSearchPathsToGet amount of paths, each path is separated by ;s. Returns true if pathID has any paths - virtual bool GetSearchPath( const char *pathID, GetSearchPathTypes_t pathType, CBufferString *pPath, int nSearchPathsToGet ) = 0; + virtual bool GetSearchPath( const char *pathID, GetSearchPathTypes_t pathType, CBufferString *pPath, int nSearchPathsToGet ) = 0; virtual void unk003() = 0; virtual void unk004() = 0; diff --git a/public/networksystem/inetworkmessages.h b/public/networksystem/inetworkmessages.h new file mode 100644 index 00000000..6c6d3f86 --- /dev/null +++ b/public/networksystem/inetworkmessages.h @@ -0,0 +1,114 @@ +#ifndef NETWORKMESSAGES_H +#define NETWORKMESSAGES_H + +#ifdef _WIN32 +#pragma once +#endif + +#include +#include +#include +#include +#include + +struct NetMessageHandle_t__; +class CSchemaClassBindingBase; +class INetworkSerializerBindingBuildFilter; +class IProtobufBinding; +enum NetworkSerializationMode_t; +struct NetworkableDataType_t; +struct NetworkFieldResult_t; +struct NetworkSerializerInfo_t; +struct NetworkUnserializerInfo_t; +struct NetworkableData_t; +struct NetworkFieldInfo_t; +struct FieldMetaInfo_t; +struct NetworkFieldChangedDelegateType_t; +struct NetworkFieldChangeCallbackPerformType_t; +class CSchemaType; + +typedef NetworkFieldResult_t ( *NetworkFieldSerializeCB )(NetworkSerializerInfo_t const&, int, NetworkableData_t *); +typedef NetworkFieldResult_t ( *NetworkFieldUnserializeCB )(NetworkUnserializerInfo_t const&, int, NetworkableData_t *); + +typedef NetworkFieldResult_t ( *NetworkFieldSerializeBufferCB )(NetworkSerializerInfo_t const&, bf_write &, int *, void const **, bool); +typedef NetworkFieldResult_t ( *NetworkFieldUnserializeBufferCB )(NetworkUnserializerInfo_t const&, bf_read &, int *, void **, bool, CSchemaClassBindingBase const*); + +typedef uint ( *NetworkFieldInfoCB )(NetworkFieldInfo_t const&); +typedef bool ( *NetworkFieldMetaInfoCB )(FieldMetaInfo_t const&, CSchemaClassBindingBase const*, NetworkFieldInfo_t const&, void *); +typedef bool ( *NetworkableDataCB )(NetworkableData_t const*, CUtlString &); +typedef char const* ( *NetworkUnkCB001 )(void); + +#define NETWORKMESSAGES_INTERFACE_VERSION "NetworkMessagesVersion001" + +abstract_class INetworkMessages +{ +public: + virtual void RegisterNetworkCategory(uint, char const *) = 0; + + virtual void AssociateNetMessageWithChannelCategoryAbstract(NetMessageHandle_t__ *, uint, bool) = 0; + + // virtual void FindOrCreateNetMessageSchema(int, CSchemaClassBindingBase const*, INetworkSerializerBindingBuildFilter *, bool, bool) = 0; + virtual void FindOrCreateNetMessage(int, IProtobufBinding const*, uint, INetworkSerializerBindingBuildFilter *, bool, bool) = 0; + + virtual void SerializeAbstract(bf_write &, NetMessageHandle_t__ *, void const *) = 0; + + virtual void UnserializeAbstract(bf_read &, NetMessageHandle_t__ **, void **) = 0; + virtual void UnserializeAbstract(bf_read &, NetMessageHandle_t__ *, void *) = 0; + + virtual void AllocateNetMessageAbstract(NetMessageHandle_t__ *) = 0; + virtual void AllocateAndCopyConstructNetMessageAbstract(NetMessageHandle_t__ *, void const *) = 0; + + virtual void DeallocateNetMessageAbstract(NetMessageHandle_t__ *, void *) = 0; + + virtual void RegisterNetworkFieldSerializer(char const *, NetworkSerializationMode_t, NetworkableDataType_t, int, NetworkFieldSerializeCB, NetworkFieldUnserializeCB, NetworkFieldInfoCB, + NetworkFieldMetaInfoCB, NetworkableDataCB, NetworkUnkCB001, NetworkFieldSerializeCB, NetworkFieldUnserializeCB) = 0; + virtual void RegisterNetworkArrayFieldSerializer(char const *, NetworkSerializationMode_t, NetworkFieldSerializeBufferCB, NetworkFieldUnserializeBufferCB, NetworkFieldInfoCB, + NetworkFieldMetaInfoCB, NetworkFieldSerializeBufferCB, NetworkFieldUnserializeBufferCB) = 0; + + virtual void GetNetMessageInfo(NetMessageHandle_t__ *) = 0; + + virtual NetMessageHandle_t__* FindNetworkMessage(char const *) = 0; + virtual NetMessageHandle_t__* FindNetworkMessagePartial(char const *) = 0; + + virtual void FindNetworkGroup(char const *, bool) = 0; + virtual void GetNetworkGroupCount(void) = 0; + virtual void GetNetworkGroupName(int) = 0; + + virtual void unk001() = 0; + + virtual void AssociateNetMessageGroupIdWithChannelCategory(uint, char const *) = 0; + + virtual void RegisterSchemaAtomicTypeOverride(uint, CSchemaType *) = 0; + + virtual void SetNextworkSerializationContextData(char const *, NetworkSerializationMode_t, void *) = 0; + + virtual void unk002() = 0; + virtual void unk003() = 0; + + virtual void RegisterNetworkFieldChangeCallbackInternal(char const *, NetworkFieldChangedDelegateType_t, CUtlAbstractDelegate, NetworkFieldChangeCallbackPerformType_t, int) = 0; + + virtual void AllowAdditionalMessageRegistration(bool bAllow) = 0; + virtual bool IsAdditionalMessageRegistrationAllowed() = 0; + + virtual void GetFieldChangeCallbackOrderCount(void) = 0; + virtual void GetFieldChangeCallbackPriorities(int, int *) = 0; + + virtual void RegisterFieldChangeCallbackPriority(int) = 0; + + virtual NetMessageHandle_t__ *FindNetworkMessageById(int) = 0; + + virtual void SetIsForServer(bool bForServer) = 0; + virtual bool IsForServer() = 0; + + virtual void RegisterSchemaTypeOverride(uint, char const *) = 0; + + virtual int ComputeOrderForPriority(int nPriority) = 0; + + virtual CLoggingSystem::LoggingChannel_t *GetLoggingChannel() = 0; + + virtual ~INetworkMessages() = 0; +}; + +DECLARE_TIER2_INTERFACE(INetworkMessages, g_pNetworkMessages); + +#endif /* NETWORKMESSAGES_H */ \ No newline at end of file