R-Type  2
Doom but in better
Loading...
Searching...
No Matches
GameMessage.cpp
Go to the documentation of this file.
1#include "GameMessage.hpp"
2
3void serialize(const GameMessage &message, std::ostringstream &os) {
4 os.put(static_cast<char>(message.type));
5
6 switch (message.type) {
7 case P_CONNECT: {
8 os.write(reinterpret_cast<const char*>(&message.msg.cli_id), sizeof(message.msg.cli_id));
9 os.write(message.msg.username, 8);
10 break;
11 }
12 case P_DISCONNECT: {
13 os.write(reinterpret_cast<const char*>(&message.msg.cli_id), sizeof(message.msg.cli_id));
14 break;
15 }
16 case P_MOVE: {
17 os.write(reinterpret_cast<const char*>(&message.id), sizeof(message.id));
18 os.write(reinterpret_cast<const char*>(&message.msg.coords.x), sizeof(message.msg.coords.x));
19 os.write(reinterpret_cast<const char*>(&message.msg.coords.y), sizeof(message.msg.coords.y));
20 break;
21 }
22 case P_SHOOT: {
23 os.write(reinterpret_cast<const char*>(&message.id), sizeof(message.id));
24 break;
25 }
26 case P_SPAWN: {
27 os.write(reinterpret_cast<const char*>(&message.id), sizeof(message.id));
28 os.write(reinterpret_cast<const char*>(&message.msg.asset_id), sizeof(message.msg.asset_id));
29 os.write(reinterpret_cast<const char*>(&message.msg.coords.x), sizeof(message.msg.coords.x));
30 os.write(reinterpret_cast<const char*>(&message.msg.coords.y), sizeof(message.msg.coords.y));
31 break;
32 }
33 case P_KILL: {
34 os.write(reinterpret_cast<const char*>(&message.id), sizeof(message.id));
35 break;
36 }
37 case P_DAMAGE: {
38 os.write(reinterpret_cast<const char*>(&message.id), sizeof(message.id));
39 break;
40 }
41 case P_STATUS: {
42 os.write(reinterpret_cast<const char*>(&message.msg.status), sizeof(message.msg.status));
43 break;
44 }
45 case P_ERROR: {
46 }
47 default: {
48 break;
49 }
50 }
51}
52
53
54GameMessage deserialize(std::istringstream &is) {
55 GameMessage message;
56 message.type = static_cast<messageType>(is.get());
57
58 switch (message.type) {
59 case P_CONNECT: {
60 is.read(reinterpret_cast<char*>(&message.msg.cli_id), sizeof(message.msg.cli_id));
61 is.read(message.msg.username, 8);
62 message.msg.username[8] = '\0';
63 break;
64 }
65 case P_DISCONNECT: {
66 is.read(reinterpret_cast<char*>(&message.msg.cli_id), sizeof(message.msg.cli_id));
67 break;
68 }
69 case P_MOVE: {
70 is.read(reinterpret_cast<char*>(&message.id), sizeof(message.id));
71 is.read(reinterpret_cast<char*>(&message.msg.coords.x), sizeof(message.msg.coords.x));
72 is.read(reinterpret_cast<char*>(&message.msg.coords.y), sizeof(message.msg.coords.y));
73 break;
74 }
75 case P_SHOOT: {
76 is.read(reinterpret_cast<char*>(&message.id), sizeof(message.id));
77 break;
78 }
79 case P_SPAWN: {
80 is.read(reinterpret_cast<char*>(&message.id), sizeof(message.id));
81 is.read(reinterpret_cast<char*>(&message.msg.asset_id), sizeof(message.msg.asset_id));
82 is.read(reinterpret_cast<char*>(&message.msg.coords.x), sizeof(message.msg.coords.x));
83 is.read(reinterpret_cast<char*>(&message.msg.coords.y), sizeof(message.msg.coords.y));
84 break;
85 }
86 case P_KILL: {
87 is.read(reinterpret_cast<char*>(&message.id), sizeof(message.id));
88 break;
89 }
90 case P_DAMAGE: {
91 is.read(reinterpret_cast<char*>(&message.id), sizeof(message.id));
92 break;
93 }
94 case P_STATUS: {
95 is.read(reinterpret_cast<char*>(&message.msg.status), sizeof(message.msg.status));
96 break;
97 }
98 case P_ERROR: {
99 break;
100 }
101 default: {
102 break;
103 }
104 }
105
106 return message;
107}
GameMessage deserialize(std::istringstream &is)
Deserializes a GameMessage object from a binary stream.
void serialize(const GameMessage &message, std::ostringstream &os)
Serializes a GameMessage object into a binary stream.
messageType
Enum representing the different types of game messages.
@ P_SHOOT
Represents a player shooting event.
@ P_CONNECT
Represents a connecting player event.
@ P_ERROR
Represents an error occurred.
@ P_DAMAGE
Represents a damage event.
@ P_KILL
Represents a kill event.
@ P_STATUS
Represents a status event.
@ P_SPAWN
Represents a spawn event.
@ P_MOVE
Represents a movement event.
@ P_DISCONNECT
Represents a disconnecting player event.
A structure representing a game message.
messageType type
The type of message (e.g., SPAWN, MOVE, etc.).
messageInfo msg
Additional information about the event (status, asset ID, and coordinates).
std::size_t id
The unique identifier for the entity or object involved in the event.
float x
The X coordinate.
float y
The Y coordinate.
uint8_t status
Status of the event (e.g., success or failure).
uint32_t cli_id
Id of the player's client.
coord coords
Coordinates associated with the event, such as the position of an entity.
char username[9]
Username of player connecting.
int asset_id
ID representing the game asset related to the event (e.g., entity or object).