/* Starshatter: The Open Source Project Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. AUTHOR: John DiCamillo OVERVIEW ======== User level network message */ #include #include "NetMsg.h" // +-------------------------------------------------------------------+ static DWORD net_msg_sequence = 1; // +-------------------------------------------------------------------+ NetMsg::NetMsg(DWORD nid, void* d, int l, BYTE f) : msgid(net_msg_sequence++), netid(nid), len(l), flags(f) { data = new BYTE[len]; if (data) { CopyMemory(data, d, len); if (len < MAX_SIZE) data[1] = len; else data[1] = 0; } else { len = 0; } } // +-------------------------------------------------------------------+ NetMsg::NetMsg(DWORD nid, BYTE type, const char* text, int l, BYTE f) : msgid(net_msg_sequence++), netid(nid), len(2+l), flags(f) { data = new BYTE[len]; if (data) { data[0] = type; if (len < MAX_SIZE) data[1] = len; else data[1] = 0; if (len > 2) CopyMemory(data+2, text, len-2); } else { len = 0; } } // +-------------------------------------------------------------------+ NetMsg::~NetMsg() { delete [] data; } // +-------------------------------------------------------------------+ int NetMsg::operator < (const NetMsg& m) const { if (data[0] == MULTIPART && m.data[0] == MULTIPART) { NetMsgMultipart* p1 = (NetMsgMultipart*) data; NetMsgMultipart* p2 = (NetMsgMultipart*) m.data; if (p1->msgid == p2->msgid) return p1->partno < p2->partno; return p1->msgid < p2->msgid; } return msgid < m.msgid; }