You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.7 KiB
108 lines
2.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//============================================================================= |
|
#if !defined( MSGBUFFER_H ) |
|
#define MSGBUFFER_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "netadr.h" |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Generic byte level message buffer with read/write support |
|
//----------------------------------------------------------------------------- |
|
class CMsgBuffer |
|
{ |
|
public: |
|
enum |
|
{ |
|
NET_MAXMESSAGE = 8192 |
|
}; |
|
|
|
// Buffers must be named |
|
CMsgBuffer( const char *buffername = "unnamed", void (*ef)( PRINTF_FORMAT_STRING const char *fmt, ... ) = 0 ); |
|
virtual ~CMsgBuffer( void ); |
|
|
|
// Reset the buffer for writing |
|
void Clear( void ); |
|
// Get current # of bytes |
|
int GetCurSize( void ); |
|
// Get max # of bytes |
|
int GetMaxSize( void ); |
|
// Get pointer to raw data |
|
void *GetData( void ); |
|
// Set/unset the allow overflow flag |
|
void SetOverflow( bool allowed ); |
|
// Start reading from buffer |
|
void BeginReading( void ); |
|
// Get current read byte |
|
int GetReadCount( void ); |
|
|
|
// Push read count ( to peek at data ) |
|
void Push( void ); |
|
void Pop( void ); |
|
|
|
// Writing functions |
|
void WriteByte(int c); |
|
void WriteShort(int c); |
|
void WriteLong(int c); |
|
void WriteFloat(float f); |
|
void WriteString(const char *s); |
|
void WriteBuf( int iSize, void *buf ); |
|
|
|
// Reading functions |
|
int ReadByte( void ); |
|
int ReadShort( void ); |
|
int ReadLong( void ); |
|
float ReadFloat( void ); |
|
char *ReadString( void ); |
|
int ReadBuf( int iSize, void *pbuf ); |
|
|
|
// setting and storing time received |
|
void SetTime(float time); |
|
float GetTime(); |
|
|
|
// net address received from |
|
void SetNetAddress(netadr_t &adr); |
|
netadr_t &GetNetAddress(); |
|
|
|
private: |
|
// Ensures sufficient space to append an object of length |
|
void *GetSpace( int length ); |
|
// Copy buffer in at current writing point |
|
void Write( const void *data, int length ); |
|
|
|
private: |
|
// Name of buffer in case of debugging/errors |
|
const char *m_pszBufferName; |
|
// Optional error callback |
|
void ( *m_pfnErrorFunc )( PRINTF_FORMAT_STRING const char *fmt, ... ); |
|
|
|
// Current read pointer |
|
int m_nReadCount; |
|
// Push/pop read state |
|
int m_nPushedCount; |
|
bool m_bPushed; |
|
// Did we hit the end of the read buffer? |
|
bool m_bBadRead; |
|
// Max size of buffer |
|
int m_nMaxSize; |
|
// Current bytes written |
|
int m_nCurSize; |
|
// if false, call m_pfnErrorFunc |
|
bool m_bAllowOverflow; |
|
// set to true when buffer hits end |
|
bool m_bOverFlowed; |
|
// Internal storage |
|
unsigned char m_rgData[ NET_MAXMESSAGE ]; |
|
// time received |
|
float m_fRecvTime; |
|
// address received from |
|
netadr_t m_NetAddr; |
|
}; |
|
|
|
#endif // !MSGBUFFER_H
|