Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 41 additions & 4 deletions core/include/util/network_packet.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,55 @@
#define __PACKET_HPP__

#include <cstdint>
#define PACKET_SIZE (4 + (20 * 10 * 4) + (7 * 4) + 9)
#define PACKET_MAGIC 0x5041434B

enum PacketInfo
{
PACKET_SIZE = ((20 * 10 * 4) + (7 * 4) + 9),
BUFFER_SIZE = 1024,
PACKET_MAGIC = 0x5041434B,
PACKET_MAGIC_SIZE = 4,
PACKET_ID_SIZE = 9
};

/*
serialization packet
magic 4byte
flag bit 4byte : 0 => board / 1 => type / 2 => rotation / 3 => r / 4 => c / 5 => deleted_line / 6 => is_game_over / 7 => is_win / 8 => id
data ? byte
uint8_t is_board_compressed => 1: compress, 0: non-compress
uint8_t board[20][10]; => compress len + compress data
uint8_t type;
uint8_t rotation;
uint8_t r;
uint8_t c;
uint8_t deleted_line;
uint8_t is_game_over;
uint8_t is_win;
uint8_t id_len;
char id[9];
*/

enum FlagBitInfo : uint32_t
{
BOARD_BIT = (1 << 0),
TYPE_BIT = (1 << 1),
ROTATION_BIT = (1 << 2),
R_BIT = (1 << 3),
C_BIT = (1 << 4),
DELETED_LINE_BIT = (1 << 5),
IS_GAME_OVER_BIT = (1 << 6),
IS_WIN_BIT = (1 << 7),
ID_BIT = (1 << 8)
};

typedef struct PacketStruct {
int32_t magic;
int32_t board[20][10];
int32_t type;
int32_t rotation;
int32_t r;
int32_t c;
int32_t deleted_line;
int32_t is_game_over; // 1 => True, 0 => False
int32_t is_game_over;
int32_t is_win;
char id[9];
} Packet;
Expand Down
91 changes: 80 additions & 11 deletions lobby/include/lobby_network_packet.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,102 @@
#define __LOBBY_PACKET_HPP__

#include <cstdint>
#define USER_DATA_SIZE (4 + 13 + 4 + 4 + 101)
#define ROOM_DATA_SIZE (4 + 69 + 9 + 4 + 9 + 101)
#define IDSIZE 9
#define MAXUSER 4
#define ROOMNAMESIZE 9
#define COMMENTSIZE 101

#define USER_DATA_MAGIC 0x55534552
#define ROOM_DATA_MAGIC 0x524F4F4D
enum LobbyPacketInfo
{
USER_DATA_SIZE = (4 + 13 + 4 + 4 + 101),
ROOM_DATA_SIZE = (4 + 69 + 9 + 4 + 9 + 101),
LOBBY_BUFFER_SIZE = 1024,
IDSIZE = 9,
MAXUSER = 4,
ROOMNAMESIZE = 9,
COMMENTSIZE = 101,
LOBBY_MAGIC_SIZE = 4,
USER_DATA_MAGIC = 0x55534552,
ROOM_DATA_MAGIC = 0x524F4F4D
};

/*
serialization packet
magic 4byte
flag bit 4byte : 0 => id / 1 => is_enter / 2 => is_out / 3 => is_chat / 4 => comment
data ? byte
uint8_t id_len;
char id[IDSIZE];
uint8_t is_enter;
uint8_t is_out;
uint8_t is_chat;
uint8_t comment_len;
char comment[COMMENTSIZE];
*/

enum LobbyUserFlagBitInfo : uint32_t
{
LOBBY_USER_ID_BIT = (1 << 0),
LOBBY_USER_IS_ENTER_BIT = (1 << 1),
LOBBY_USER_IS_OUT_BIT = (1 << 2),
LOBBY_USER_IS_CHAT_BIT = (1 << 3),
LOBBY_USER_COMMENT_BIT = (1 << 4),
};

typedef struct _user_data
{
int32_t magic;
char id[IDSIZE];
int32_t is_enter;
int32_t is_out;
int32_t is_chat;
char comment[COMMENTSIZE];
} user_data;

/*
serialization packet
magic 4byte
flag bit 4byte : 0 => room_master_id / 1 => id / 2 => room_name / 3 => id_len / 4 => is_enter_not_success / 5 => is_game_start
/ 6 => is_broadcast / 7 => is_update / 8 => is_broadcast_delete / 9 => is_chat / 10 => comment_id / 11 => comment
data ? byte
uint8_t room_master_id_len;
char room_master_id[IDSIZE];
uint8_t id_len;
[for id_len]
uint8_t user_per_id_len;
char id[MAXUSER][IDSIZE]
[end]
uint8_t room_name_len;
char room_name[ROOMNAMESIZE];
uint8_t is_enter_not_success;
uint8_t is_game_start;
uint8_t is_broadcast;
uint8_t is_update;
uint8_t is_broadcast_delete;
uint8_t is_chat;
uint8_t comment_id_len;
char comment_id[IDSIZE];
uint8_t comment_len;
char comment[COMMENTSIZE];
*/

