1 #ifndef __BUFFEREDREADER_GM_H__ 2 #define __BUFFEREDREADER_GM_H__ 5 #include "ringbuffer.h" 7 #include "config_nativenet.h" 10 inline unsigned short GetUnsignedShort(
char * in)
12 return *((
unsigned short *)in);
18 inline bool GetMessageFromBuffer(
Datagram &inmsg);
21 inline void ReSet(
void);
27 template <
class SOCK_TYPE>
28 inline int PumpMessageReader(
Datagram &inmsg, SOCK_TYPE &sck)
30 if(GetMessageFromBuffer(inmsg) ==
true)
32 int rp = ReadPump(sck);
38 if(GetMessageFromBuffer(inmsg) ==
true)
44 template <
class SOCK_TYPE>
45 inline int ReadPump(SOCK_TYPE &sck)
48 size_t readsize = BufferAvailabe();
53 readsize = BufferAvailabe();
58 char * ff = GetBufferOpen();
59 int gotbytes = sck.RecvData(ff,(
int)readsize);
63 if(!sck.ErrorIs_WouldBlocking(gotbytes) )
66 nativenet_cat.error() <<
"buffered_datagram_reader:ReadPump socket read error -- " << GETERROR() <<
", " << sck.GetPeerName().get_ip_port().c_str() <<
"\n";
82 nativenet_cat.error() <<
"buffered_datagram_reader:ReadPump other end of socket closed -- " << sck.GetPeerName().get_ip_port().c_str() <<
"\n";
88 nativenet_cat.error() <<
"buffered_datagram_reader:ReadPump Yeep! buffer has no room to read to -- " << sck.GetPeerName().get_ip_port().c_str() <<
"\nBufferAvaiable = " << readsize <<
" AmountBuffered = " << AmountBuffered() <<
" BufferSize " << GetBufferSize() <<
"\n";
95 #include "buffered_datagramreader.i" 97 #endif //__BUFFEREDREADER_GM_H__
This is an implemention of the membuffer with ring buffer interface on it....
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...