You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
2.4 KiB
C++

// Packet.cpp: Implementierung der Klasse CPacket.
//
//////////////////////////////////////////////////////////////////////
#include "../forcelibs.h"
#include <string.h>
#include "packet.h"
//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////
CNetPacket::CNetPacket()
{
code_type = 0;
len = 0;
buf = 0;
mem = buf;
}
CNetPacket::CNetPacket(int plen)
{
code_type = 0;
len = 0;
buf = 0;
mem = 0;
if( plen > 0 )
{
len = plen;
buf = new char [ plen + 1];
buf[len]='\0';
}
mem = buf;
}
CNetPacket::CNetPacket(const char *message)
{
code_type = 0;
len = 0;
buf = 0;
if( message != 0 )
{
len = strlen(message);
buf = new char [ len + 1 ];
strcpy( buf, message);
buf[len]='\0';
}
mem = buf;
}
CNetPacket::CNetPacket(const char *message, int plen)
{
code_type = 0;
len = 0;
buf = 0;
if( plen > 0 )
{
len = plen;
buf = new char [ plen + 1];
memcpy( buf, message, len);
buf[len]='\0';
}
mem = buf;
}
CNetPacket::CNetPacket(const char *prefix, const char *message, int plen)
{
code_type = 0;
len = 0;
buf = 0;
int prefix_len = strlen(prefix);
if( plen > 0 )
{
len = prefix_len + plen;
buf = new char [ len + 1 ];
strcpy(buf,prefix);
memcpy( &buf[prefix_len], message, plen);
buf[len]='\0';
}
mem = buf;
}
CNetPacket::CNetPacket(unsigned char pcode_type, const char *message, int plen)
{
code_type = 0;
len = 0;
buf = 0;
code_type = pcode_type;
if( plen > 0 )
{
len = plen;
buf = new char [ plen + 1];
memcpy( buf, message, len);
buf[len]='\0';
}
mem = buf;
}
CNetPacket::CNetPacket(CNetPacket &N, CNetPacket &M)
{
code_type = N.code_type;
len = N.len + M.len;
buf = new char [ len + 1];
memcpy( buf,N.buf,N.len);
memcpy( buf + N.len,M.buf, M.len);
buf[len]='\0';
mem = buf;
}
const CNetPacket& CNetPacket::operator=(CNetPacket &N)
{
delete mem;
code_type = N.code_type;
len = N.len;
buf = new char [ len + 1];
memcpy( buf,N.buf,len);
buf[len]='\0';
mem = buf;
return *this;
}
const CNetPacket& CNetPacket::operator=(CNetPacket *N)
{
delete mem;
if( N == 0 )
{
code_type = 0;
len = 0;
buf = 0;
mem = 0;
}
else
{
code_type = N->code_type;
len = N->len;
buf = new char [ len + 1];
memcpy( buf,N->buf,len);
buf[len]='\0';
mem = buf;
}
return *this;
}
CNetPacket::~CNetPacket()
{
delete mem;
}