Le seed est pas bon, mais ON A LES DROITS!
This commit is contained in:
parent
eb7116bac8
commit
54307b7c17
@ -7,7 +7,7 @@
|
|||||||
#define SRV_PORT 10000
|
#define SRV_PORT 10000
|
||||||
#define CLI_PORT 10001
|
#define CLI_PORT 10001
|
||||||
|
|
||||||
#define BUFFER_LENGTH 150
|
#define BUFFER_LENGTH 1500
|
||||||
|
|
||||||
#define CHUNK_SIZE_X 4
|
#define CHUNK_SIZE_X 4
|
||||||
#define CHUNK_SIZE_Y 64
|
#define CHUNK_SIZE_Y 64
|
||||||
|
@ -4,38 +4,38 @@ void netprot::Serialize(Input* in, char* buf[], uint32_t* buflen) {
|
|||||||
*buf[0] = (char)netprot::PACKET_TYPE::INPUT;
|
*buf[0] = (char)netprot::PACKET_TYPE::INPUT;
|
||||||
|
|
||||||
uint64_t time = in->timestamp;
|
uint64_t time = in->timestamp;
|
||||||
uint8_t time8[sizeof(uint64_t)] = {(uint8_t)((time >> 56) & 0xFF),
|
uint8_t time8[sizeof(uint64_t)] = { (uint8_t)((time >> 56) & 0xFF),
|
||||||
(uint8_t)((time >> 48) & 0xFF),
|
(uint8_t)((time >> 48) & 0xFF),
|
||||||
(uint8_t)((time >> 40) & 0xFF),
|
(uint8_t)((time >> 40) & 0xFF),
|
||||||
(uint8_t)((time >> 32) & 0xFF),
|
(uint8_t)((time >> 32) & 0xFF),
|
||||||
(uint8_t)((time >> 24) & 0xFF),
|
(uint8_t)((time >> 24) & 0xFF),
|
||||||
(uint8_t)((time >> 16) & 0xFF),
|
(uint8_t)((time >> 16) & 0xFF),
|
||||||
(uint8_t)((time >> 8 ) & 0xFF),
|
(uint8_t)((time >> 8) & 0xFF),
|
||||||
(uint8_t)(time & 0xFF)};
|
(uint8_t)(time & 0xFF) };
|
||||||
|
|
||||||
memcpy(*buf + 1, time8, sizeof(uint64_t));
|
memcpy(*buf + 1, time8, sizeof(uint64_t));
|
||||||
|
|
||||||
uint64_t sid = in->sid;
|
uint64_t sid = in->sid;
|
||||||
uint8_t sid8[sizeof(uint64_t)] = {(uint8_t)((sid >> 56) & 0xFF),
|
uint8_t sid8[sizeof(uint64_t)] = { (uint8_t)((sid >> 56) & 0xFF),
|
||||||
(uint8_t)((sid >> 48) & 0xFF),
|
(uint8_t)((sid >> 48) & 0xFF),
|
||||||
(uint8_t)((sid >> 40) & 0xFF),
|
(uint8_t)((sid >> 40) & 0xFF),
|
||||||
(uint8_t)((sid >> 32) & 0xFF),
|
(uint8_t)((sid >> 32) & 0xFF),
|
||||||
(uint8_t)((sid >> 24) & 0xFF),
|
(uint8_t)((sid >> 24) & 0xFF),
|
||||||
(uint8_t)((sid >> 16) & 0xFF),
|
(uint8_t)((sid >> 16) & 0xFF),
|
||||||
(uint8_t)((sid >> 8 ) & 0xFF),
|
(uint8_t)((sid >> 8) & 0xFF),
|
||||||
(uint8_t)( sid & 0xFF)};
|
(uint8_t)(sid & 0xFF) };
|
||||||
|
|
||||||
memcpy(*buf + sizeof(uint64_t) + 1, sid8, sizeof(uint64_t));
|
memcpy(*buf + sizeof(uint64_t) + 1, sid8, sizeof(uint64_t));
|
||||||
|
|
||||||
Keys keys = in->keys;
|
Keys keys = in->keys;
|
||||||
uint8_t keys8 = // Reste un bit.
|
uint8_t keys8 = // Reste un bit.
|
||||||
keys.forward & 0b10000000 |
|
keys.forward & 0b10000000 |
|
||||||
keys.backward & 0b01000000 |
|
keys.backward & 0b01000000 |
|
||||||
keys.left & 0b00100000 |
|
keys.left & 0b00100000 |
|
||||||
keys.right & 0b00010000 |
|
keys.right & 0b00010000 |
|
||||||
keys.jump & 0b00001000 |
|
keys.jump & 0b00001000 |
|
||||||
keys.shoot & 0b00000100 |
|
keys.shoot & 0b00000100 |
|
||||||
keys.block & 0b00000010 ;
|
keys.block & 0b00000010;
|
||||||
|
|
||||||
memcpy(*buf + sizeof(uint64_t) * 2 + 1, &keys8, sizeof(uint8_t));
|
memcpy(*buf + sizeof(uint64_t) * 2 + 1, &keys8, sizeof(uint8_t));
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ void netprot::Serialize(Input* in, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((vec[2] >> 24) & 0xFF),
|
(uint8_t)((vec[2] >> 24) & 0xFF),
|
||||||
(uint8_t)((vec[2] >> 16) & 0xFF),
|
(uint8_t)((vec[2] >> 16) & 0xFF),
|
||||||
(uint8_t)((vec[2] >> 8) & 0xFF),
|
(uint8_t)((vec[2] >> 8) & 0xFF),
|
||||||
(uint8_t)(vec[2] & 0xFF)};
|
(uint8_t)(vec[2] & 0xFF) };
|
||||||
|
|
||||||
memcpy(*buf + sizeof(uint64_t) * 2 + 2, vec8, sizeof(uint32_t) * 3);
|
memcpy(*buf + sizeof(uint64_t) * 2 + 2, vec8, sizeof(uint32_t) * 3);
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ void netprot::Serialize(Sync* sync, char* buf[], uint32_t* buflen) {
|
|||||||
memcpy(*buf + sizeof(uint64_t) + 1, sid8, sizeof(uint64_t));
|
memcpy(*buf + sizeof(uint64_t) + 1, sid8, sizeof(uint64_t));
|
||||||
|
|
||||||
uint32_t timer = sync->timer;
|
uint32_t timer = sync->timer;
|
||||||
uint8_t time8[sizeof(uint32_t)] = {(uint8_t)((timer >> 24) & 0xFF),
|
uint8_t time8[sizeof(uint32_t)] = { (uint8_t)((timer >> 24) & 0xFF),
|
||||||
(uint8_t)((timer >> 16) & 0xFF),
|
(uint8_t)((timer >> 16) & 0xFF),
|
||||||
(uint8_t)((timer >> 8) & 0xFF),
|
(uint8_t)((timer >> 8) & 0xFF),
|
||||||
(uint8_t)(timer & 0xFF) };
|
(uint8_t)(timer & 0xFF) };
|
||||||
@ -169,8 +169,8 @@ void netprot::Serialize(TeamInfo* tinfo, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((tid >> 32) & 0xFF),
|
(uint8_t)((tid >> 32) & 0xFF),
|
||||||
(uint8_t)((tid >> 24) & 0xFF),
|
(uint8_t)((tid >> 24) & 0xFF),
|
||||||
(uint8_t)((tid >> 16) & 0xFF),
|
(uint8_t)((tid >> 16) & 0xFF),
|
||||||
(uint8_t)((tid >> 8) & 0xFF),
|
(uint8_t)((tid >> 8) & 0xFF),
|
||||||
(uint8_t)(tid & 0xFF)
|
(uint8_t)(tid & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + namesize + 2, tid8, sizeof(uint64_t));
|
memcpy(*buf + namesize + 2, tid8, sizeof(uint64_t));
|
||||||
@ -192,8 +192,8 @@ void netprot::Serialize(LoginInfo* linfo, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((sid >> 32) & 0xFF),
|
(uint8_t)((sid >> 32) & 0xFF),
|
||||||
(uint8_t)((sid >> 24) & 0xFF),
|
(uint8_t)((sid >> 24) & 0xFF),
|
||||||
(uint8_t)((sid >> 16) & 0xFF),
|
(uint8_t)((sid >> 16) & 0xFF),
|
||||||
(uint8_t)((sid >> 8) & 0xFF),
|
(uint8_t)((sid >> 8) & 0xFF),
|
||||||
(uint8_t)(sid & 0xFF)
|
(uint8_t)(sid & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + namesize + 2, sid8, sizeof(uint64_t));
|
memcpy(*buf + namesize + 2, sid8, sizeof(uint64_t));
|
||||||
@ -206,8 +206,8 @@ void netprot::Serialize(LoginInfo* linfo, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((tid >> 32) & 0xFF),
|
(uint8_t)((tid >> 32) & 0xFF),
|
||||||
(uint8_t)((tid >> 24) & 0xFF),
|
(uint8_t)((tid >> 24) & 0xFF),
|
||||||
(uint8_t)((tid >> 16) & 0xFF),
|
(uint8_t)((tid >> 16) & 0xFF),
|
||||||
(uint8_t)((tid >> 8) & 0xFF),
|
(uint8_t)((tid >> 8) & 0xFF),
|
||||||
(uint8_t)(tid & 0xFF)
|
(uint8_t)(tid & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + namesize + 2 + sizeof(uint64_t), tid8, sizeof(uint64_t));
|
memcpy(*buf + namesize + 2 + sizeof(uint64_t), tid8, sizeof(uint64_t));
|
||||||
@ -229,8 +229,8 @@ void netprot::Serialize(PlayerInfo* pinfo, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((id >> 32) & 0xFF),
|
(uint8_t)((id >> 32) & 0xFF),
|
||||||
(uint8_t)((id >> 24) & 0xFF),
|
(uint8_t)((id >> 24) & 0xFF),
|
||||||
(uint8_t)((id >> 16) & 0xFF),
|
(uint8_t)((id >> 16) & 0xFF),
|
||||||
(uint8_t)((id >> 8) & 0xFF),
|
(uint8_t)((id >> 8) & 0xFF),
|
||||||
(uint8_t)(id & 0xFF)
|
(uint8_t)(id & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + namesize + 2, id8, sizeof(uint64_t));
|
memcpy(*buf + namesize + 2, id8, sizeof(uint64_t));
|
||||||
@ -243,8 +243,8 @@ void netprot::Serialize(PlayerInfo* pinfo, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((tid >> 32) & 0xFF),
|
(uint8_t)((tid >> 32) & 0xFF),
|
||||||
(uint8_t)((tid >> 24) & 0xFF),
|
(uint8_t)((tid >> 24) & 0xFF),
|
||||||
(uint8_t)((tid >> 16) & 0xFF),
|
(uint8_t)((tid >> 16) & 0xFF),
|
||||||
(uint8_t)((tid >> 8) & 0xFF),
|
(uint8_t)((tid >> 8) & 0xFF),
|
||||||
(uint8_t)(tid & 0xFF)
|
(uint8_t)(tid & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + namesize + 2 + sizeof(uint64_t), tid8, sizeof(uint64_t));
|
memcpy(*buf + namesize + 2 + sizeof(uint64_t), tid8, sizeof(uint64_t));
|
||||||
@ -263,8 +263,8 @@ void netprot::Serialize(GameInfo* ginfo, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((game >> 32) & 0xFF),
|
(uint8_t)((game >> 32) & 0xFF),
|
||||||
(uint8_t)((game >> 24) & 0xFF),
|
(uint8_t)((game >> 24) & 0xFF),
|
||||||
(uint8_t)((game >> 16) & 0xFF),
|
(uint8_t)((game >> 16) & 0xFF),
|
||||||
(uint8_t)((game >> 8) & 0xFF),
|
(uint8_t)((game >> 8) & 0xFF),
|
||||||
(uint8_t)(game & 0xFF)
|
(uint8_t)(game & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + 1, seed8, sizeof(uint64_t));
|
memcpy(*buf + 1, seed8, sizeof(uint64_t));
|
||||||
@ -272,27 +272,27 @@ void netprot::Serialize(GameInfo* ginfo, char* buf[], uint32_t* buflen) {
|
|||||||
game = ginfo->countdown;
|
game = ginfo->countdown;
|
||||||
uint8_t count8[sizeof(uint64_t)] = {
|
uint8_t count8[sizeof(uint64_t)] = {
|
||||||
(uint8_t)((game >> 56) & 0xFF),
|
(uint8_t)((game >> 56) & 0xFF),
|
||||||
(uint8_t)((game >> 48) & 0xFF),
|
(uint8_t)((game >> 48) & 0xFF),
|
||||||
(uint8_t)((game >> 40) & 0xFF),
|
(uint8_t)((game >> 40) & 0xFF),
|
||||||
(uint8_t)((game >> 32) & 0xFF),
|
(uint8_t)((game >> 32) & 0xFF),
|
||||||
(uint8_t)((game >> 24) & 0xFF),
|
(uint8_t)((game >> 24) & 0xFF),
|
||||||
(uint8_t)((game >> 16) & 0xFF),
|
(uint8_t)((game >> 16) & 0xFF),
|
||||||
(uint8_t)((game >> 8) & 0xFF),
|
(uint8_t)((game >> 8) & 0xFF),
|
||||||
(uint8_t)(game & 0xFF)
|
(uint8_t)(game & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + sizeof(uint64_t) + 1, count8, sizeof(uint64_t));
|
memcpy(*buf + sizeof(uint64_t) + 1, count8, sizeof(uint64_t));
|
||||||
|
|
||||||
game = ginfo->countdown;
|
game = ginfo->countdown;
|
||||||
uint8_t gtype8[sizeof(uint64_t)] = {
|
uint8_t gtype8[sizeof(uint64_t)] = {
|
||||||
(uint8_t)((game >> 56) & 0xFF),
|
(uint8_t)((game >> 56) & 0xFF),
|
||||||
(uint8_t)((game >> 48) & 0xFF),
|
(uint8_t)((game >> 48) & 0xFF),
|
||||||
(uint8_t)((game >> 40) & 0xFF),
|
(uint8_t)((game >> 40) & 0xFF),
|
||||||
(uint8_t)((game >> 32) & 0xFF),
|
(uint8_t)((game >> 32) & 0xFF),
|
||||||
(uint8_t)((game >> 24) & 0xFF),
|
(uint8_t)((game >> 24) & 0xFF),
|
||||||
(uint8_t)((game >> 16) & 0xFF),
|
(uint8_t)((game >> 16) & 0xFF),
|
||||||
(uint8_t)((game >> 8) & 0xFF),
|
(uint8_t)((game >> 8) & 0xFF),
|
||||||
(uint8_t)(game & 0xFF)
|
(uint8_t)(game & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + sizeof(uint64_t) + 1, gtype8, sizeof(uint64_t));
|
memcpy(*buf + sizeof(uint64_t) + 1, gtype8, sizeof(uint64_t));
|
||||||
@ -311,8 +311,8 @@ void netprot::Serialize(Chat* chat, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((src >> 32) & 0xFF),
|
(uint8_t)((src >> 32) & 0xFF),
|
||||||
(uint8_t)((src >> 24) & 0xFF),
|
(uint8_t)((src >> 24) & 0xFF),
|
||||||
(uint8_t)((src >> 16) & 0xFF),
|
(uint8_t)((src >> 16) & 0xFF),
|
||||||
(uint8_t)((src >> 8) & 0xFF),
|
(uint8_t)((src >> 8) & 0xFF),
|
||||||
(uint8_t)(src & 0xFF)
|
(uint8_t)(src & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + 1, src8, sizeof(uint64_t));
|
memcpy(*buf + 1, src8, sizeof(uint64_t));
|
||||||
@ -325,8 +325,8 @@ void netprot::Serialize(Chat* chat, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((dst >> 32) & 0xFF),
|
(uint8_t)((dst >> 32) & 0xFF),
|
||||||
(uint8_t)((dst >> 24) & 0xFF),
|
(uint8_t)((dst >> 24) & 0xFF),
|
||||||
(uint8_t)((dst >> 16) & 0xFF),
|
(uint8_t)((dst >> 16) & 0xFF),
|
||||||
(uint8_t)((dst >> 8) & 0xFF),
|
(uint8_t)((dst >> 8) & 0xFF),
|
||||||
(uint8_t)(dst & 0xFF)
|
(uint8_t)(dst & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + 1 + sizeof(uint64_t), dst8, sizeof(uint64_t));
|
memcpy(*buf + 1 + sizeof(uint64_t), dst8, sizeof(uint64_t));
|
||||||
@ -339,8 +339,8 @@ void netprot::Serialize(Chat* chat, char* buf[], uint32_t* buflen) {
|
|||||||
(uint8_t)((dstteam >> 32) & 0xFF),
|
(uint8_t)((dstteam >> 32) & 0xFF),
|
||||||
(uint8_t)((dstteam >> 24) & 0xFF),
|
(uint8_t)((dstteam >> 24) & 0xFF),
|
||||||
(uint8_t)((dstteam >> 16) & 0xFF),
|
(uint8_t)((dstteam >> 16) & 0xFF),
|
||||||
(uint8_t)((dstteam >> 8) & 0xFF),
|
(uint8_t)((dstteam >> 8) & 0xFF),
|
||||||
(uint8_t)(dstteam & 0xFF)
|
(uint8_t)(dstteam & 0xFF)
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(*buf + 1 + sizeof(uint64_t) * 2, dstt8, sizeof(uint64_t));
|
memcpy(*buf + 1 + sizeof(uint64_t) * 2, dstt8, sizeof(uint64_t));
|
||||||
@ -366,8 +366,8 @@ void netprot::Serialize(ErrorLog* errlog, char* buf[], uint32_t* buflen) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool netprot::Deserialize(Input* in, char* buf, const uint32_t buflen) {
|
bool netprot::Deserialize(Input* in, char* buf, uint32_t *buflen) {
|
||||||
if (buflen <= sizeof(Input))
|
if (*buflen <= sizeof(Input))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint8_t diff[sizeof(uint64_t)] = { 0,0,0,0,0,0,0,0 };
|
uint8_t diff[sizeof(uint64_t)] = { 0,0,0,0,0,0,0,0 };
|
||||||
@ -395,13 +395,13 @@ bool netprot::Deserialize(Input* in, char* buf, const uint32_t buflen) {
|
|||||||
|
|
||||||
uint8_t keys = 0;
|
uint8_t keys = 0;
|
||||||
memcpy(&keys, &buf[1 + sizeof(uint64_t) * 2], sizeof(uint8_t));
|
memcpy(&keys, &buf[1 + sizeof(uint64_t) * 2], sizeof(uint8_t));
|
||||||
in->keys.forward = keys & 0b10000000;
|
in->keys.forward = keys & 0b10000000;
|
||||||
in->keys.backward = keys & 0b01000000;
|
in->keys.backward = keys & 0b01000000;
|
||||||
in->keys.left = keys & 0b00100000;
|
in->keys.left = keys & 0b00100000;
|
||||||
in->keys.right = keys & 0b00010000;
|
in->keys.right = keys & 0b00010000;
|
||||||
in->keys.jump = keys & 0b00001000;
|
in->keys.jump = keys & 0b00001000;
|
||||||
in->keys.shoot = keys & 0b00000100;
|
in->keys.shoot = keys & 0b00000100;
|
||||||
in->keys.block = keys & 0b00000010;
|
in->keys.block = keys & 0b00000010;
|
||||||
|
|
||||||
uint8_t subvec[3 * sizeof(uint32_t)] = { 0,0,0,0,0,0,0,0,0,0,0,0 };
|
uint8_t subvec[3 * sizeof(uint32_t)] = { 0,0,0,0,0,0,0,0,0,0,0,0 };
|
||||||
memcpy(subvec, &buf[2 + sizeof(uint64_t) * 2], sizeof(uint8_t) * 12);
|
memcpy(subvec, &buf[2 + sizeof(uint64_t) * 2], sizeof(uint8_t) * 12);
|
||||||
@ -417,19 +417,21 @@ bool netprot::Deserialize(Input* in, char* buf, const uint32_t buflen) {
|
|||||||
(uint32_t)subvec[8] << 24 |
|
(uint32_t)subvec[8] << 24 |
|
||||||
(uint32_t)subvec[9] << 16 |
|
(uint32_t)subvec[9] << 16 |
|
||||||
(uint32_t)subvec[10] << 8 |
|
(uint32_t)subvec[10] << 8 |
|
||||||
(uint32_t)subvec[11]};
|
(uint32_t)subvec[11] };
|
||||||
|
|
||||||
memcpy(&in->direction, vec, sizeof(uint32_t) * 3);
|
memcpy(&in->direction, vec, sizeof(uint32_t) * 3);
|
||||||
|
|
||||||
|
*buflen = sizeof(uint64_t) * 2 + 2 + sizeof(uint32_t) * 3;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool netprot::Deserialize(Output* out, char* buf, const uint32_t buflen) {
|
bool netprot::Deserialize(Output* out, char* buf, uint32_t *buflen) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool netprot::Deserialize(Sync* sync, char* buf, const uint32_t buflen) {
|
bool netprot::Deserialize(Sync* sync, char* buf, uint32_t *buflen) {
|
||||||
if (buflen <= sizeof(Sync))
|
if (*buflen <= sizeof(Sync))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint8_t diff[sizeof(uint64_t)] = { 0,0,0,0,0,0,0,0 };
|
uint8_t diff[sizeof(uint64_t)] = { 0,0,0,0,0,0,0,0 };
|
||||||
@ -487,11 +489,13 @@ bool netprot::Deserialize(Sync* sync, char* buf, const uint32_t buflen) {
|
|||||||
|
|
||||||
memcpy(&sync->position, vec, sizeof(uint32_t) * 3);
|
memcpy(&sync->position, vec, sizeof(uint32_t) * 3);
|
||||||
|
|
||||||
|
*buflen = sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + 2;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool netprot::Deserialize(TeamInfo* tinfo, char* buf, const uint32_t buflen) {
|
bool netprot::Deserialize(TeamInfo* tinfo, char* buf, uint32_t *buflen) {
|
||||||
if (buflen <= sizeof(LoginInfo))
|
if (*buflen <= sizeof(LoginInfo))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
size_t namesize = std::strlen(buf) + 1;
|
size_t namesize = std::strlen(buf) + 1;
|
||||||
@ -513,11 +517,13 @@ bool netprot::Deserialize(TeamInfo* tinfo, char* buf, const uint32_t buflen) {
|
|||||||
(uint64_t)diff[6] << 8 |
|
(uint64_t)diff[6] << 8 |
|
||||||
(uint64_t)diff[7];
|
(uint64_t)diff[7];
|
||||||
|
|
||||||
|
*buflen = namesize + sizeof(uint64_t) + 2;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool netprot::Deserialize(LoginInfo* linfo, char* buf, const uint32_t buflen) {
|
bool netprot::Deserialize(LoginInfo* linfo, char* buf, uint32_t *buflen) {
|
||||||
if (buflen <= sizeof(LoginInfo))
|
if (*buflen <= sizeof(LoginInfo))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
size_t namesize = std::strlen(buf) + 1;
|
size_t namesize = std::strlen(buf) + 1;
|
||||||
@ -550,11 +556,13 @@ bool netprot::Deserialize(LoginInfo* linfo, char* buf, const uint32_t buflen) {
|
|||||||
(uint64_t)diff[6] << 8 |
|
(uint64_t)diff[6] << 8 |
|
||||||
(uint64_t)diff[7];
|
(uint64_t)diff[7];
|
||||||
|
|
||||||
|
*buflen = namesize + sizeof(uint64_t) * 2 + 2;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool netprot::Deserialize(PlayerInfo* pinfo, char* buf, const uint32_t buflen) {
|
bool netprot::Deserialize(PlayerInfo* pinfo, char* buf, uint32_t *buflen) {
|
||||||
if (buflen <= sizeof(PlayerInfo))
|
if (*buflen <= sizeof(PlayerInfo))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
size_t namesize = std::strlen(buf) + 1;
|
size_t namesize = std::strlen(buf) + 1;
|
||||||
@ -587,11 +595,13 @@ bool netprot::Deserialize(PlayerInfo* pinfo, char* buf, const uint32_t buflen) {
|
|||||||
(uint64_t)diff[6] << 8 |
|
(uint64_t)diff[6] << 8 |
|
||||||
(uint64_t)diff[7];
|
(uint64_t)diff[7];
|
||||||
|
|
||||||
|
*buflen = namesize + sizeof(uint64_t) * 2 + 2;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool netprot::Deserialize(GameInfo* ginfo, char* buf, const uint32_t buflen) {
|
bool netprot::Deserialize(GameInfo* ginfo, char* buf, uint32_t *buflen) {
|
||||||
if (buflen <= sizeof(GameInfo))
|
if (*buflen <= sizeof(GameInfo))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint8_t diff[sizeof(uint64_t)] = { 0,0,0,0,0,0,0,0 };
|
uint8_t diff[sizeof(uint64_t)] = { 0,0,0,0,0,0,0,0 };
|
||||||
@ -628,11 +638,13 @@ bool netprot::Deserialize(GameInfo* ginfo, char* buf, const uint32_t buflen) {
|
|||||||
(uint64_t)diff[6] << 8 |
|
(uint64_t)diff[6] << 8 |
|
||||||
(uint64_t)diff[7];
|
(uint64_t)diff[7];
|
||||||
|
|
||||||
|
*buflen = sizeof(uint64_t) * 3 + 1;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool netprot::Deserialize(Chat* chat, char* buf, const uint32_t buflen) {
|
bool netprot::Deserialize(Chat* chat, char* buf, uint32_t *buflen) {
|
||||||
if (buflen <= sizeof(Chat))
|
if (*buflen <= sizeof(Chat))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint8_t src[sizeof(uint64_t)] = { 0,0,0,0,0,0,0,0 };
|
uint8_t src[sizeof(uint64_t)] = { 0,0,0,0,0,0,0,0 };
|
||||||
@ -677,11 +689,14 @@ bool netprot::Deserialize(Chat* chat, char* buf, const uint32_t buflen) {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
memcpy(&chat->mess, &buf[1 + sizeof(uint64_t) * 3], messsize);
|
memcpy(&chat->mess, &buf[1 + sizeof(uint64_t) * 3], messsize);
|
||||||
|
|
||||||
|
*buflen = messsize + sizeof(uint64_t) * 3 + 2;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool netprot::Deserialize(ErrorLog* errlog, char* buf, const uint32_t buflen) {
|
bool netprot::Deserialize(ErrorLog* errlog, char* buf, uint32_t *buflen) {
|
||||||
if (buflen <= sizeof(ErrorLog))
|
if (*buflen <= sizeof(ErrorLog))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
size_t messsize = std::strlen(buf) + 1;
|
size_t messsize = std::strlen(buf) + 1;
|
||||||
@ -692,6 +707,8 @@ bool netprot::Deserialize(ErrorLog* errlog, char* buf, const uint32_t buflen) {
|
|||||||
memcpy(&errlog->mess, &buf[1], messsize);
|
memcpy(&errlog->mess, &buf[1], messsize);
|
||||||
memcpy(&errlog->is_fatal, &buf[1 + messsize], sizeof(bool));
|
memcpy(&errlog->is_fatal, &buf[1 + messsize], sizeof(bool));
|
||||||
|
|
||||||
|
*buflen = messsize + sizeof(uint64_t) * 3 + 2;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,7 +720,7 @@ netprot::PACKET_TYPE netprot::getType(char* buf, const uint32_t buflen) {
|
|||||||
return (netprot::PACKET_TYPE)buf[0];
|
return (netprot::PACKET_TYPE)buf[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
netprot::Packet netprot::getPack(char* buf, uint32_t buflen) {
|
netprot::Packet netprot::getPack(char* buf, uint32_t *buflen) {
|
||||||
Packet pck = { nullptr, PACKET_TYPE::ERR };
|
Packet pck = { nullptr, PACKET_TYPE::ERR };
|
||||||
Input* in = nullptr;
|
Input* in = nullptr;
|
||||||
Output* out = nullptr;
|
Output* out = nullptr;
|
||||||
@ -713,7 +730,7 @@ netprot::Packet netprot::getPack(char* buf, uint32_t buflen) {
|
|||||||
ErrorLog* errlog = nullptr;
|
ErrorLog* errlog = nullptr;
|
||||||
LoginInfo* loginf = nullptr;
|
LoginInfo* loginf = nullptr;
|
||||||
|
|
||||||
switch (getType(buf, buflen)) {
|
switch (getType(buf, *buflen)) {
|
||||||
case PACKET_TYPE::INPUT:
|
case PACKET_TYPE::INPUT:
|
||||||
in = new Input();
|
in = new Input();
|
||||||
if (netprot::Deserialize(in, buf, buflen)) {
|
if (netprot::Deserialize(in, buf, buflen)) {
|
||||||
@ -770,7 +787,7 @@ netprot::Packet netprot::getPack(char* buf, uint32_t buflen) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
netprot::Packet netprot::getPack(netprot::Buffer* buf) {
|
netprot::Packet netprot::getPack(netprot::Buffer* buf) {
|
||||||
return netprot::getPack(buf->ptr, buf->len);
|
return netprot::getPack(buf->ptr, &buf->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool netprot::emptyPack(netprot::Packet pck) {
|
bool netprot::emptyPack(netprot::Packet pck) {
|
||||||
@ -808,138 +825,148 @@ netprot::Packet netprot::makePack(void* ptr, PACKET_TYPE type) {
|
|||||||
return pck;
|
return pck;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<netprot::Packet> netprot::recvPacks(SOCKET sock, Buffer* buf) {
|
std::vector<char*> netprot::recvPacks(SOCKET sock, Buffer* buf) {
|
||||||
std::vector<Packet> lsPck;
|
std::vector<char*> lsPck;
|
||||||
int len = 0, end = 0;
|
int len = 0, end = 0;
|
||||||
bool pck_received = false;
|
bool pck_received = false;
|
||||||
|
char * cursor = nullptr, * next = buf->ptr, * last = buf->ptr;
|
||||||
|
const char footer[sizeof(uint64_t) + sizeof(uint8_t)] = { '\0', '\0', '\0', '\0', '\0' };
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
while (!pck_received) {
|
int bytes = recv(sock, &buf->ptr[len], buf->len - len, 0);
|
||||||
int bytes = recv(sock, &buf->ptr[len], buf->len - len, 0);
|
if (bytes <= 0) // si recv() retourne -1 ou 0; ça veut dire qu'il y a plus rien a lire qui n'a pas déjà été traité.
|
||||||
if (bytes < 0) // si recv() retourne -1; ça veut dire qu'il y a plus rien a lire.
|
return lsPck;
|
||||||
return lsPck;
|
len += bytes;
|
||||||
len += bytes;
|
end = len;
|
||||||
// TODO: Voir si on trouve un footer (5 '\0' d'affilee).
|
|
||||||
// Si oui, mettre l'index du debut du footer dans
|
|
||||||
// la variable "end" et mettre pck_received a true.
|
|
||||||
|
|
||||||
|
for (int x = 0; x < len; ++x)
|
||||||
|
std::putchar(buf->ptr[x]);
|
||||||
|
std::puts("");
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
int cmp = 0;
|
||||||
|
|
||||||
//buf->ptr
|
if (cursor)
|
||||||
|
end -= (cursor - buf->ptr);
|
||||||
|
|
||||||
//end = len;
|
if (end < 0)
|
||||||
//pck_received = true;
|
break;
|
||||||
}
|
|
||||||
char* cursor = nullptr;
|
|
||||||
|
|
||||||
cursor = &buf->ptr[end];
|
cursor = (char*)memchr(next, '\0', end);
|
||||||
|
next = cursor + 1;
|
||||||
|
|
||||||
lsPck.push_back(getPack(buf));
|
if (cursor) {
|
||||||
|
cmp = memcmp(cursor, &footer, sizeof(uint64_t) + sizeof(uint8_t));
|
||||||
while (*cursor == '\0')
|
if (cmp == 0) {
|
||||||
cursor++, end++;
|
lsPck.push_back(last);
|
||||||
|
cursor += sizeof(uint64_t) + sizeof(uint8_t) + 1;
|
||||||
if (cursor) { // mettre le début du prochain paquet au début du buffer.
|
last = cursor;
|
||||||
memcpy(buf->ptr, cursor, buf->len - end); // et voir s'il y a en un autre
|
next = cursor + 1;
|
||||||
len = 0;
|
}
|
||||||
pck_received = false;
|
}
|
||||||
|
else {
|
||||||
|
cursor = &buf->ptr[len];
|
||||||
|
next = cursor + 1;
|
||||||
|
break;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
void netprot::sendPack<netprot::Packet>(SOCKET sock, Packet* pack, char** buf, uint32_t* buflen) {
|
void netprot::sendPack<netprot::Packet>(SOCKET sock, Packet* pack, char** buf, uint32_t* buflen) {
|
||||||
switch (pack->type) {
|
switch (pack->type) {
|
||||||
case PACKET_TYPE::INPUT:
|
case PACKET_TYPE::INPUT:
|
||||||
sendPack<Input>(sock, (Input*)pack->ptr, buf, buflen);
|
sendPack<Input>(sock, (Input*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::OUTPUT:
|
case PACKET_TYPE::OUTPUT:
|
||||||
sendPack<Output>(sock, (Output*)pack->ptr, buf, buflen);
|
sendPack<Output>(sock, (Output*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::SYNC:
|
case PACKET_TYPE::SYNC:
|
||||||
sendPack<Sync>(sock, (Sync*)pack->ptr, buf, buflen);
|
sendPack<Sync>(sock, (Sync*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::TEAMINF:
|
case PACKET_TYPE::TEAMINF:
|
||||||
sendPack<TeamInfo>(sock, (TeamInfo*)pack->ptr, buf, buflen);
|
sendPack<TeamInfo>(sock, (TeamInfo*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::PLAYINF:
|
case PACKET_TYPE::PLAYINF:
|
||||||
sendPack<PlayerInfo>(sock, (PlayerInfo*)pack->ptr, buf, buflen);
|
sendPack<PlayerInfo>(sock, (PlayerInfo*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::LOGINF:
|
case PACKET_TYPE::LOGINF:
|
||||||
sendPack<LoginInfo>(sock, (LoginInfo*)pack->ptr, buf, buflen);
|
sendPack<LoginInfo>(sock, (LoginInfo*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::CHUNKMOD:
|
case PACKET_TYPE::CHUNKMOD:
|
||||||
//sendPack<ChunkMod>(sock, (ChunkMod*)pack->ptr, buf, buflen);
|
//sendPack<ChunkMod>(sock, (ChunkMod*)pack->ptr, buf, buflen);
|
||||||
case PACKET_TYPE::PLAYERMOD:
|
case PACKET_TYPE::PLAYERMOD:
|
||||||
//sendPack<PlayerMod>(sock, (PlayerMod*)pack->ptr, buf, buflen);
|
//sendPack<PlayerMod>(sock, (PlayerMod*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::PICKUPMOD:
|
case PACKET_TYPE::PICKUPMOD:
|
||||||
//sendPack<PickupMod>(sock, (PickupMod*)pack->ptr, buf, buflen);
|
//sendPack<PickupMod>(sock, (PickupMod*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::GAMEINFO:
|
case PACKET_TYPE::GAMEINFO:
|
||||||
sendPack<GameInfo>(sock, (GameInfo*)pack->ptr, buf, buflen);
|
sendPack<GameInfo>(sock, (GameInfo*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::ENDINFO:
|
case PACKET_TYPE::ENDINFO:
|
||||||
//sendPack<EndInfo>(sock, (EndInfo*)pack->ptr, buf, buflen);
|
//sendPack<EndInfo>(sock, (EndInfo*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::CHAT:
|
case PACKET_TYPE::CHAT:
|
||||||
sendPack<Chat>(sock, (Chat*)pack->ptr, buf, buflen);
|
sendPack<Chat>(sock, (Chat*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::ERRLOG:
|
case PACKET_TYPE::ERRLOG:
|
||||||
sendPack<ErrorLog>(sock, (ErrorLog*)pack->ptr, buf, buflen);
|
sendPack<ErrorLog>(sock, (ErrorLog*)pack->ptr, buf, buflen);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::LAST_PACK: [[fallthrough]];
|
case PACKET_TYPE::LAST_PACK: [[fallthrough]];
|
||||||
case PACKET_TYPE::ERR: [[fallthrough]];
|
case PACKET_TYPE::ERR: [[fallthrough]];
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
void netprot::sendPackTo<netprot::Packet>(SOCKET sock, Packet* pack, char** buf, uint32_t* buflen, sockaddr_in* sockad) {
|
void netprot::sendPackTo<netprot::Packet>(SOCKET sock, Packet* pack, char** buf, uint32_t* buflen, sockaddr_in* sockad) {
|
||||||
switch (pack->type) {
|
switch (pack->type) {
|
||||||
case PACKET_TYPE::INPUT:
|
case PACKET_TYPE::INPUT:
|
||||||
sendPackTo<Input>(sock, (Input*)pack->ptr, buf, buflen, sockad);
|
sendPackTo<Input>(sock, (Input*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::OUTPUT:
|
case PACKET_TYPE::OUTPUT:
|
||||||
sendPackTo<Output>(sock, (Output*)pack->ptr, buf, buflen, sockad);
|
sendPackTo<Output>(sock, (Output*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::SYNC:
|
case PACKET_TYPE::SYNC:
|
||||||
sendPackTo<Sync>(sock, (Sync*)pack->ptr, buf, buflen, sockad);
|
sendPackTo<Sync>(sock, (Sync*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::TEAMINF:
|
case PACKET_TYPE::TEAMINF:
|
||||||
sendPackTo<TeamInfo>(sock, (TeamInfo*)pack->ptr, buf, buflen, sockad);
|
sendPackTo<TeamInfo>(sock, (TeamInfo*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::PLAYINF:
|
case PACKET_TYPE::PLAYINF:
|
||||||
sendPackTo<PlayerInfo>(sock, (PlayerInfo*)pack->ptr, buf, buflen, sockad);
|
sendPackTo<PlayerInfo>(sock, (PlayerInfo*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::LOGINF:
|
case PACKET_TYPE::LOGINF:
|
||||||
sendPackTo<LoginInfo>(sock, (LoginInfo*)pack->ptr, buf, buflen, sockad);
|
sendPackTo<LoginInfo>(sock, (LoginInfo*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::CHUNKMOD:
|
case PACKET_TYPE::CHUNKMOD:
|
||||||
//sendPackTo<ChunkMod>(sock, (ChunkMod*)pack->ptr, buf, buflen, sockad);
|
//sendPackTo<ChunkMod>(sock, (ChunkMod*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::PLAYERMOD:
|
case PACKET_TYPE::PLAYERMOD:
|
||||||
//sendPackTo<PlayerMod>(sock, (PlayerMod*)pack->ptr, buf, buflen, sockad);
|
//sendPackTo<PlayerMod>(sock, (PlayerMod*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::PICKUPMOD:
|
case PACKET_TYPE::PICKUPMOD:
|
||||||
//sendPackTo<PickupMod>(sock, (PickupMod*)pack->ptr, buf, buflen, sockad);
|
//sendPackTo<PickupMod>(sock, (PickupMod*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::GAMEINFO:
|
case PACKET_TYPE::GAMEINFO:
|
||||||
sendPackTo<GameInfo>(sock, (GameInfo*)pack->ptr, buf, buflen, sockad);
|
sendPackTo<GameInfo>(sock, (GameInfo*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::ENDINFO:
|
case PACKET_TYPE::ENDINFO:
|
||||||
//sendPackTo<EndInfo>(sock, (EndInfo*)pack->ptr, buf, buflen, sockad);
|
//sendPackTo<EndInfo>(sock, (EndInfo*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::CHAT:
|
case PACKET_TYPE::CHAT:
|
||||||
sendPackTo<Chat>(sock, (Chat*)pack->ptr, buf, buflen, sockad);
|
sendPackTo<Chat>(sock, (Chat*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::ERRLOG:
|
case PACKET_TYPE::ERRLOG:
|
||||||
sendPackTo<ErrorLog>(sock, (ErrorLog*)pack->ptr, buf, buflen, sockad);
|
sendPackTo<ErrorLog>(sock, (ErrorLog*)pack->ptr, buf, buflen, sockad);
|
||||||
return;
|
return;
|
||||||
case PACKET_TYPE::LAST_PACK: [[fallthrough]];
|
case PACKET_TYPE::LAST_PACK: [[fallthrough]];
|
||||||
case PACKET_TYPE::ERR: [[fallthrough]];
|
case PACKET_TYPE::ERR: [[fallthrough]];
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -135,19 +135,19 @@ namespace netprot {
|
|||||||
void Serialize(Chat* chat, char* buf[], uint32_t* buflen); // cli/srv
|
void Serialize(Chat* chat, char* buf[], uint32_t* buflen); // cli/srv
|
||||||
void Serialize(ErrorLog* errlog, char* buf[], uint32_t* buflen); // srv
|
void Serialize(ErrorLog* errlog, char* buf[], uint32_t* buflen); // srv
|
||||||
|
|
||||||
bool Deserialize(Input* in, char* buf, const uint32_t buflen); // srv
|
bool Deserialize(Input* in, char* buf, uint32_t* buflen); // srv
|
||||||
bool Deserialize(Output* out, char* buf, const uint32_t buflen); // cli
|
bool Deserialize(Output* out, char* buf, uint32_t* buflen); // cli
|
||||||
bool Deserialize(Sync* sync, char* buf, const uint32_t buflen); // cli
|
bool Deserialize(Sync* sync, char* buf, uint32_t* buflen); // cli
|
||||||
bool Deserialize(TeamInfo* tinfo, char* buf, const uint32_t buflen); // cli/srv
|
bool Deserialize(TeamInfo* tinfo, char* buf, uint32_t* buflen); // cli/srv
|
||||||
bool Deserialize(LoginInfo* linfo, char* buf, const uint32_t buflen); // cli/srv
|
bool Deserialize(LoginInfo* linfo, char* buf, uint32_t* buflen); // cli/srv
|
||||||
bool Deserialize(PlayerInfo* pinfo, char* buf, const uint32_t buflen); // cli
|
bool Deserialize(PlayerInfo* pinfo, char* buf, uint32_t* buflen); // cli
|
||||||
bool Deserialize(GameInfo* ginfo, char* buf, const uint32_t buflen); // cli
|
bool Deserialize(GameInfo* ginfo, char* buf, uint32_t* buflen); // cli
|
||||||
bool Deserialize(Chat* chat, char* buf, const uint32_t buflen); // srv/cli
|
bool Deserialize(Chat* chat, char* buf, uint32_t* buflen); // srv/cli
|
||||||
bool Deserialize(ErrorLog* errlog, char* buf, const uint32_t buflen); // srv
|
bool Deserialize(ErrorLog* errlog, char* buf, uint32_t* buflen); // srv
|
||||||
|
|
||||||
PACKET_TYPE getType(char* buf, uint32_t buflen);
|
PACKET_TYPE getType(char* buf, uint32_t buflen);
|
||||||
|
|
||||||
Packet getPack(char* buf, uint32_t buflen);
|
Packet getPack(char* buf, uint32_t *buflen);
|
||||||
Packet getPack(Buffer* buf);
|
Packet getPack(Buffer* buf);
|
||||||
|
|
||||||
bool emptyPack(Packet pck);
|
bool emptyPack(Packet pck);
|
||||||
@ -160,7 +160,7 @@ namespace netprot {
|
|||||||
template <class T> void sendPack(SOCKET sock, T* pack, Buffer* buf);
|
template <class T> void sendPack(SOCKET sock, T* pack, Buffer* buf);
|
||||||
template <class T> void sendPackTo(SOCKET sock, T* pack, Buffer* buf, sockaddr_in* sockad);
|
template <class T> void sendPackTo(SOCKET sock, T* pack, Buffer* buf, sockaddr_in* sockad);
|
||||||
|
|
||||||
std::vector<Packet> recvPacks(SOCKET sock, Buffer* buf);
|
std::vector<char*> recvPacks(SOCKET sock, Buffer* buf);
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void sendPack(SOCKET sock, T* pack, char** buf, uint32_t* buflen) {
|
void sendPack(SOCKET sock, T* pack, char** buf, uint32_t* buflen) {
|
||||||
|
@ -71,42 +71,46 @@ int Connector::Connect(const char* srv_addr, std::string name) {
|
|||||||
|
|
||||||
bool ready = false;
|
bool ready = false;
|
||||||
int errors = 0;
|
int errors = 0;
|
||||||
std::vector<netprot::Packet> lsPck;
|
std::vector<char*> lsPck;
|
||||||
while (!ready) {
|
while (!ready) {
|
||||||
lsPck = netprot::recvPacks(m_sock_tcp, &bf);
|
lsPck = netprot::recvPacks(m_sock_tcp, &bf);
|
||||||
|
|
||||||
for (auto& pck : lsPck) {
|
for (auto& pck : lsPck) {
|
||||||
bool bypass_delete = false;
|
uint32_t bsize = bf.len - (pck - bf.ptr);
|
||||||
netprot::PlayerInfo* pl = nullptr;
|
netprot::PlayerInfo* pl = nullptr;
|
||||||
switch (pck.type) {
|
switch (netprot::getType(pck, 1)) {
|
||||||
using enum netprot::PACKET_TYPE;
|
using enum netprot::PACKET_TYPE;
|
||||||
case LOGINF:
|
case LOGINF:
|
||||||
m_loginfo = netprot::LoginInfo((netprot::LoginInfo*)pck.ptr);
|
if (!netprot::Deserialize(&m_loginfo, pck, &bsize))
|
||||||
|
++errors;
|
||||||
break;
|
break;
|
||||||
case GAMEINFO:
|
case GAMEINFO:
|
||||||
m_gameinfo = netprot::GameInfo((netprot::GameInfo*)pck.ptr);
|
if (!netprot::Deserialize(&m_gameinfo, pck, &bsize))
|
||||||
|
++errors;
|
||||||
break;
|
break;
|
||||||
case PLAYINF:
|
case PLAYINF:
|
||||||
pl = (netprot::PlayerInfo*)pck.ptr;
|
pl = new netprot::PlayerInfo();
|
||||||
m_players[pl->id] = pl;
|
if (!netprot::Deserialize(pl, pck, &bsize))
|
||||||
bypass_delete = true;
|
++errors;
|
||||||
|
else m_players[pl->id] = pl;
|
||||||
break;
|
break;
|
||||||
case TEAMINF:
|
case TEAMINF:
|
||||||
// TODO: Faire dequoi avec TeamInfo si on fini par avoir des teams.
|
// TODO: Faire dequoi avec TeamInfo si on fini par avoir des teams.
|
||||||
break;
|
break;
|
||||||
case SYNC:
|
case SYNC:
|
||||||
m_origin = netprot::Sync((netprot::Sync*)pck.ptr);
|
if (!netprot::Deserialize(&m_origin, pck, &bsize))
|
||||||
|
++errors;
|
||||||
ready = true;
|
ready = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
errors++;
|
errors++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!bypass_delete)
|
|
||||||
netprot::emptyPack(pck);
|
|
||||||
}
|
}
|
||||||
|
if (lsPck.empty())
|
||||||
|
errors++;
|
||||||
lsPck.clear();
|
lsPck.clear();
|
||||||
if (errors > 100)
|
if (errors > 1000000)
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user