source-engine/tracker/common/msgbuffer.h

108 lines
2.7 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= 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