blob: 152512efa4d38228c8832b5ecf3e8a2ed261aa64 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: INetworkMessage interface
//
// $NoKeywords: $
//===========================================================================//
#ifndef INETWORKMESSAGE_H
#define INETWORKMESSAGE_H
#ifdef _WIN32
#pragma once
#endif
#include "tier0/platform.h"
#include "tier0/dbg.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class bf_read;
class bf_write;
class INetMsgHandler;
class INetMessage;
class INetChannel;
//-----------------------------------------------------------------------------
// First valid group number users of the network system can use
//-----------------------------------------------------------------------------
enum
{
NETWORKSYSTEM_FIRST_GROUP = 1,
};
//-----------------------------------------------------------------------------
// A network message
//-----------------------------------------------------------------------------
abstract_class INetworkMessage
{
public:
// Use these to setup who can hear whose voice.
// Pass in client indices (which are their ent indices - 1).
virtual void SetNetChannel(INetChannel * netchan) = 0; // netchannel this message is from/for
virtual void SetReliable( bool state ) = 0; // set to true if it's a reliable message
virtual bool ReadFromBuffer( bf_read &buffer ) = 0; // returns true if parsing was OK
virtual bool WriteToBuffer( bf_write &buffer ) = 0; // returns true if writing was OK
virtual bool IsReliable( void ) const = 0; // true, if message needs reliable handling
virtual int GetGroup( void ) const = 0; // returns net message group of this message
virtual int GetType( void ) const = 0; // returns module specific header tag eg svc_serverinfo
virtual const char *GetGroupName( void ) const = 0; // returns network message group name
virtual const char *GetName( void ) const = 0; // returns network message name, eg "svc_serverinfo"
virtual INetChannel *GetNetChannel( void ) const = 0;
virtual const char *ToString( void ) const = 0; // returns a human readable string about message content
virtual void Release() = 0;
protected:
virtual ~INetworkMessage() {};
};
//-----------------------------------------------------------------------------
// Helper utilities for clients to create messages
//-----------------------------------------------------------------------------
#define DECLARE_BASE_MESSAGE( group, msgtype, description ) \
public: \
virtual bool ReadFromBuffer( bf_read &buffer ); \
virtual bool WriteToBuffer( bf_write &buffer ); \
virtual const char *ToString() const { return description; } \
virtual int GetGroup() const { return group; } \
virtual const char *GetGroupName( void ) const { return #group; } \
virtual int GetType() const { return msgtype; } \
virtual const char *GetName() const { return #msgtype;}\
//-----------------------------------------------------------------------------
// Default empty base class for net messages
//-----------------------------------------------------------------------------
class CNetworkMessage : public INetworkMessage
{
public:
CNetworkMessage()
{
m_bReliable = true;
m_pNetChannel = NULL;
}
virtual void Release()
{
delete this;
}
virtual ~CNetworkMessage() {};
virtual void SetReliable( bool state )
{
m_bReliable = state;
}
virtual bool IsReliable() const
{
return m_bReliable;
}
virtual void SetNetChannel(INetChannel * netchan)
{
m_pNetChannel = netchan;
}
virtual bool Process()
{
// no handler set
Assert( 0 );
return false;
}
INetChannel *GetNetChannel() const
{
return m_pNetChannel;
}
protected:
bool m_bReliable; // true if message should be send reliable
INetChannel *m_pNetChannel; // netchannel this message is from/for
};
#endif // INETWORKMESSAGE_H
|