Encapsulated SerialPacket, and made adjustments to accomodate it
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
#config
|
#config
|
||||||
INCLUDES+=. packet serial ../gameplay ../map ../utilities
|
INCLUDES+=. packet_types ../utilities ../gameplay ../map
|
||||||
LIBS+=
|
LIBS+=
|
||||||
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
||||||
|
|
||||||
@@ -17,8 +17,7 @@ OUT=$(addprefix $(OUTDIR)/,libcommon.a)
|
|||||||
#targets
|
#targets
|
||||||
all: $(OBJ) $(OUT)
|
all: $(OBJ) $(OUT)
|
||||||
ar -crs $(OUT) $(OBJ)
|
ar -crs $(OUT) $(OBJ)
|
||||||
$(MAKE) -C packet
|
$(MAKE) -C packet_types
|
||||||
$(MAKE) -C serial
|
|
||||||
|
|
||||||
$(OBJ): | $(OBJDIR)
|
$(OBJ): | $(OBJDIR)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#config
|
#config
|
||||||
INCLUDES+=. ../packet ../../gameplay ../../map ../../utilities
|
INCLUDES+=. ..
|
||||||
LIBS+=
|
LIBS+=
|
||||||
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,11 @@
|
|||||||
#ifndef SERIALPACKET_HPP_
|
#ifndef SERIALPACKET_HPP_
|
||||||
#define SERIALPACKET_HPP_
|
#define SERIALPACKET_HPP_
|
||||||
|
|
||||||
|
/* DOCS: serial_packet.hpp is used to define a number of required constants.
|
||||||
|
* These are used extensively by the server and client
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "serial_packet_base.hpp"
|
||||||
#include "character_packet.hpp"
|
#include "character_packet.hpp"
|
||||||
#include "client_packet.hpp"
|
#include "client_packet.hpp"
|
||||||
#include "combat_packet.hpp"
|
#include "combat_packet.hpp"
|
||||||
@@ -29,9 +34,14 @@
|
|||||||
#include "region_packet.hpp"
|
#include "region_packet.hpp"
|
||||||
#include "server_packet.hpp"
|
#include "server_packet.hpp"
|
||||||
|
|
||||||
//NOTE: SerialPacket is defined in serial_packet_base.hpp
|
//SerialPacketBase is defined in serial_packet_base.hpp
|
||||||
|
typedef SerialPacketBase SerialPacket;
|
||||||
|
|
||||||
union MaxPacket {
|
//DOCS: NETWORK_VERSION is used to discern compatible servers and clients
|
||||||
|
constexpr int NETWORK_VERSION = 20140827;
|
||||||
|
|
||||||
|
//_MaxPacket Should not be used
|
||||||
|
union _MaxPacket {
|
||||||
CharacterPacket a;
|
CharacterPacket a;
|
||||||
ClientPacket b;
|
ClientPacket b;
|
||||||
CombatPacket c;
|
CombatPacket c;
|
||||||
@@ -39,17 +49,17 @@ union MaxPacket {
|
|||||||
RegionPacket e;
|
RegionPacket e;
|
||||||
ServerPacket f;
|
ServerPacket f;
|
||||||
};
|
};
|
||||||
constexpr int MAX_PACKET_SIZE = sizeof(MaxPacket);
|
|
||||||
|
constexpr int MAX_PACKET_SIZE = sizeof(_MaxPacket);
|
||||||
|
|
||||||
/* DOCS: PACKET_BUFFER_SIZE is the memory required to store serialized data
|
/* DOCS: PACKET_BUFFER_SIZE is the memory required to store serialized data
|
||||||
* DOCS: SerialPacketType::REGION_CONTENT is currently the largest packet type
|
* DOCS: SerialPacketType::REGION_CONTENT is currently the largest packet type
|
||||||
* Serialized packet structure:
|
* Serialized RegionPacket structure:
|
||||||
* SerialPacketType
|
* SerialPacketType
|
||||||
* room index
|
* room index (int)
|
||||||
* X & Y position
|
* X & Y position (int)
|
||||||
* tile data (3 layers)
|
* tile data (3 layers)
|
||||||
* solid data (bitset)
|
* solid data (bitset)
|
||||||
* The constants declared here are used for networking ONLY
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
constexpr int REGION_TILE_FOOTPRINT = sizeof(Region::type_t) * REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH;
|
constexpr int REGION_TILE_FOOTPRINT = sizeof(Region::type_t) * REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH;
|
||||||
|
|||||||
@@ -22,25 +22,32 @@
|
|||||||
#ifndef SERIALPACKETBASE_HPP_
|
#ifndef SERIALPACKETBASE_HPP_
|
||||||
#define SERIALPACKETBASE_HPP_
|
#define SERIALPACKETBASE_HPP_
|
||||||
|
|
||||||
#ifndef SERIALPACKET_HPP_
|
|
||||||
#error Cannot include this file without 'serial_packet.hpp'
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "serial_packet_type.hpp"
|
#include "serial_packet_type.hpp"
|
||||||
|
|
||||||
#include "SDL/SDL_net.h"
|
#include "SDL/SDL_net.h"
|
||||||
|
|
||||||
constexpr int NETWORK_VERSION = 20140701;
|
//The packets use a char array for string storage
|
||||||
constexpr int PACKET_STRING_SIZE = 100;
|
constexpr int PACKET_STRING_SIZE = 100;
|
||||||
|
|
||||||
struct SerialPacketBase {
|
class SerialPacketBase {
|
||||||
//members
|
public:
|
||||||
|
SerialPacketType SetType(SerialPacketType t) { return type = t; }
|
||||||
|
SerialPacketType GetType() { return type; }
|
||||||
|
|
||||||
|
IPaddress GetSourceAddress() { return srcAddress; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
friend class UDPNetworkUtility;
|
||||||
|
|
||||||
|
SerialPacketBase() = default;
|
||||||
|
virtual ~SerialPacketBase() = default;
|
||||||
|
|
||||||
|
virtual void Serialize(const void* buffer) = 0;
|
||||||
|
virtual void Deserialize(const void* buffer) = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
SerialPacketType type;
|
SerialPacketType type;
|
||||||
IPaddress srcAddress;
|
IPaddress srcAddress;
|
||||||
|
|
||||||
virtual ~SerialPacketBase() {};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef SerialPacketBase SerialPacket;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ enum class SerialPacketType {
|
|||||||
//default: there is something wrong
|
//default: there is something wrong
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
|
|
||||||
//keep alive
|
//heartbeat
|
||||||
//ping => pong
|
//ping => pong
|
||||||
PING = 1,
|
PING = 1,
|
||||||
PONG = 2,
|
PONG = 2,
|
||||||
|
|||||||
@@ -21,8 +21,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "udp_network_utility.hpp"
|
#include "udp_network_utility.hpp"
|
||||||
|
|
||||||
#include "serial.hpp"
|
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
//BUGFIX: memset() is used before sending a packet to remove old data; you don't want to send sensitive data over the network
|
//BUGFIX: memset() is used before sending a packet to remove old data; you don't want to send sensitive data over the network
|
||||||
@@ -166,7 +164,7 @@ int UDPNetworkUtility::SendTo(const char* ip, int port, SerialPacket* serialPack
|
|||||||
|
|
||||||
int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacket* serialPacket) {
|
int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacket* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
serializePacket(serialPacket, packet->data);
|
serialPacket->Serialize(packet->data);
|
||||||
packet->len = PACKET_BUFFER_SIZE;
|
packet->len = PACKET_BUFFER_SIZE;
|
||||||
packet->address = *add;
|
packet->address = *add;
|
||||||
|
|
||||||
@@ -181,7 +179,7 @@ int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacket* serialPacket) {
|
|||||||
|
|
||||||
int UDPNetworkUtility::SendTo(int channel, SerialPacket* serialPacket) {
|
int UDPNetworkUtility::SendTo(int channel, SerialPacket* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
serializePacket(serialPacket, packet->data);
|
serialPacket->Serialize(packet->data);
|
||||||
packet->len = PACKET_BUFFER_SIZE;
|
packet->len = PACKET_BUFFER_SIZE;
|
||||||
|
|
||||||
int ret = SDLNet_UDP_Send(socket, channel, packet);
|
int ret = SDLNet_UDP_Send(socket, channel, packet);
|
||||||
@@ -195,7 +193,7 @@ int UDPNetworkUtility::SendTo(int channel, SerialPacket* serialPacket) {
|
|||||||
|
|
||||||
int UDPNetworkUtility::SendToAllChannels(SerialPacket* serialPacket) {
|
int UDPNetworkUtility::SendToAllChannels(SerialPacket* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
serializePacket(serialPacket, packet->data);
|
serialPacket->Serialize(packet->data);
|
||||||
packet->len = PACKET_BUFFER_SIZE;
|
packet->len = PACKET_BUFFER_SIZE;
|
||||||
|
|
||||||
int sent = 0;
|
int sent = 0;
|
||||||
@@ -213,7 +211,7 @@ int UDPNetworkUtility::SendToAllChannels(SerialPacket* serialPacket) {
|
|||||||
int UDPNetworkUtility::Receive(SerialPacket* serialPacket) {
|
int UDPNetworkUtility::Receive(SerialPacket* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
int ret = SDLNet_UDP_Recv(socket, packet);
|
int ret = SDLNet_UDP_Recv(socket, packet);
|
||||||
deserializePacket(serialPacket, packet->data);
|
serialPacket->Deserialize(packet->data);
|
||||||
serialPacket->srcAddress = packet->address;
|
serialPacket->srcAddress = packet->address;
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user