Rearranged the packet and serial code to make more sense
This mostly just reimplements the best parts of the discarded branch: > discard-encapsulated-packets There may still be some work needed.
This commit is contained in:
@@ -21,7 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "client_application.hpp"
|
#include "client_application.hpp"
|
||||||
|
|
||||||
#include "serial.hpp"
|
#include "serial_packet.hpp"
|
||||||
#include "config_utility.hpp"
|
#include "config_utility.hpp"
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
#config
|
#config
|
||||||
INCLUDES+=. scenes ../common/debugging ../common/gameplay ../common/graphics ../common/map ../common/network ../common/network/packet ../common/network/serial ../common/ui ../common/utilities
|
INCLUDES+=. scenes ../common/debugging ../common/gameplay ../common/graphics ../common/map ../common/network ../common/network/packet_types ../common/ui ../common/utilities
|
||||||
LIBS+=client.a ../libcommon.a -lSDL_net -lwsock32 -liphlpapi -lmingw32 -lSDLmain -lSDL -llua
|
LIBS+=client.a ../libcommon.a -lSDL_net -lwsock32 -liphlpapi -lmingw32 -lSDLmain -lSDL -llua
|
||||||
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
//networking
|
//networking
|
||||||
#include "udp_network_utility.hpp"
|
#include "udp_network_utility.hpp"
|
||||||
|
#include "serial_packet.hpp"
|
||||||
|
|
||||||
//graphics
|
//graphics
|
||||||
#include "image.hpp"
|
#include "image.hpp"
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
//utilities
|
//utilities
|
||||||
#include "config_utility.hpp"
|
#include "config_utility.hpp"
|
||||||
#include "udp_network_utility.hpp"
|
#include "udp_network_utility.hpp"
|
||||||
|
#include "serial_packet.hpp"
|
||||||
|
|
||||||
//client
|
//client
|
||||||
#include "base_scene.hpp"
|
#include "base_scene.hpp"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#config
|
#config
|
||||||
INCLUDES+=. .. ../../common/gameplay ../../common/graphics ../../common/map ../../common/network ../../common/network/packet ../../common/network/serial ../../common/ui ../../common/utilities
|
INCLUDES+=. .. ../../common/gameplay ../../common/graphics ../../common/map ../../common/network ../../common/network/packet_types ../../common/ui ../../common/utilities
|
||||||
LIBS+=
|
LIBS+=
|
||||||
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#config
|
#config
|
||||||
INCLUDES+=. packet serial ../gameplay ../map ../utilities
|
INCLUDES+=. packet_types ../gameplay ../map ../utilities
|
||||||
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,39 +0,0 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2013, 2014
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
*/
|
|
||||||
#ifndef ENEMYPACKET_HPP_
|
|
||||||
#define ENEMYPACKET_HPP_
|
|
||||||
|
|
||||||
#include "serial_packet_base.hpp"
|
|
||||||
|
|
||||||
struct EnemyPacket : SerialPacketBase {
|
|
||||||
//identify the enemy
|
|
||||||
int enemyIndex;
|
|
||||||
char handle[PACKET_STRING_SIZE];
|
|
||||||
char avatar[PACKET_STRING_SIZE];
|
|
||||||
|
|
||||||
//gameplay
|
|
||||||
Statistics stats;
|
|
||||||
|
|
||||||
//TODO: gameplay components: equipment, items, buffs, debuffs, rewards
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2013, 2014
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
*/
|
|
||||||
#ifndef SERIALPACKETTYPE_HPP_
|
|
||||||
#define SERIALPACKETTYPE_HPP_
|
|
||||||
|
|
||||||
/* Key for the comments:
|
|
||||||
* request => response
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum class SerialPacketType {
|
|
||||||
//default: there is something wrong
|
|
||||||
NONE = 0,
|
|
||||||
|
|
||||||
//keep alive
|
|
||||||
//ping => pong
|
|
||||||
PING = 1,
|
|
||||||
PONG = 2,
|
|
||||||
|
|
||||||
//search for the server list
|
|
||||||
//none => server name, player count, version info (and source address)
|
|
||||||
BROADCAST_REQUEST = 3,
|
|
||||||
BROADCAST_RESPONSE = 4,
|
|
||||||
|
|
||||||
//try to join the server
|
|
||||||
//username, and password => client index, account index
|
|
||||||
JOIN_REQUEST = 5,
|
|
||||||
JOIN_RESPONSE = 6,
|
|
||||||
JOIN_REJECTION = 7,
|
|
||||||
|
|
||||||
//mass update of all surrounding content
|
|
||||||
//character.x, character.y => packet barrage
|
|
||||||
SYNCHRONIZE = 8,
|
|
||||||
|
|
||||||
//disconnect from the server
|
|
||||||
//autentication, account index => disconnect that account
|
|
||||||
DISCONNECT = 9,
|
|
||||||
|
|
||||||
//shut down the server
|
|
||||||
//autentication => disconnect, shutdown
|
|
||||||
SHUTDOWN = 10,
|
|
||||||
|
|
||||||
//map data
|
|
||||||
//room index, region.x, region.y => room index, region.x, region.y, region content
|
|
||||||
REGION_REQUEST = 11,
|
|
||||||
REGION_CONTENT = 12,
|
|
||||||
|
|
||||||
//combat data
|
|
||||||
//TODO: system incomplete
|
|
||||||
COMBAT_NEW = 13,
|
|
||||||
COMBAT_DELETE = 14,
|
|
||||||
COMBAT_UPDATE = 15,
|
|
||||||
|
|
||||||
COMBAT_ENTER_REQUEST = 16,
|
|
||||||
COMBAT_ENTER_RESPONSE = 17,
|
|
||||||
|
|
||||||
COMBAT_EXIT_REQUEST = 18,
|
|
||||||
COMBAT_EXIT_RESPONSE = 19,
|
|
||||||
|
|
||||||
//TODO: COMBAT info
|
|
||||||
|
|
||||||
COMBAT_REJECTION = 20,
|
|
||||||
|
|
||||||
//character data
|
|
||||||
//character data => etc.
|
|
||||||
CHARACTER_NEW = 21,
|
|
||||||
CHARACTER_DELETE = 22,
|
|
||||||
CHARACTER_UPDATE = 23,
|
|
||||||
|
|
||||||
//authentication, character index => character stats
|
|
||||||
CHARACTER_STATS_REQUEST= 24,
|
|
||||||
CHARACTER_STATS_RESPONSE = 25,
|
|
||||||
|
|
||||||
//character new => character rejection, disconnect?
|
|
||||||
CHARACTER_REJECTION = 26,
|
|
||||||
|
|
||||||
//enemy data
|
|
||||||
//enemy data => etc.
|
|
||||||
ENEMY_NEW = 27,
|
|
||||||
ENEMY_DELETE = 28,
|
|
||||||
ENEMY_UPDATE = 29,
|
|
||||||
|
|
||||||
ENEMY_STATS_REQUEST = 30,
|
|
||||||
ENEMY_STATS_RESPONSE = 31,
|
|
||||||
|
|
||||||
//enemy index => enemy doens't exist
|
|
||||||
ENEMY_REJECTION= 32,
|
|
||||||
|
|
||||||
//NOTE: more packet types go here
|
|
||||||
|
|
||||||
//not used
|
|
||||||
LAST
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/* Copyright: (c) Kayne Ruse 2014
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
*
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
*
|
||||||
|
* 3. This notice may not be removed or altered from any source
|
||||||
|
* distribution.
|
||||||
|
*/
|
||||||
|
#include "character_packet.hpp"
|
||||||
|
|
||||||
|
#include "serial_utility.hpp"
|
||||||
|
|
||||||
|
#include "serial_statistics.hpp"
|
||||||
|
|
||||||
|
void serializeCharacter(void* buffer, CharacterPacket* packet) {
|
||||||
|
serialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
|
//identify the character
|
||||||
|
serialCopy(&buffer, &packet->characterIndex, sizeof(int));
|
||||||
|
serialCopy(&buffer, packet->handle, PACKET_STRING_SIZE);
|
||||||
|
serialCopy(&buffer, packet->avatar, PACKET_STRING_SIZE);
|
||||||
|
|
||||||
|
//the owner
|
||||||
|
serialCopy(&buffer, &packet->accountIndex, sizeof(int));
|
||||||
|
|
||||||
|
//location
|
||||||
|
serialCopy(&buffer, &packet->roomIndex, sizeof(int));
|
||||||
|
serialCopy(&buffer, &packet->origin.x, sizeof(double));
|
||||||
|
serialCopy(&buffer, &packet->origin.y, sizeof(double));
|
||||||
|
serialCopy(&buffer, &packet->motion.x, sizeof(double));
|
||||||
|
serialCopy(&buffer, &packet->motion.y, sizeof(double));
|
||||||
|
|
||||||
|
//stats structure
|
||||||
|
serializeStatistics(&buffer, &packet->stats);
|
||||||
|
|
||||||
|
//TODO: gameplay components: equipment, items, buffs, debuffs
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserializeCharacter(void* buffer, CharacterPacket* packet) {
|
||||||
|
deserialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
|
//identify the character
|
||||||
|
deserialCopy(&buffer, &packet->characterIndex, sizeof(int));
|
||||||
|
deserialCopy(&buffer, packet->handle, PACKET_STRING_SIZE);
|
||||||
|
deserialCopy(&buffer, packet->avatar, PACKET_STRING_SIZE);
|
||||||
|
|
||||||
|
//the owner
|
||||||
|
deserialCopy(&buffer, &packet->accountIndex, sizeof(int));
|
||||||
|
|
||||||
|
//location
|
||||||
|
deserialCopy(&buffer, &packet->roomIndex, sizeof(int));
|
||||||
|
deserialCopy(&buffer, &packet->origin.x, sizeof(double));
|
||||||
|
deserialCopy(&buffer, &packet->origin.y, sizeof(double));
|
||||||
|
deserialCopy(&buffer, &packet->motion.x, sizeof(double));
|
||||||
|
deserialCopy(&buffer, &packet->motion.y, sizeof(double));
|
||||||
|
|
||||||
|
//stats structure
|
||||||
|
deserializeStatistics(&buffer, &packet->stats);
|
||||||
|
|
||||||
|
//TODO: gameplay components: equipment, items, buffs, debuffs
|
||||||
|
}
|
||||||
+3
@@ -47,4 +47,7 @@ struct CharacterPacket : SerialPacketBase {
|
|||||||
//TODO: gameplay components: equipment, items, buffs, debuffs
|
//TODO: gameplay components: equipment, items, buffs, debuffs
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void serializeCharacter(void* buffer, CharacterPacket* packet);
|
||||||
|
void deserializeCharacter(void* buffer, CharacterPacket* packet);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/* Copyright: (c) Kayne Ruse 2014
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
*
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
*
|
||||||
|
* 3. This notice may not be removed or altered from any source
|
||||||
|
* distribution.
|
||||||
|
*/
|
||||||
|
#include "client_packet.hpp"
|
||||||
|
|
||||||
|
#include "serial_utility.hpp"
|
||||||
|
|
||||||
|
void serializeClient(void* buffer, ClientPacket* packet) {
|
||||||
|
serialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
|
serialCopy(&buffer, &packet->clientIndex, sizeof(int));
|
||||||
|
serialCopy(&buffer, &packet->accountIndex, sizeof(int));
|
||||||
|
serialCopy(&buffer, packet->username, PACKET_STRING_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserializeClient(void* buffer, ClientPacket* packet) {
|
||||||
|
deserialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
|
deserialCopy(&buffer, &packet->clientIndex, sizeof(int));
|
||||||
|
deserialCopy(&buffer, &packet->accountIndex, sizeof(int));
|
||||||
|
deserialCopy(&buffer, packet->username, PACKET_STRING_SIZE);
|
||||||
|
}
|
||||||
+3
-1
@@ -28,7 +28,9 @@ struct ClientPacket : SerialPacketBase {
|
|||||||
int clientIndex;
|
int clientIndex;
|
||||||
int accountIndex;
|
int accountIndex;
|
||||||
char username[PACKET_STRING_SIZE];
|
char username[PACKET_STRING_SIZE];
|
||||||
// char password[PACKET_STRING_SIZE]; //hashed, not currently used
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void serializeClient(void* buffer, ClientPacket* packet);
|
||||||
|
void deserializeClient(void* buffer, ClientPacket* packet);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#config
|
#config
|
||||||
INCLUDES+=. ../../gameplay ../../map ../../utilities
|
INCLUDES+=. .. ../../gameplay ../../map ../../utilities
|
||||||
LIBS+=
|
LIBS+=
|
||||||
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
||||||
|
|
||||||
+20
-30
@@ -19,27 +19,22 @@
|
|||||||
* 3. This notice may not be removed or altered from any source
|
* 3. This notice may not be removed or altered from any source
|
||||||
* distribution.
|
* distribution.
|
||||||
*/
|
*/
|
||||||
#include "serial.hpp"
|
#include "region_packet.hpp"
|
||||||
|
|
||||||
#include "serial_util.hpp"
|
#include "serial_utility.hpp"
|
||||||
|
|
||||||
void serializeRegionFormat(RegionPacket* packet, void* buffer) {
|
void serializeRegionContent(void* buffer, RegionPacket* packet) {
|
||||||
SERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
serialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
//format
|
//format
|
||||||
SERIALIZE(buffer, &packet->roomIndex, sizeof(int));
|
serialCopy(&buffer, &packet->roomIndex, sizeof(int));
|
||||||
SERIALIZE(buffer, &packet->x, sizeof(int));
|
serialCopy(&buffer, &packet->x, sizeof(int));
|
||||||
SERIALIZE(buffer, &packet->y, sizeof(int));
|
serialCopy(&buffer, &packet->y, sizeof(int));
|
||||||
|
|
||||||
|
if (packet->type != SerialPacketType::REGION_CONTENT) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void serializeRegionContent(RegionPacket* packet, void* buffer) {
|
|
||||||
SERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
//format
|
|
||||||
SERIALIZE(buffer, &packet->roomIndex, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->x, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->y, sizeof(int));
|
|
||||||
|
|
||||||
//tiles
|
//tiles
|
||||||
for (int i = 0; i < REGION_WIDTH; i++) {
|
for (int i = 0; i < REGION_WIDTH; i++) {
|
||||||
for (int j = 0; j < REGION_HEIGHT; j++) {
|
for (int j = 0; j < REGION_HEIGHT; j++) {
|
||||||
@@ -51,26 +46,21 @@ void serializeRegionContent(RegionPacket* packet, void* buffer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//solids
|
//solids
|
||||||
SERIALIZE(buffer, packet->region->GetSolidBitset(), REGION_SOLID_FOOTPRINT);
|
serialCopy(&buffer, packet->region->GetSolidBitset(), REGION_SOLID_FOOTPRINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserializeRegionFormat(RegionPacket* packet, void* buffer) {
|
void deserializeRegionContent(void* buffer, RegionPacket* packet) {
|
||||||
DESERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
deserialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
//format
|
//format
|
||||||
DESERIALIZE(buffer, &packet->roomIndex, sizeof(int));
|
deserialCopy(&buffer, &packet->roomIndex, sizeof(int));
|
||||||
DESERIALIZE(buffer, &packet->x, sizeof(int));
|
deserialCopy(&buffer, &packet->x, sizeof(int));
|
||||||
DESERIALIZE(buffer, &packet->y, sizeof(int));
|
deserialCopy(&buffer, &packet->y, sizeof(int));
|
||||||
|
|
||||||
|
if (packet->type != SerialPacketType::REGION_CONTENT) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserializeRegionContent(RegionPacket* packet, void* buffer) {
|
|
||||||
DESERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
//format
|
|
||||||
DESERIALIZE(buffer, &packet->roomIndex, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->x, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->y, sizeof(int));
|
|
||||||
|
|
||||||
//an object to work on
|
//an object to work on
|
||||||
packet->region = new Region(packet->x, packet->y);
|
packet->region = new Region(packet->x, packet->y);
|
||||||
|
|
||||||
@@ -85,5 +75,5 @@ void deserializeRegionContent(RegionPacket* packet, void* buffer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//solids
|
//solids
|
||||||
DESERIALIZE(buffer, packet->region->GetSolidBitset(), REGION_SOLID_FOOTPRINT);
|
deserialCopy(&buffer, packet->region->GetSolidBitset(), REGION_SOLID_FOOTPRINT);
|
||||||
}
|
}
|
||||||
+17
-15
@@ -19,28 +19,30 @@
|
|||||||
* 3. This notice may not be removed or altered from any source
|
* 3. This notice may not be removed or altered from any source
|
||||||
* distribution.
|
* distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef COMBATPACKET_HPP_
|
#ifndef REGIONPACKET_HPP_
|
||||||
#define COMBATPACKET_HPP_
|
#define REGIONPACKET_HPP_
|
||||||
|
|
||||||
#include "serial_packet_base.hpp"
|
#include "serial_packet_base.hpp"
|
||||||
|
|
||||||
#include "combat_defines.hpp"
|
#include "region.hpp"
|
||||||
|
|
||||||
struct CombatPacket : SerialPacketBase {
|
#include <cmath>
|
||||||
//identify the combat instance
|
|
||||||
int combatIndex;
|
|
||||||
int difficulty;
|
|
||||||
TerrainType terrainType;
|
|
||||||
|
|
||||||
//combatants
|
//define the memory footprint for the region's members
|
||||||
int characterArray[COMBAT_MAX_CHARACTERS];
|
constexpr int REGION_TILE_FOOTPRINT = sizeof(Region::type_t) * REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH;
|
||||||
int enemyArray[COMBAT_MAX_ENEMIES];
|
constexpr int REGION_SOLID_FOOTPRINT = ceil(REGION_WIDTH * REGION_HEIGHT / 8.0);
|
||||||
|
constexpr int REGION_METADATA_FOOTPRINT = sizeof(int) * 3;
|
||||||
|
|
||||||
//location
|
struct RegionPacket : SerialPacketBase {
|
||||||
int mapIndex;
|
//location/identify the region
|
||||||
Vector2 origin;
|
int roomIndex;
|
||||||
|
int x, y;
|
||||||
|
|
||||||
//TODO: gameplay components: rewards
|
//the data
|
||||||
|
Region* region;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void serializeRegion(void* buffer, RegionPacket* packet);
|
||||||
|
void deserializeRegion(void* buffer, RegionPacket* packet);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
+2
-16
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2013, 2014
|
/* Copyright: (c) Kayne Ruse 2014
|
||||||
*
|
*
|
||||||
* This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
@@ -19,20 +19,6 @@
|
|||||||
* 3. This notice may not be removed or altered from any source
|
* 3. This notice may not be removed or altered from any source
|
||||||
* distribution.
|
* distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef REGIONPACKET_HPP_
|
|
||||||
#define REGIONPACKET_HPP_
|
|
||||||
|
|
||||||
#include "serial_packet_base.hpp"
|
#include "serial_packet_base.hpp"
|
||||||
|
|
||||||
#include "region.hpp"
|
//sanity check
|
||||||
|
|
||||||
struct RegionPacket : SerialPacketBase {
|
|
||||||
//location/identify the region
|
|
||||||
int roomIndex;
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
//the data
|
|
||||||
Region* region;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
-7
@@ -22,15 +22,10 @@
|
|||||||
#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;
|
|
||||||
constexpr int PACKET_STRING_SIZE = 100;
|
constexpr int PACKET_STRING_SIZE = 100;
|
||||||
|
|
||||||
struct SerialPacketBase {
|
struct SerialPacketBase {
|
||||||
@@ -41,6 +36,4 @@ struct SerialPacketBase {
|
|||||||
virtual ~SerialPacketBase() {};
|
virtual ~SerialPacketBase() {};
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef SerialPacketBase SerialPacket;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
/* Copyright: (c) Kayne Ruse 2014
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
*
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
*
|
||||||
|
* 3. This notice may not be removed or altered from any source
|
||||||
|
* distribution.
|
||||||
|
*/
|
||||||
|
#include "serial_statistics.hpp"
|
||||||
|
|
||||||
|
#include "serial_utility.hpp"
|
||||||
|
|
||||||
|
void serializeStatistics(void** buffer, Statistics* stats) {
|
||||||
|
//integers
|
||||||
|
serialCopy(buffer, &stats->level, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->exp, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->maxHP, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->health, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->maxMP, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->mana, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->attack, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->defence, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->intelligence, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->resistance, sizeof(int));
|
||||||
|
serialCopy(buffer, &stats->speed, sizeof(int));
|
||||||
|
|
||||||
|
//floats
|
||||||
|
serialCopy(buffer, &stats->accuracy, sizeof(float));
|
||||||
|
serialCopy(buffer, &stats->evasion, sizeof(float));
|
||||||
|
serialCopy(buffer, &stats->luck, sizeof(float));
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserializeStatistics(void** buffer, Statistics* stats) {
|
||||||
|
//integers
|
||||||
|
deserialCopy(buffer, &stats->level, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->exp, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->maxHP, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->health, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->maxMP, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->mana, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->attack, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->defence, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->intelligence, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->resistance, sizeof(int));
|
||||||
|
deserialCopy(buffer, &stats->speed, sizeof(int));
|
||||||
|
|
||||||
|
//floats
|
||||||
|
deserialCopy(buffer, &stats->accuracy, sizeof(float));
|
||||||
|
deserialCopy(buffer, &stats->evasion, sizeof(float));
|
||||||
|
deserialCopy(buffer, &stats->luck, sizeof(float));
|
||||||
|
}
|
||||||
+9
-7
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2013, 2014
|
/* Copyright: (c) Kayne Ruse 2014
|
||||||
*
|
*
|
||||||
* This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
@@ -19,10 +19,12 @@
|
|||||||
* 3. This notice may not be removed or altered from any source
|
* 3. This notice may not be removed or altered from any source
|
||||||
* distribution.
|
* distribution.
|
||||||
*/
|
*/
|
||||||
#include "serial_packet.hpp"
|
#ifndef SERIALSTATISTICS_HPP_
|
||||||
|
#define SERIALSTATISTICS_HPP_
|
||||||
|
|
||||||
/* DOCS: Sanity check, read more
|
#include "statistics.hpp"
|
||||||
* Since most/all of the files in this directory are header files, I've created
|
|
||||||
* this source file as a "sanity check", to ensure that the above header files
|
void serializeStatistics(void** buffer, Statistics* stats);
|
||||||
* are written correctly via make.
|
void deserializeStatistics(void** buffer, Statistics* stats);
|
||||||
*/
|
|
||||||
|
#endif
|
||||||
+12
-12
@@ -19,24 +19,24 @@
|
|||||||
* 3. This notice may not be removed or altered from any source
|
* 3. This notice may not be removed or altered from any source
|
||||||
* distribution.
|
* distribution.
|
||||||
*/
|
*/
|
||||||
#include "serial.hpp"
|
#include "server_packet.hpp"
|
||||||
|
|
||||||
#include "serial_util.hpp"
|
#include "serial_utility.hpp"
|
||||||
|
|
||||||
void serializeServer(ServerPacket* packet, void* buffer) {
|
void serializeServer(void* buffer, ServerPacket* packet) {
|
||||||
SERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
serialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
//identify the server
|
//identify the server
|
||||||
SERIALIZE(buffer, &packet->name, PACKET_STRING_SIZE);
|
serialCopy(&buffer, packet->name, PACKET_STRING_SIZE);
|
||||||
SERIALIZE(buffer, &packet->playerCount, sizeof(int));
|
serialCopy(&buffer, &packet->playerCount, sizeof(int));
|
||||||
SERIALIZE(buffer, &packet->version, sizeof(int));
|
serialCopy(&buffer, &packet->version, sizeof(int));
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserializeServer(ServerPacket* packet, void* buffer) {
|
void deserializeServer(void* buffer, ServerPacket* packet) {
|
||||||
DESERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
deserialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
|
||||||
//identify the server
|
//identify the server
|
||||||
DESERIALIZE(buffer, &packet->name, PACKET_STRING_SIZE);
|
deserialCopy(&buffer, packet->name, PACKET_STRING_SIZE);
|
||||||
DESERIALIZE(buffer, &packet->playerCount, sizeof(int));
|
deserialCopy(&buffer, &packet->playerCount, sizeof(int));
|
||||||
DESERIALIZE(buffer, &packet->version, sizeof(int));
|
deserialCopy(&buffer, &packet->version, sizeof(int));
|
||||||
}
|
}
|
||||||
+3
@@ -31,4 +31,7 @@ struct ServerPacket : SerialPacketBase {
|
|||||||
int version;
|
int version;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void serializeServer(void* buffer, ServerPacket* packet);
|
||||||
|
void deserializeServer(void* buffer, ServerPacket* packet);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
#config
|
|
||||||
INCLUDES+=. ../packet ../../gameplay ../../map ../../utilities
|
|
||||||
LIBS+=
|
|
||||||
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
|
||||||
|
|
||||||
#source
|
|
||||||
CXXSRC=$(wildcard *.cpp)
|
|
||||||
|
|
||||||
#objects
|
|
||||||
OBJDIR=obj
|
|
||||||
OBJ+=$(addprefix $(OBJDIR)/,$(CXXSRC:.cpp=.o))
|
|
||||||
|
|
||||||
#output
|
|
||||||
OUTDIR=../../..
|
|
||||||
OUT=$(addprefix $(OUTDIR)/,libcommon.a)
|
|
||||||
|
|
||||||
#targets
|
|
||||||
all: $(OBJ) $(OUT)
|
|
||||||
ar -crs $(OUT) $(OBJ)
|
|
||||||
|
|
||||||
$(OBJ): | $(OBJDIR)
|
|
||||||
|
|
||||||
$(OUT): | $(OUTDIR)
|
|
||||||
|
|
||||||
$(OBJDIR):
|
|
||||||
mkdir $(OBJDIR)
|
|
||||||
|
|
||||||
$(OUTDIR):
|
|
||||||
mkdir $(OUTDIR)
|
|
||||||
|
|
||||||
$(OBJDIR)/%.o: %.cpp
|
|
||||||
$(CXX) $(CXXFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) *.o *.a *.exe
|
|
||||||
|
|
||||||
rebuild: clean all
|
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2014
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
*/
|
|
||||||
#include "serial.hpp"
|
|
||||||
|
|
||||||
#include "serial_util.hpp"
|
|
||||||
|
|
||||||
//simple type functions
|
|
||||||
void serializeType(SerialPacketBase* packet, void* buffer) {
|
|
||||||
SERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserializeType(SerialPacketBase* packet, void* buffer) {
|
|
||||||
DESERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
}
|
|
||||||
|
|
||||||
//main switch functions
|
|
||||||
void serializePacket(SerialPacketBase* packet, void* buffer) {
|
|
||||||
switch(packet->type) {
|
|
||||||
//no extra data
|
|
||||||
case SerialPacketType::NONE:
|
|
||||||
case SerialPacketType::PING:
|
|
||||||
case SerialPacketType::PONG:
|
|
||||||
case SerialPacketType::BROADCAST_REQUEST:
|
|
||||||
|
|
||||||
//all rejections
|
|
||||||
case SerialPacketType::JOIN_REJECTION:
|
|
||||||
case SerialPacketType::CHARACTER_REJECTION:
|
|
||||||
case SerialPacketType::ENEMY_REJECTION:
|
|
||||||
case SerialPacketType::COMBAT_REJECTION:
|
|
||||||
|
|
||||||
serializeType(packet, buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//character info
|
|
||||||
case SerialPacketType::CHARACTER_NEW:
|
|
||||||
case SerialPacketType::CHARACTER_DELETE:
|
|
||||||
case SerialPacketType::CHARACTER_UPDATE:
|
|
||||||
case SerialPacketType::CHARACTER_STATS_REQUEST:
|
|
||||||
case SerialPacketType::CHARACTER_STATS_RESPONSE:
|
|
||||||
serializeCharacter(static_cast<CharacterPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//client info
|
|
||||||
case SerialPacketType::JOIN_REQUEST:
|
|
||||||
case SerialPacketType::JOIN_RESPONSE:
|
|
||||||
case SerialPacketType::SYNCHRONIZE:
|
|
||||||
case SerialPacketType::DISCONNECT:
|
|
||||||
case SerialPacketType::SHUTDOWN:
|
|
||||||
serializeClient(static_cast<ClientPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//combat info
|
|
||||||
case SerialPacketType::COMBAT_NEW:
|
|
||||||
case SerialPacketType::COMBAT_DELETE:
|
|
||||||
case SerialPacketType::COMBAT_UPDATE:
|
|
||||||
|
|
||||||
case SerialPacketType::COMBAT_ENTER_REQUEST:
|
|
||||||
case SerialPacketType::COMBAT_ENTER_RESPONSE:
|
|
||||||
case SerialPacketType::COMBAT_EXIT_REQUEST:
|
|
||||||
case SerialPacketType::COMBAT_EXIT_RESPONSE:
|
|
||||||
|
|
||||||
serializeCombat(static_cast<CombatPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//enemy info
|
|
||||||
case SerialPacketType::ENEMY_NEW:
|
|
||||||
case SerialPacketType::ENEMY_DELETE:
|
|
||||||
case SerialPacketType::ENEMY_UPDATE:
|
|
||||||
case SerialPacketType::ENEMY_STATS_REQUEST:
|
|
||||||
case SerialPacketType::ENEMY_STATS_RESPONSE:
|
|
||||||
serializeEnemy(static_cast<EnemyPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//region info
|
|
||||||
case SerialPacketType::REGION_REQUEST:
|
|
||||||
serializeRegionFormat(static_cast<RegionPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SerialPacketType::REGION_CONTENT:
|
|
||||||
serializeRegionContent(static_cast<RegionPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//server info
|
|
||||||
case SerialPacketType::BROADCAST_RESPONSE:
|
|
||||||
serializeServer(static_cast<ServerPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserializePacket(SerialPacketBase* packet, void* buffer) {
|
|
||||||
//find the type, so that you can actually deserialize the packet!
|
|
||||||
deserializeType(packet, buffer);
|
|
||||||
switch(packet->type) {
|
|
||||||
//no extra data
|
|
||||||
case SerialPacketType::NONE:
|
|
||||||
case SerialPacketType::PING:
|
|
||||||
case SerialPacketType::PONG:
|
|
||||||
case SerialPacketType::BROADCAST_REQUEST:
|
|
||||||
|
|
||||||
//all rejections
|
|
||||||
case SerialPacketType::JOIN_REJECTION:
|
|
||||||
case SerialPacketType::CHARACTER_REJECTION:
|
|
||||||
case SerialPacketType::ENEMY_REJECTION:
|
|
||||||
case SerialPacketType::COMBAT_REJECTION:
|
|
||||||
|
|
||||||
//NOTHING
|
|
||||||
break;
|
|
||||||
|
|
||||||
//character info
|
|
||||||
case SerialPacketType::CHARACTER_NEW:
|
|
||||||
case SerialPacketType::CHARACTER_DELETE:
|
|
||||||
case SerialPacketType::CHARACTER_UPDATE:
|
|
||||||
case SerialPacketType::CHARACTER_STATS_REQUEST:
|
|
||||||
case SerialPacketType::CHARACTER_STATS_RESPONSE:
|
|
||||||
deserializeCharacter(static_cast<CharacterPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//client info
|
|
||||||
case SerialPacketType::JOIN_REQUEST:
|
|
||||||
case SerialPacketType::JOIN_RESPONSE:
|
|
||||||
case SerialPacketType::SYNCHRONIZE:
|
|
||||||
case SerialPacketType::DISCONNECT:
|
|
||||||
case SerialPacketType::SHUTDOWN:
|
|
||||||
deserializeClient(static_cast<ClientPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//combat info
|
|
||||||
case SerialPacketType::COMBAT_NEW:
|
|
||||||
case SerialPacketType::COMBAT_DELETE:
|
|
||||||
case SerialPacketType::COMBAT_UPDATE:
|
|
||||||
|
|
||||||
case SerialPacketType::COMBAT_ENTER_REQUEST:
|
|
||||||
case SerialPacketType::COMBAT_ENTER_RESPONSE:
|
|
||||||
case SerialPacketType::COMBAT_EXIT_REQUEST:
|
|
||||||
case SerialPacketType::COMBAT_EXIT_RESPONSE:
|
|
||||||
|
|
||||||
serializeCombat(static_cast<CombatPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//enemy info
|
|
||||||
case SerialPacketType::ENEMY_NEW:
|
|
||||||
case SerialPacketType::ENEMY_DELETE:
|
|
||||||
case SerialPacketType::ENEMY_UPDATE:
|
|
||||||
case SerialPacketType::ENEMY_STATS_REQUEST:
|
|
||||||
case SerialPacketType::ENEMY_STATS_RESPONSE:
|
|
||||||
serializeEnemy(static_cast<EnemyPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//region info
|
|
||||||
case SerialPacketType::REGION_REQUEST:
|
|
||||||
deserializeRegionFormat(static_cast<RegionPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SerialPacketType::REGION_CONTENT:
|
|
||||||
deserializeRegionContent(static_cast<RegionPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
//server info
|
|
||||||
case SerialPacketType::BROADCAST_RESPONSE:
|
|
||||||
deserializeServer(static_cast<ServerPacket*>(packet), buffer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2014
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
*/
|
|
||||||
#ifndef SERIALIZE_HPP_
|
|
||||||
#define SERIALIZE_HPP_
|
|
||||||
|
|
||||||
#include "serial_packet.hpp"
|
|
||||||
|
|
||||||
#include "region.hpp"
|
|
||||||
#include "statistics.hpp"
|
|
||||||
|
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
//Primary interface functions
|
|
||||||
void serializePacket(SerialPacketBase*, void* dest);
|
|
||||||
void deserializePacket(SerialPacketBase*, void* src);
|
|
||||||
|
|
||||||
void serializeType(SerialPacketBase*, void*);
|
|
||||||
void deserializeType(SerialPacketBase*, void*);
|
|
||||||
|
|
||||||
//utility functions, exposed
|
|
||||||
void serializeCharacter(CharacterPacket*, void*);
|
|
||||||
void serializeClient(ClientPacket*, void*);
|
|
||||||
void serializeCombat(CombatPacket*, void*);
|
|
||||||
void serializeEnemy(EnemyPacket*, void*);
|
|
||||||
void serializeRegionFormat(RegionPacket*, void*);
|
|
||||||
void serializeRegionContent(RegionPacket*, void*);
|
|
||||||
void serializeServer(ServerPacket*, void*);
|
|
||||||
void serializeStatistics(Statistics*, void*);
|
|
||||||
|
|
||||||
void deserializeCharacter(CharacterPacket*, void*);
|
|
||||||
void deserializeClient(ClientPacket*, void*);
|
|
||||||
void deserializeCombat(CombatPacket*, void*);
|
|
||||||
void deserializeEnemy(EnemyPacket*, void*);
|
|
||||||
void deserializeRegionFormat(RegionPacket*, void*);
|
|
||||||
void deserializeRegionContent(RegionPacket*, void*);
|
|
||||||
void deserializeServer(ServerPacket*, void*);
|
|
||||||
void deserializeStatistics(Statistics*, void*);
|
|
||||||
|
|
||||||
/* DOCS: PACKET_BUFFER_SIZE is the memory required to store serialized data
|
|
||||||
* DOCS: SerialPacketType::REGION_CONTENT is currently the largest packet type
|
|
||||||
* Serialized packet structure:
|
|
||||||
* SerialPacketType
|
|
||||||
* room index
|
|
||||||
* X & Y position
|
|
||||||
* tile data (3 layers)
|
|
||||||
* 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_SOLID_FOOTPRINT = ceil(REGION_WIDTH * REGION_HEIGHT / 8.0);
|
|
||||||
constexpr int PACKET_BUFFER_SIZE = sizeof(SerialPacketType) + sizeof(int) * 3 + REGION_TILE_FOOTPRINT + REGION_SOLID_FOOTPRINT;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2014
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
*/
|
|
||||||
#include "serial.hpp"
|
|
||||||
|
|
||||||
#include "serial_util.hpp"
|
|
||||||
|
|
||||||
void serializeCharacter(CharacterPacket* packet, void* buffer) {
|
|
||||||
SERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
//identify the character
|
|
||||||
SERIALIZE(buffer, &packet->characterIndex, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->handle, PACKET_STRING_SIZE);
|
|
||||||
SERIALIZE(buffer, &packet->avatar, PACKET_STRING_SIZE);
|
|
||||||
|
|
||||||
//the owner
|
|
||||||
SERIALIZE(buffer, &packet->accountIndex, sizeof(int));
|
|
||||||
|
|
||||||
//location
|
|
||||||
SERIALIZE(buffer, &packet->roomIndex, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->origin.x, sizeof(double));
|
|
||||||
SERIALIZE(buffer, &packet->origin.y, sizeof(double));
|
|
||||||
SERIALIZE(buffer, &packet->motion.x, sizeof(double));
|
|
||||||
SERIALIZE(buffer, &packet->motion.y, sizeof(double));
|
|
||||||
|
|
||||||
//stats structure
|
|
||||||
serializeStatistics(&packet->stats, buffer);
|
|
||||||
buffer = reinterpret_cast<char*>(buffer) + sizeof(Statistics);
|
|
||||||
|
|
||||||
//TODO: gameplay components: equipment, items, buffs, debuffs
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserializeCharacter(CharacterPacket* packet, void* buffer) {
|
|
||||||
DESERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
//identify the character
|
|
||||||
DESERIALIZE(buffer, &packet->characterIndex, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->handle, PACKET_STRING_SIZE);
|
|
||||||
DESERIALIZE(buffer, &packet->avatar, PACKET_STRING_SIZE);
|
|
||||||
|
|
||||||
//the owner
|
|
||||||
DESERIALIZE(buffer, &packet->accountIndex, sizeof(int));
|
|
||||||
|
|
||||||
//location
|
|
||||||
DESERIALIZE(buffer, &packet->roomIndex, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->origin.x, sizeof(double));
|
|
||||||
DESERIALIZE(buffer, &packet->origin.y, sizeof(double));
|
|
||||||
DESERIALIZE(buffer, &packet->motion.x, sizeof(double));
|
|
||||||
DESERIALIZE(buffer, &packet->motion.y, sizeof(double));
|
|
||||||
|
|
||||||
//stats structure
|
|
||||||
deserializeStatistics(&packet->stats, buffer);
|
|
||||||
buffer = reinterpret_cast<char*>(buffer) + sizeof(Statistics);
|
|
||||||
|
|
||||||
//TODO: gameplay components: equipment, items, buffs, debuffs
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2014
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
*/
|
|
||||||
#include "serial.hpp"
|
|
||||||
|
|
||||||
#include "serial_util.hpp"
|
|
||||||
|
|
||||||
void serializeClient(ClientPacket* packet, void* buffer) {
|
|
||||||
SERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
SERIALIZE(buffer, &packet->clientIndex, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->accountIndex, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->username, PACKET_STRING_SIZE);
|
|
||||||
// SERIALIZE(buffer, &packet->password, PACKET_STRING_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserializeClient(ClientPacket* packet, void* buffer) {
|
|
||||||
DESERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
DESERIALIZE(buffer, &packet->clientIndex, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->accountIndex, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->username, PACKET_STRING_SIZE);
|
|
||||||
// DESERIALIZE(buffer, &packet->password, PACKET_STRING_SIZE);
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2014
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
*/
|
|
||||||
#include "serial.hpp"
|
|
||||||
|
|
||||||
#include "serial_util.hpp"
|
|
||||||
|
|
||||||
void serializeCombat(CombatPacket* packet, void* buffer) {
|
|
||||||
SERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
//identify the combat instance
|
|
||||||
SERIALIZE(buffer, &packet->combatIndex, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->difficulty, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->terrainType, sizeof(TerrainType));
|
|
||||||
|
|
||||||
//combatants
|
|
||||||
SERIALIZE(buffer, &packet->characterArray, sizeof(int) * COMBAT_MAX_CHARACTERS);
|
|
||||||
SERIALIZE(buffer, &packet->enemyArray, sizeof(int) * COMBAT_MAX_ENEMIES);
|
|
||||||
|
|
||||||
//location
|
|
||||||
SERIALIZE(buffer, &packet->mapIndex, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->origin.x, sizeof(double));
|
|
||||||
SERIALIZE(buffer, &packet->origin.y, sizeof(double));
|
|
||||||
|
|
||||||
//TODO: gameplay components: rewards
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserializeCombat(CombatPacket* packet, void* buffer) {
|
|
||||||
DESERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
//identify the combat instance
|
|
||||||
DESERIALIZE(buffer, &packet->combatIndex, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->difficulty, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->terrainType, sizeof(TerrainType));
|
|
||||||
|
|
||||||
//combatants
|
|
||||||
DESERIALIZE(buffer, &packet->characterArray, sizeof(int) * COMBAT_MAX_CHARACTERS);
|
|
||||||
DESERIALIZE(buffer, &packet->enemyArray, sizeof(int) * COMBAT_MAX_ENEMIES);
|
|
||||||
|
|
||||||
//location
|
|
||||||
DESERIALIZE(buffer, &packet->mapIndex, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->origin.x, sizeof(double));
|
|
||||||
DESERIALIZE(buffer, &packet->origin.y, sizeof(double));
|
|
||||||
|
|
||||||
//TODO: gameplay components: rewards
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2014
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
*/
|
|
||||||
#include "serial.hpp"
|
|
||||||
|
|
||||||
#include "serial_util.hpp"
|
|
||||||
|
|
||||||
void serializeEnemy(EnemyPacket* packet, void* buffer) {
|
|
||||||
SERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
//identify the enemy
|
|
||||||
SERIALIZE(buffer, &packet->enemyIndex, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &packet->handle, PACKET_STRING_SIZE);
|
|
||||||
SERIALIZE(buffer, &packet->avatar, PACKET_STRING_SIZE);
|
|
||||||
|
|
||||||
//gameplay
|
|
||||||
|
|
||||||
//stats structure
|
|
||||||
serializeStatistics(&packet->stats, buffer);
|
|
||||||
buffer = reinterpret_cast<char*>(buffer) + sizeof(Statistics);
|
|
||||||
|
|
||||||
//TODO: gameplay components: equipment, items, buffs, debuffs, rewards
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserializeEnemy(EnemyPacket* packet, void* buffer) {
|
|
||||||
DESERIALIZE(buffer, &packet->type, sizeof(SerialPacketType));
|
|
||||||
|
|
||||||
//identify the enemy
|
|
||||||
DESERIALIZE(buffer, &packet->enemyIndex, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &packet->handle, PACKET_STRING_SIZE);
|
|
||||||
DESERIALIZE(buffer, &packet->avatar, PACKET_STRING_SIZE);
|
|
||||||
|
|
||||||
//stats structure
|
|
||||||
deserializeStatistics(&packet->stats, buffer);
|
|
||||||
buffer = reinterpret_cast<char*>(buffer) + sizeof(Statistics);
|
|
||||||
|
|
||||||
//TODO: gameplay components: equipment, items, buffs, debuffs, rewards
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
/* Copyright: (c) Kayne Ruse 2014
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
*/
|
|
||||||
#include "serial.hpp"
|
|
||||||
|
|
||||||
#include "serial_util.hpp"
|
|
||||||
|
|
||||||
void serializeStatistics(Statistics* stats, void* buffer) {
|
|
||||||
//integers
|
|
||||||
SERIALIZE(buffer, &stats->level, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->exp, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->maxHP, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->health, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->maxMP, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->mana, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->attack, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->defence, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->intelligence, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->resistance, sizeof(int));
|
|
||||||
SERIALIZE(buffer, &stats->speed, sizeof(int));
|
|
||||||
|
|
||||||
//floats
|
|
||||||
SERIALIZE(buffer, &stats->accuracy, sizeof(float));
|
|
||||||
SERIALIZE(buffer, &stats->evasion, sizeof(float));
|
|
||||||
SERIALIZE(buffer, &stats->luck, sizeof(float));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void deserializeStatistics(Statistics* stats, void* buffer) {
|
|
||||||
//integers
|
|
||||||
DESERIALIZE(buffer, &stats->level, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->exp, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->maxHP, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->health, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->maxMP, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->mana, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->attack, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->defence, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->intelligence, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->resistance, sizeof(int));
|
|
||||||
DESERIALIZE(buffer, &stats->speed, sizeof(int));
|
|
||||||
|
|
||||||
//floats
|
|
||||||
DESERIALIZE(buffer, &stats->accuracy, sizeof(float));
|
|
||||||
DESERIALIZE(buffer, &stats->evasion, sizeof(float));
|
|
||||||
DESERIALIZE(buffer, &stats->luck, sizeof(float));
|
|
||||||
}
|
|
||||||
@@ -22,23 +22,41 @@
|
|||||||
#ifndef SERIALPACKET_HPP_
|
#ifndef SERIALPACKET_HPP_
|
||||||
#define SERIALPACKET_HPP_
|
#define SERIALPACKET_HPP_
|
||||||
|
|
||||||
|
#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 "enemy_packet.hpp"
|
|
||||||
#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;
|
||||||
|
|
||||||
|
//DOCS: NETWORK_VERSION is used to discern compatible servers and clients
|
||||||
|
constexpr int NETWORK_VERSION = -1;
|
||||||
|
|
||||||
union MaxPacket {
|
union MaxPacket {
|
||||||
CharacterPacket a;
|
CharacterPacket a;
|
||||||
ClientPacket b;
|
ClientPacket b;
|
||||||
CombatPacket c;
|
RegionPacket c;
|
||||||
EnemyPacket d;
|
ServerPacket d;
|
||||||
RegionPacket e;
|
|
||||||
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: SerialPacketType::REGION_CONTENT is currently the largest packet type
|
||||||
|
* Serialized RegionPacket structure:
|
||||||
|
* SerialPacketType
|
||||||
|
* room index (int)
|
||||||
|
* X & Y position (int)
|
||||||
|
* tile data (3 layers)
|
||||||
|
* solid data (bitset)
|
||||||
|
*/
|
||||||
|
|
||||||
|
constexpr int PACKET_BUFFER_SIZE =
|
||||||
|
sizeof(SerialPacketType) +
|
||||||
|
REGION_METADATA_FOOTPRINT +
|
||||||
|
REGION_TILE_FOOTPRINT +
|
||||||
|
REGION_SOLID_FOOTPRINT;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
/* Copyright: (c) Kayne Ruse 2013, 2014
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
*
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
*
|
||||||
|
* 3. This notice may not be removed or altered from any source
|
||||||
|
* distribution.
|
||||||
|
*/
|
||||||
|
#ifndef SERIALPACKETTYPE_HPP_
|
||||||
|
#define SERIALPACKETTYPE_HPP_
|
||||||
|
|
||||||
|
/* DOCS: The headers indicate what packet type is used for each message
|
||||||
|
* different messages under the same header will carry different amounts of
|
||||||
|
* valid data, but it will still be carried in that packet's format.
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum class SerialPacketType {
|
||||||
|
//default: there is something wrong
|
||||||
|
NONE = 0,
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
//ServerPacket
|
||||||
|
// name, player count, version
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//heartbeat
|
||||||
|
PING,
|
||||||
|
PONG,
|
||||||
|
|
||||||
|
//Used for finding available servers
|
||||||
|
BROADCAST_REQUEST,
|
||||||
|
BROADCAST_RESPONSE,
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
//ClientPacket
|
||||||
|
// client index, account index, character index
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//Connecting to a server as a client
|
||||||
|
JOIN_REQUEST,
|
||||||
|
JOIN_RESPONSE,
|
||||||
|
JOIN_REJECTION,
|
||||||
|
|
||||||
|
//client requests all information from the server
|
||||||
|
SYNCHRONIZE,
|
||||||
|
|
||||||
|
//disconnect from the server
|
||||||
|
DISCONNECT,
|
||||||
|
|
||||||
|
//shut down the server
|
||||||
|
SHUTDOWN,
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
//RegionPacket
|
||||||
|
// room index, x, y, raw data
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//map data
|
||||||
|
REGION_REQUEST,
|
||||||
|
REGION_CONTENT,
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
//CharacterPacket
|
||||||
|
// handle, avatar, character index, account index,
|
||||||
|
// room index, origin, motion
|
||||||
|
// statistics
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//controlling characters
|
||||||
|
CHARACTER_NEW,
|
||||||
|
CHARACTER_DELETE,
|
||||||
|
CHARACTER_UPDATE,
|
||||||
|
|
||||||
|
//authentication, character index => character stats
|
||||||
|
CHARACTER_STATS_REQUEST,
|
||||||
|
CHARACTER_STATS_RESPONSE,
|
||||||
|
|
||||||
|
//reject a character request
|
||||||
|
CHARACTER_REJECTION,
|
||||||
|
|
||||||
|
//not used
|
||||||
|
LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
/* Copyright: (c) Kayne Ruse 2014
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
*
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
*
|
||||||
|
* 3. This notice may not be removed or altered from any source
|
||||||
|
* distribution.
|
||||||
|
*/
|
||||||
|
#include "serial_utility.hpp"
|
||||||
|
|
||||||
|
//packet types
|
||||||
|
#include "character_packet.hpp"
|
||||||
|
#include "client_packet.hpp"
|
||||||
|
#include "region_packet.hpp"
|
||||||
|
#include "server_packet.hpp"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
//raw memory copy
|
||||||
|
void serialCopy(void** buffer, void* data, int size) {
|
||||||
|
memcpy(*buffer, data, size);
|
||||||
|
*buffer = static_cast<char*>(*buffer) + size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserialCopy(void** buffer, void* data, int size) {
|
||||||
|
memcpy(data, *buffer, size);
|
||||||
|
*buffer = static_cast<char*>(*buffer) + size;
|
||||||
|
}
|
||||||
|
|
||||||
|
//simple type functions
|
||||||
|
void serializeType(SerialPacketBase* packet, void* buffer) {
|
||||||
|
serialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserializeType(SerialPacketBase* packet, void* buffer) {
|
||||||
|
deserialCopy(&buffer, &packet->type, sizeof(SerialPacketType));
|
||||||
|
}
|
||||||
|
|
||||||
|
//main switch functions
|
||||||
|
void serializePacket(SerialPacketBase* packet, void* buffer) {
|
||||||
|
switch(packet->type) {
|
||||||
|
//TODO: implement the switch statement
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserializePacket(SerialPacketBase* packet, void* buffer) {
|
||||||
|
//find the type, so that you can actually deserialize the packet!
|
||||||
|
deserializeType(packet, buffer);
|
||||||
|
switch(packet->type) {
|
||||||
|
//TODO: implement the switch statement
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,13 +19,19 @@
|
|||||||
* 3. This notice may not be removed or altered from any source
|
* 3. This notice may not be removed or altered from any source
|
||||||
* distribution.
|
* distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef SERIALIZEUTIL_HPP_
|
#ifndef SERIALIZEUTILITY_HPP_
|
||||||
#define SERIALIZEUTIL_HPP_
|
#define SERIALIZEUTILITY_HPP_
|
||||||
|
|
||||||
|
#include "serial_packet_base.hpp"
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
//NOTE: The strange assignments here used in order to move the void* parameter
|
//raw memory copy
|
||||||
#define SERIALIZE(buffer, data, size) memcpy(buffer, data, size); buffer = reinterpret_cast<char*>(buffer) + size;
|
void serialCopy(void** buffer, void* data, int size);
|
||||||
#define DESERIALIZE(buffer, data, size) memcpy(data, buffer, size); buffer = reinterpret_cast<char*>(buffer) + size;
|
void deserialCopy(void** buffer, void* data, int size);
|
||||||
|
|
||||||
|
//primary functions
|
||||||
|
void serializePacket(SerialPacketBase* packet, void* buffer);
|
||||||
|
void deserializePacket(SerialPacketBase* packet, void* buffer);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -21,12 +21,13 @@
|
|||||||
*/
|
*/
|
||||||
#include "udp_network_utility.hpp"
|
#include "udp_network_utility.hpp"
|
||||||
|
|
||||||
#include "serial.hpp"
|
#include "serial_packet.hpp"
|
||||||
|
#include "serial_utility.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
|
||||||
//NOTE: don't confuse SerialPacket with UDPpacket
|
//NOTE: don't confuse SerialPacketBase with UDPpacket
|
||||||
|
|
||||||
void UDPNetworkUtility::Open(int port) {
|
void UDPNetworkUtility::Open(int port) {
|
||||||
socket = SDLNet_UDP_Open(port);
|
socket = SDLNet_UDP_Open(port);
|
||||||
@@ -152,10 +153,10 @@ int UDPNetworkUtility::Receive() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
//send a SerialPacket
|
//send a SerialPacketBase
|
||||||
//-------------------------
|
//-------------------------
|
||||||
|
|
||||||
int UDPNetworkUtility::SendTo(const char* ip, int port, SerialPacket* serialPacket) {
|
int UDPNetworkUtility::SendTo(const char* ip, int port, SerialPacketBase* serialPacket) {
|
||||||
IPaddress add;
|
IPaddress add;
|
||||||
if (SDLNet_ResolveHost(&add, ip, port) == -1) {
|
if (SDLNet_ResolveHost(&add, ip, port) == -1) {
|
||||||
throw(std::runtime_error("Failed to resolve a host"));
|
throw(std::runtime_error("Failed to resolve a host"));
|
||||||
@@ -164,7 +165,7 @@ int UDPNetworkUtility::SendTo(const char* ip, int port, SerialPacket* serialPack
|
|||||||
SendTo(&add, serialPacket);
|
SendTo(&add, serialPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacket* serialPacket) {
|
int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacketBase* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
serializePacket(serialPacket, packet->data);
|
serializePacket(serialPacket, packet->data);
|
||||||
packet->len = PACKET_BUFFER_SIZE;
|
packet->len = PACKET_BUFFER_SIZE;
|
||||||
@@ -179,7 +180,7 @@ int UDPNetworkUtility::SendTo(IPaddress* add, SerialPacket* serialPacket) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int UDPNetworkUtility::SendTo(int channel, SerialPacket* serialPacket) {
|
int UDPNetworkUtility::SendTo(int channel, SerialPacketBase* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
serializePacket(serialPacket, packet->data);
|
serializePacket(serialPacket, packet->data);
|
||||||
packet->len = PACKET_BUFFER_SIZE;
|
packet->len = PACKET_BUFFER_SIZE;
|
||||||
@@ -193,7 +194,7 @@ int UDPNetworkUtility::SendTo(int channel, SerialPacket* serialPacket) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int UDPNetworkUtility::SendToAllChannels(SerialPacket* serialPacket) {
|
int UDPNetworkUtility::SendToAllChannels(SerialPacketBase* serialPacket) {
|
||||||
memset(packet->data, 0, packet->maxlen);
|
memset(packet->data, 0, packet->maxlen);
|
||||||
serializePacket(serialPacket, packet->data);
|
serializePacket(serialPacket, packet->data);
|
||||||
packet->len = PACKET_BUFFER_SIZE;
|
packet->len = PACKET_BUFFER_SIZE;
|
||||||
@@ -210,7 +211,7 @@ int UDPNetworkUtility::SendToAllChannels(SerialPacket* serialPacket) {
|
|||||||
return sent;
|
return sent;
|
||||||
}
|
}
|
||||||
|
|
||||||
int UDPNetworkUtility::Receive(SerialPacket* serialPacket) {
|
int UDPNetworkUtility::Receive(SerialPacketBase* 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);
|
deserializePacket(serialPacket, packet->data);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
#define UDPNETWORKUTILITY_HPP_
|
#define UDPNETWORKUTILITY_HPP_
|
||||||
|
|
||||||
//common
|
//common
|
||||||
#include "serial_packet.hpp"
|
#include "serial_packet_base.hpp"
|
||||||
#include "singleton.hpp"
|
#include "singleton.hpp"
|
||||||
|
|
||||||
//APIs
|
//APIs
|
||||||
@@ -50,12 +50,12 @@ public:
|
|||||||
int SendToAllChannels(void* data, int len);
|
int SendToAllChannels(void* data, int len);
|
||||||
int Receive();
|
int Receive();
|
||||||
|
|
||||||
//send a SerialPacket
|
//send a SerialPacketBase
|
||||||
int SendTo(const char* ip, int port, SerialPacket* serialPacket);
|
int SendTo(const char* ip, int port, SerialPacketBase* serialPacket);
|
||||||
int SendTo(IPaddress* add, SerialPacket* serialPacket);
|
int SendTo(IPaddress* add, SerialPacketBase* serialPacket);
|
||||||
int SendTo(int channel, SerialPacket* serialPacket);
|
int SendTo(int channel, SerialPacketBase* serialPacket);
|
||||||
int SendToAllChannels(SerialPacket* serialPacket);
|
int SendToAllChannels(SerialPacketBase* serialPacket);
|
||||||
int Receive(SerialPacket* serialPacket);
|
int Receive(SerialPacketBase* serialPacket);
|
||||||
|
|
||||||
//accessors
|
//accessors
|
||||||
UDPpacket* GetPacket() const {
|
UDPpacket* GetPacket() const {
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
#config
|
#config
|
||||||
INCLUDES+=. accounts characters rooms ../common/debugging ../common/gameplay ../common/map ../common/network ../common/network/packet ../common/network/serial ../common/utilities
|
INCLUDES+=. accounts characters rooms ../common/debugging ../common/gameplay ../common/map ../common/network ../common/network/packet_types ../common/utilities
|
||||||
LIBS+=server.a ../libcommon.a -lSDL_net -lwsock32 -liphlpapi -lmingw32 -lSDLmain -lSDL -llua -lsqlite3
|
LIBS+=server.a ../libcommon.a -lSDL_net -lwsock32 -liphlpapi -lmingw32 -lSDLmain -lSDL -llua -lsqlite3
|
||||||
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
//common utilities
|
//common utilities
|
||||||
#include "udp_network_utility.hpp"
|
#include "udp_network_utility.hpp"
|
||||||
|
#include "serial_packet.hpp"
|
||||||
#include "config_utility.hpp"
|
#include "config_utility.hpp"
|
||||||
#include "singleton.hpp"
|
#include "singleton.hpp"
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "server_application.hpp"
|
#include "server_application.hpp"
|
||||||
|
|
||||||
//for PACKET_BUFFER_SIZE
|
|
||||||
#include "serial.hpp"
|
|
||||||
|
|
||||||
//utility functions
|
//utility functions
|
||||||
#include "sql_utility.hpp"
|
#include "sql_utility.hpp"
|
||||||
#include "utility.hpp"
|
#include "utility.hpp"
|
||||||
|
|||||||
Reference in New Issue
Block a user