enum LobbyRoomFlagBitInfo : uint32_t
{
LOBBY_ROOM_ROOM_MASTER_ID_BIT = (1 << 0),
LOBBY_ROOM_ID_BIT = (1 << 1),
LOBBY_ROOM_ROOM_NAME_BIT = (1 << 2),
LOBBY_ROOM_ID_LEN_BIT = (1 << 3),
LOBBY_ROOM_IS_ENTER_NOT_SUCCESS_BIT = (1 << 4),
LOBBY_ROOM_IS_GAME_START_BIT = (1 << 5),
LOBBY_ROOM_IS_BROADCAST_BIT = (1 << 6),
LOBBY_ROOM_IS_UPDATE_BIT = (1 << 7),
LOBBY_ROOM_IS_BROADCAST_DELETE_BIT = (1 << 8),
LOBBY_ROOM_IS_CHAT_BIT = (1 << 9),
LOBBY_ROOM_COMMENT_ID_BIT = (1 << 10),
LOBBY_ROOM_COMMENT_BIT = (1 << 11)
};

typedef struct _room_data
{
int32_t magic;
char room_master_id[IDSIZE];
int32_t id_len;
char id[MAXUSER][IDSIZE];
char room_name[ROOMNAMESIZE];
int32_t id_len;
int32_t is_enter_not_success;
int32_t is_game_start;
int32_t is_broadcast;
Expand Down
4 changes: 2 additions & 2 deletions lobby/source/lobby.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ bool Lobby::waiting_client()
}

memset(ip, 16, sizeof(ip));
user_data received_data;
user_data received_data{};
if (network->recv_udp(received_data, ip) == false) continue;

if (index >= 4 ||
Expand Down Expand Up @@ -309,7 +309,7 @@ bool Lobby::enter_lobby()
}

memset(room_ip, 16, sizeof(room_ip));
room_data received_data;
room_data received_data{};
if (network->recv_udp(received_data, room_ip) == false) continue;

if (received_data.is_broadcast &&
Expand Down
15 changes: 11 additions & 4 deletions platform/linux/include/lobby_network/linux_lobby_network.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,19 @@ class LinuxLobbyNetwork : public ILobbyNetwork
int32_t read_32b(const uint8_t*& p);
void read_bytes(const uint8_t*& p, void* dst, size_t size);

void compress_32b(uint8_t*& p, uint32_t& flag_bit, int32_t v, uint32_t bit_check);
void compress_bytes(uint8_t*& p, uint32_t& flag_bit, const void* data, size_t size,
uint32_t bit_check);
void decompress_32b(const uint8_t*& p, int32_t& v);
void decompress_bytes(const uint8_t*& p, void* data, size_t size);

// user_data
void serialize(uint8_t* buf, const user_data& pkt);
void deserialize(const uint8_t* buf, user_data& pkt);
uint32_t serialize(uint8_t* buf, const user_data& pkt);
bool deserialize(const uint8_t* buf, user_data& pkt);
// room_data
void serialize(uint8_t* buf, const room_data& pkt);
void deserialize(const uint8_t* buf, room_data& pkt);
uint32_t serialize(uint8_t* buf, const room_data& pkt);
bool deserialize(const uint8_t* buf, room_data& pkt);

public:
LinuxLobbyNetwork();
void find_broadcast_ip(char* broadcast_ip) override;
Expand Down
11 changes: 9 additions & 2 deletions platform/linux/include/network/linux_network.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,17 @@ class LinuxNetwork : public INetwork

void write_32b(uint8_t*& p, int32_t v);
void write_bytes(uint8_t*& p, const void* data, size_t size);
void serialize(uint8_t* buf, const Packet& pkt);
int32_t read_32b(const uint8_t*& p);
void read_bytes(const uint8_t*& p, void* dst, size_t size);
void deserialize(const uint8_t* buf, Packet& pkt);

void compress_32b(uint8_t*& p, uint32_t& flag_bit, int32_t v, uint32_t bit_check);
void compress_bytes(uint8_t*& p, uint32_t& flag_bit, const void* data, size_t size,
uint32_t bit_check);
void decompress_32b(const uint8_t*& p, int32_t& v);
void decompress_bytes(const uint8_t*& p, void* data, size_t size);

uint32_t serialize(uint8_t* buf, const Packet& pkt);
bool deserialize(const uint8_t* buf, Packet& pkt);

public:
LinuxNetwork();
Expand Down
Loading
Loading