From d17521c8b9085a91d08fecfd0b51bbbf7b1dccac Mon Sep 17 00:00:00 2001 From: "milo24x7@gmail.com" Date: Sun, 7 Jul 2013 22:08:49 +0000 Subject: Updated open source license declaration and fixed some formatting issues. --- Stars45/NetPacket.cpp | 736 ++++++++++++++++++++++++++------------------------ 1 file changed, 380 insertions(+), 356 deletions(-) (limited to 'Stars45/NetPacket.cpp') diff --git a/Stars45/NetPacket.cpp b/Stars45/NetPacket.cpp index a44851d..97f8ca1 100644 --- a/Stars45/NetPacket.cpp +++ b/Stars45/NetPacket.cpp @@ -1,356 +1,380 @@ -/* Project Starshatter 4.5 - Destroyer Studios LLC - Copyright © 1997-2004. All Rights Reserved. - - SUBSYSTEM: Stars.exe - FILE: NetGame.cpp - AUTHOR: John DiCamillo - - - OVERVIEW - ======== - Network Game Manager and Player classes -*/ - -#include "MemDebug.h" -#include "NetPacket.h" -#include "NetLink.h" -#include "NetMsg.h" -#include "Ship.h" - -#include "Game.h" - -// +--------------------------------------------------------------------+ - -const int PING_SIZE = 8; -const int SHIP_LOC_SIZE = 36; -const int JOIN_REQ_SIZE = 116; -const int JOIN_ANN_SIZE = 116; -const int QUIT_ANN_SIZE = 8; - -// +--------------------------------------------------------------------+ - -NetPacket::NetPacket(NetMsg* g) -: msg(g) -{ } - -NetPacket::NetPacket(DWORD netid, BYTE type) -{ - int len = 0; - char buf[256]; - ZeroMemory(buf, 256); - - switch (type) { - case NET_PING: len = PING_SIZE; break; - case NET_PONG: len = PING_SIZE; break; - case NET_OBJ_LOC: len = SHIP_LOC_SIZE; break; - - case NET_JOIN_REQUEST: len = JOIN_REQ_SIZE; break; - case NET_JOIN_ANNOUNCE: len = JOIN_ANN_SIZE; break; - case NET_QUIT_ANNOUNCE: len = QUIT_ANN_SIZE; break; - - default: len = JOIN_REQ_SIZE; break; - } - - msg = new(__FILE__,__LINE__) NetMsg(netid, type, buf, len); -} - -NetPacket::~NetPacket() -{ - delete msg; -} - -bool -NetPacket::Send(NetLink& link) -{ - bool sent = false; - - if (msg) - sent = link.SendMessage(msg); - - msg = 0; - return sent; -} - -// +--------------------------------------------------------------------+ - -DWORD -NetPacket::NetID() const -{ - if (msg) - return msg->NetID(); - - return 0; -} - -BYTE -NetPacket::Type() const -{ - if (msg) - return msg->Type(); - - return 0; -} - -// +--------------------------------------------------------------------+ - -DWORD -NetPacket::GetPingSequence() -{ - if (msg && msg->Length() >= PING_SIZE) { - DWORD* data = (DWORD*) (msg->Data()+4); - return *data; - } - - return 0; -} - -void -NetPacket::SetPingSequence(DWORD seq) -{ - if (msg && msg->Length() >= PING_SIZE) { - DWORD* data = (DWORD*) (msg->Data()+4); - *data = seq; - } -} - -// +--------------------------------------------------------------------+ - -DWORD -NetPacket::GetNetID() -{ - if (msg && msg->Length() >= PING_SIZE) { - DWORD* data = (DWORD*) (msg->Data()+4); - return *data; - } - - return 0; -} - -void -NetPacket::SetNetID(DWORD id) -{ - if (msg && msg->Length() >= PING_SIZE) { - DWORD* data = (DWORD*) (msg->Data()+4); - *data = id; - } -} - -// +--------------------------------------------------------------------+ - -Point -NetPacket::GetShipLocation() -{ - if (msg && msg->Length() >= SHIP_LOC_SIZE) { - long* data = (long*) (msg->Data()+8); - long x = *(data + 0); - long y = *(data + 1); - long z = *(data + 2); - - return Point(x/100.0, y/100.0, z/100.0); - } - - return Point(); -} - -void -NetPacket::SetShipLocation(const Point& loc) -{ - if (msg && msg->Length() >= SHIP_LOC_SIZE) { - long x = (long) (loc.x * 100); - long y = (long) (loc.y * 100); - long z = (long) (loc.z * 100); - - long* data = (long*) (msg->Data()+8); - - *(data + 0) = x; - *(data + 1) = y; - *(data + 2) = z; - } -} - -// +--------------------------------------------------------------------+ - -Point -NetPacket::GetShipVelocity() -{ - if (msg && msg->Length() >= SHIP_LOC_SIZE) { - short* data = (short*) (msg->Data()+20); - - short dx = *(data + 0); - short dy = *(data + 1); - short dz = *(data + 2); - - return Point(dx, dy, dz); - } - - return Point(); -} - -void -NetPacket::SetShipVelocity(const Point& vel) -{ - if (msg && msg->Length() >= SHIP_LOC_SIZE) { - short* data = (short*) (msg->Data()+20); - - *(data + 0) = (short) vel.x; - *(data + 1) = (short) vel.y; - *(data + 2) = (short) vel.z; - } -} - -// +--------------------------------------------------------------------+ - -Point -NetPacket::GetShipOrientation() -{ - if (msg && msg->Length() >= SHIP_LOC_SIZE) { - short* data = (short*) (msg->Data()+26); - - short r = *(data + 0); - short p = *(data + 1); - short y = *(data + 2); - - return Point(2*PI*r/32767, 2*PI*p/32767, 2*PI*y/32767); - } - - return Point(); -} - -void -NetPacket::SetShipOrientation(const Point& rpy) -{ - if (msg && msg->Length() >= SHIP_LOC_SIZE) { - short* data = (short*) (msg->Data()+26); - - *(data + 0) = (short) (32767*rpy.x/(2*PI)); - *(data + 1) = (short) (32767*rpy.y/(2*PI)); - *(data + 2) = (short) (32767*rpy.z/(2*PI)); - } -} - -// +--------------------------------------------------------------------+ - -double -NetPacket::GetThrottle() -{ - if (msg && msg->Length() >= SHIP_LOC_SIZE) { - BYTE* data = (BYTE*) msg->Data()+32; - - return (double) *data; - } - - return 0; -} - -void -NetPacket::SetThrottle(double t) -{ - if (msg && msg->Length() >= SHIP_LOC_SIZE) { - BYTE* data = (BYTE*) msg->Data()+32; - - *data = (BYTE) t; - } -} - -// +--------------------------------------------------------------------+ - -bool -NetPacket::GetTrigger(int i) -{ - if (i >= 0 && i < 8 && msg && msg->Length() >= SHIP_LOC_SIZE) { - BYTE* data = (BYTE*) msg->Data()+33; - - BYTE select = 1 << i; - return (*data & select)?true:false; - } - - return false; -} - -void -NetPacket::SetTrigger(int i, bool trigger) -{ - if (i >= 0 && i < 8 && msg && msg->Length() >= SHIP_LOC_SIZE) { - BYTE* data = (BYTE*) msg->Data()+33; - - BYTE select = 1 << i; - - if (trigger) - *data = *data | select; - else - *data = *data & ~select; - } -} - -// +--------------------------------------------------------------------+ - -const char* -NetPacket::GetName() -{ - if (msg && msg->Length() >= JOIN_REQ_SIZE) { - BYTE* data = (BYTE*) msg->Data()+20; - - return (const char*) data; - } - - return 0; -} - -void -NetPacket::SetName(const char* name) -{ - if (msg && msg->Length() >= JOIN_REQ_SIZE) { - BYTE* data = (BYTE*) msg->Data()+20; - strncpy((char*) data, name, 32); - } -} - -// +--------------------------------------------------------------------+ - -const char* -NetPacket::GetDesign() -{ - if (msg && msg->Length() >= JOIN_REQ_SIZE) { - BYTE* data = (BYTE*) msg->Data()+52; - - return (const char*) data; - } - - return 0; -} - -void -NetPacket::SetDesign(const char* design) -{ - if (msg && msg->Length() >= JOIN_REQ_SIZE) { - BYTE* data = (BYTE*) msg->Data()+52; - strncpy((char*) data, design, 32); - } -} - -// +--------------------------------------------------------------------+ - -const char* -NetPacket::GetRegion() -{ - if (msg && msg->Length() >= JOIN_REQ_SIZE) { - BYTE* data = (BYTE*) msg->Data()+84; - - return (const char*) data; - } - - return 0; -} - -void -NetPacket::SetRegion(const char* rgn_name) -{ - if (msg && msg->Length() >= JOIN_REQ_SIZE) { - BYTE* data = (BYTE*) msg->Data()+84; - strncpy((char*) data, rgn_name, 32); - } -} - -// +--------------------------------------------------------------------+ - +/* Starshatter OpenSource Distribution + Copyright (c) 1997-2004, Destroyer Studios LLC. + All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name "Destroyer Studios" nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + SUBSYSTEM: Stars.exe + FILE: NetGame.cpp + AUTHOR: John DiCamillo + + + OVERVIEW + ======== + Network Game Manager and Player classes +*/ + +#include "MemDebug.h" +#include "NetPacket.h" +#include "NetLink.h" +#include "NetMsg.h" +#include "Ship.h" + +#include "Game.h" + +// +--------------------------------------------------------------------+ + +const int PING_SIZE = 8; +const int SHIP_LOC_SIZE = 36; +const int JOIN_REQ_SIZE = 116; +const int JOIN_ANN_SIZE = 116; +const int QUIT_ANN_SIZE = 8; + +// +--------------------------------------------------------------------+ + +NetPacket::NetPacket(NetMsg* g) +: msg(g) +{ } + +NetPacket::NetPacket(DWORD netid, BYTE type) +{ + int len = 0; + char buf[256]; + ZeroMemory(buf, 256); + + switch (type) { + case NET_PING: len = PING_SIZE; break; + case NET_PONG: len = PING_SIZE; break; + case NET_OBJ_LOC: len = SHIP_LOC_SIZE; break; + + case NET_JOIN_REQUEST: len = JOIN_REQ_SIZE; break; + case NET_JOIN_ANNOUNCE: len = JOIN_ANN_SIZE; break; + case NET_QUIT_ANNOUNCE: len = QUIT_ANN_SIZE; break; + + default: len = JOIN_REQ_SIZE; break; + } + + msg = new(__FILE__,__LINE__) NetMsg(netid, type, buf, len); +} + +NetPacket::~NetPacket() +{ + delete msg; +} + +bool +NetPacket::Send(NetLink& link) +{ + bool sent = false; + + if (msg) + sent = link.SendMessage(msg); + + msg = 0; + return sent; +} + +// +--------------------------------------------------------------------+ + +DWORD +NetPacket::NetID() const +{ + if (msg) + return msg->NetID(); + + return 0; +} + +BYTE +NetPacket::Type() const +{ + if (msg) + return msg->Type(); + + return 0; +} + +// +--------------------------------------------------------------------+ + +DWORD +NetPacket::GetPingSequence() +{ + if (msg && msg->Length() >= PING_SIZE) { + DWORD* data = (DWORD*) (msg->Data()+4); + return *data; + } + + return 0; +} + +void +NetPacket::SetPingSequence(DWORD seq) +{ + if (msg && msg->Length() >= PING_SIZE) { + DWORD* data = (DWORD*) (msg->Data()+4); + *data = seq; + } +} + +// +--------------------------------------------------------------------+ + +DWORD +NetPacket::GetNetID() +{ + if (msg && msg->Length() >= PING_SIZE) { + DWORD* data = (DWORD*) (msg->Data()+4); + return *data; + } + + return 0; +} + +void +NetPacket::SetNetID(DWORD id) +{ + if (msg && msg->Length() >= PING_SIZE) { + DWORD* data = (DWORD*) (msg->Data()+4); + *data = id; + } +} + +// +--------------------------------------------------------------------+ + +Point +NetPacket::GetShipLocation() +{ + if (msg && msg->Length() >= SHIP_LOC_SIZE) { + long* data = (long*) (msg->Data()+8); + long x = *(data + 0); + long y = *(data + 1); + long z = *(data + 2); + + return Point(x/100.0, y/100.0, z/100.0); + } + + return Point(); +} + +void +NetPacket::SetShipLocation(const Point& loc) +{ + if (msg && msg->Length() >= SHIP_LOC_SIZE) { + long x = (long) (loc.x * 100); + long y = (long) (loc.y * 100); + long z = (long) (loc.z * 100); + + long* data = (long*) (msg->Data()+8); + + *(data + 0) = x; + *(data + 1) = y; + *(data + 2) = z; + } +} + +// +--------------------------------------------------------------------+ + +Point +NetPacket::GetShipVelocity() +{ + if (msg && msg->Length() >= SHIP_LOC_SIZE) { + short* data = (short*) (msg->Data()+20); + + short dx = *(data + 0); + short dy = *(data + 1); + short dz = *(data + 2); + + return Point(dx, dy, dz); + } + + return Point(); +} + +void +NetPacket::SetShipVelocity(const Point& vel) +{ + if (msg && msg->Length() >= SHIP_LOC_SIZE) { + short* data = (short*) (msg->Data()+20); + + *(data + 0) = (short) vel.x; + *(data + 1) = (short) vel.y; + *(data + 2) = (short) vel.z; + } +} + +// +--------------------------------------------------------------------+ + +Point +NetPacket::GetShipOrientation() +{ + if (msg && msg->Length() >= SHIP_LOC_SIZE) { + short* data = (short*) (msg->Data()+26); + + short r = *(data + 0); + short p = *(data + 1); + short y = *(data + 2); + + return Point(2*PI*r/32767, 2*PI*p/32767, 2*PI*y/32767); + } + + return Point(); +} + +void +NetPacket::SetShipOrientation(const Point& rpy) +{ + if (msg && msg->Length() >= SHIP_LOC_SIZE) { + short* data = (short*) (msg->Data()+26); + + *(data + 0) = (short) (32767*rpy.x/(2*PI)); + *(data + 1) = (short) (32767*rpy.y/(2*PI)); + *(data + 2) = (short) (32767*rpy.z/(2*PI)); + } +} + +// +--------------------------------------------------------------------+ + +double +NetPacket::GetThrottle() +{ + if (msg && msg->Length() >= SHIP_LOC_SIZE) { + BYTE* data = (BYTE*) msg->Data()+32; + + return (double) *data; + } + + return 0; +} + +void +NetPacket::SetThrottle(double t) +{ + if (msg && msg->Length() >= SHIP_LOC_SIZE) { + BYTE* data = (BYTE*) msg->Data()+32; + + *data = (BYTE) t; + } +} + +// +--------------------------------------------------------------------+ + +bool +NetPacket::GetTrigger(int i) +{ + if (i >= 0 && i < 8 && msg && msg->Length() >= SHIP_LOC_SIZE) { + BYTE* data = (BYTE*) msg->Data()+33; + + BYTE select = 1 << i; + return (*data & select)?true:false; + } + + return false; +} + +void +NetPacket::SetTrigger(int i, bool trigger) +{ + if (i >= 0 && i < 8 && msg && msg->Length() >= SHIP_LOC_SIZE) { + BYTE* data = (BYTE*) msg->Data()+33; + + BYTE select = 1 << i; + + if (trigger) + *data = *data | select; + else + *data = *data & ~select; + } +} + +// +--------------------------------------------------------------------+ + +const char* +NetPacket::GetName() +{ + if (msg && msg->Length() >= JOIN_REQ_SIZE) { + BYTE* data = (BYTE*) msg->Data()+20; + + return (const char*) data; + } + + return 0; +} + +void +NetPacket::SetName(const char* name) +{ + if (msg && msg->Length() >= JOIN_REQ_SIZE) { + BYTE* data = (BYTE*) msg->Data()+20; + strncpy((char*) data, name, 32); + } +} + +// +--------------------------------------------------------------------+ + +const char* +NetPacket::GetDesign() +{ + if (msg && msg->Length() >= JOIN_REQ_SIZE) { + BYTE* data = (BYTE*) msg->Data()+52; + + return (const char*) data; + } + + return 0; +} + +void +NetPacket::SetDesign(const char* design) +{ + if (msg && msg->Length() >= JOIN_REQ_SIZE) { + BYTE* data = (BYTE*) msg->Data()+52; + strncpy((char*) data, design, 32); + } +} + +// +--------------------------------------------------------------------+ + +const char* +NetPacket::GetRegion() +{ + if (msg && msg->Length() >= JOIN_REQ_SIZE) { + BYTE* data = (BYTE*) msg->Data()+84; + + return (const char*) data; + } + + return 0; +} + +void +NetPacket::SetRegion(const char* rgn_name) +{ + if (msg && msg->Length() >= JOIN_REQ_SIZE) { + BYTE* data = (BYTE*) msg->Data()+84; + strncpy((char*) data, rgn_name, 32); + } +} + +// +--------------------------------------------------------------------+ + -- cgit v1.1