//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $Workfile: $ // $Date: $ // //----------------------------------------------------------------------------- // $Log: $ // // $NoKeywords: $ //=============================================================================// #if !defined(INETMSGHANDLER_H) #define INETMSGHANDLER_H #ifdef _WIN32 #pragma once #endif class INetChannel; typedef struct netpacket_s netpacket_t; class INetChannelHandler { public: virtual ~INetChannelHandler(void){}; virtual void ConnectionStart( INetChannel *chan) = 0; // called first time network channel is established virtual void ConnectionClosing( const char *reason) = 0; // network channel is being closed by remote site virtual void ConnectionCrashed( const char *reason) = 0; // network error occured virtual void PacketStart( int incoming_sequence, int outgoing_acknowledged) = 0; // called each time a new packet // arrived virtual void PacketEnd(void) = 0; // all messages has been parsed virtual void FileRequested( const char *fileName, unsigned int transferID) = 0; // other side request a file for download virtual void FileReceived( const char *fileName, unsigned int transferID) = 0; // we received a file virtual void FileDenied( const char *fileName, unsigned int transferID) = 0; // a file request was denied by other side virtual void FileSent(const char *fileName, unsigned int transferID) = 0; // we sent a file }; #define PROCESS_NET_MESSAGE(name) virtual bool Process##name(NET_##name *msg) #define PROCESS_SVC_MESSAGE(name) virtual bool Process##name(SVC_##name *msg) #define PROCESS_CLC_MESSAGE(name) virtual bool Process##name(CLC_##name *msg) #define PROCESS_MM_MESSAGE(name) virtual bool Process##name(MM_##name *msg) #define REGISTER_NET_MSG(name) \ NET_##name *p##name = new NET_##name(); \ p##name->m_pMessageHandler = this; \ chan->RegisterMessage(p##name); #define REGISTER_SVC_MSG(name) \ SVC_##name *p##name = new SVC_##name(); \ p##name->m_pMessageHandler = this; \ chan->RegisterMessage(p##name); #define REGISTER_CLC_MSG(name) \ CLC_##name *p##name = new CLC_##name(); \ p##name->m_pMessageHandler = this; \ chan->RegisterMessage(p##name); #define REGISTER_MM_MSG(name) \ MM_##name *p##name = new MM_##name(); \ p##name->m_pMessageHandler = this; \ chan->RegisterMessage(p##name); class NET_Tick; class NET_StringCmd; class NET_SetConVar; class NET_SignonState; class INetMessageHandler { public: virtual ~INetMessageHandler(void){}; PROCESS_NET_MESSAGE(Tick) = 0; PROCESS_NET_MESSAGE(StringCmd) = 0; PROCESS_NET_MESSAGE(SetConVar) = 0; PROCESS_NET_MESSAGE(SignonState) = 0; }; class CLC_ClientInfo; class CLC_Move; class CLC_VoiceData; class CLC_BaselineAck; class CLC_ListenEvents; class CLC_RespondCvarValue; class CLC_FileCRCCheck; class CLC_FileMD5Check; class CLC_SaveReplay; class CLC_CmdKeyValues; class IClientMessageHandler : public INetMessageHandler { public: virtual ~IClientMessageHandler(void){}; PROCESS_CLC_MESSAGE(ClientInfo) = 0; PROCESS_CLC_MESSAGE(Move) = 0; PROCESS_CLC_MESSAGE(VoiceData) = 0; PROCESS_CLC_MESSAGE(BaselineAck) = 0; PROCESS_CLC_MESSAGE(ListenEvents) = 0; PROCESS_CLC_MESSAGE(RespondCvarValue) = 0; PROCESS_CLC_MESSAGE(FileCRCCheck) = 0; PROCESS_CLC_MESSAGE(FileMD5Check) = 0; #if defined(REPLAY_ENABLED) PROCESS_CLC_MESSAGE(SaveReplay) = 0; #endif PROCESS_CLC_MESSAGE(CmdKeyValues) = 0; }; class SVC_Print; class SVC_ServerInfo; class SVC_SendTable; class SVC_ClassInfo; class SVC_SetPause; class SVC_CreateStringTable; class SVC_UpdateStringTable; class SVC_VoiceInit; class SVC_VoiceData; class SVC_Sounds; class SVC_SetView; class SVC_FixAngle; class SVC_CrosshairAngle; class SVC_BSPDecal; class SVC_GameEvent; class SVC_UserMessage; class SVC_EntityMessage; class SVC_PacketEntities; class SVC_TempEntities; class SVC_Prefetch; class SVC_Menu; class SVC_GameEventList; class SVC_GetCvarValue; class SVC_CmdKeyValues; class IServerMessageHandler : public INetMessageHandler { public: virtual ~IServerMessageHandler(void){}; // Returns dem file protocol version, or, if not playing a demo, just // returns PROTOCOL_VERSION virtual int GetDemoProtocolVersion() const = 0; PROCESS_SVC_MESSAGE(Print) = 0; PROCESS_SVC_MESSAGE(ServerInfo) = 0; PROCESS_SVC_MESSAGE(SendTable) = 0; PROCESS_SVC_MESSAGE(ClassInfo) = 0; PROCESS_SVC_MESSAGE(SetPause) = 0; PROCESS_SVC_MESSAGE(CreateStringTable) = 0; PROCESS_SVC_MESSAGE(UpdateStringTable) = 0; PROCESS_SVC_MESSAGE(VoiceInit) = 0; PROCESS_SVC_MESSAGE(VoiceData) = 0; PROCESS_SVC_MESSAGE(Sounds) = 0; PROCESS_SVC_MESSAGE(SetView) = 0; PROCESS_SVC_MESSAGE(FixAngle) = 0; PROCESS_SVC_MESSAGE(CrosshairAngle) = 0; PROCESS_SVC_MESSAGE(BSPDecal) = 0; PROCESS_SVC_MESSAGE(GameEvent) = 0; PROCESS_SVC_MESSAGE(UserMessage) = 0; PROCESS_SVC_MESSAGE(EntityMessage) = 0; PROCESS_SVC_MESSAGE(PacketEntities) = 0; PROCESS_SVC_MESSAGE(TempEntities) = 0; PROCESS_SVC_MESSAGE(Prefetch) = 0; PROCESS_SVC_MESSAGE(Menu) = 0; PROCESS_SVC_MESSAGE(GameEventList) = 0; PROCESS_SVC_MESSAGE(GetCvarValue) = 0; PROCESS_SVC_MESSAGE(CmdKeyValues) = 0; }; class MM_Heartbeat; class MM_ClientInfo; class MM_JoinResponse; class MM_RegisterResponse; class MM_Migrate; class MM_Mutelist; class MM_Checkpoint; class IMatchmakingMessageHandler : public INetMessageHandler { public: virtual ~IMatchmakingMessageHandler(void){}; PROCESS_MM_MESSAGE(Heartbeat) = 0; PROCESS_MM_MESSAGE(ClientInfo) = 0; PROCESS_MM_MESSAGE(JoinResponse) = 0; PROCESS_MM_MESSAGE(RegisterResponse) = 0; PROCESS_MM_MESSAGE(Migrate) = 0; PROCESS_MM_MESSAGE(Mutelist) = 0; PROCESS_MM_MESSAGE(Checkpoint) = 0; }; class IConnectionlessPacketHandler { public: virtual ~IConnectionlessPacketHandler(void){}; virtual bool ProcessConnectionlessPacket( netpacket_t *packet) = 0; // process a connectionless packet }; #endif // INETMSGHANDLER_H