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
5 years ago
|
//========= 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
|