Gros refactoring sale.
This commit is contained in:
@@ -1,26 +1,33 @@
|
||||
#ifndef NETPROTOCOL_H__
|
||||
#define NETPROTOCOL_H__
|
||||
|
||||
#include "define.h"
|
||||
#include <string>
|
||||
#include "define.h"
|
||||
#include "vector3.h"
|
||||
|
||||
/* Protocole Particulier de Partie <EFBFBD> Plusieurs Personnes (PPPPP) */
|
||||
/* Protocole Particulier de Partie a Plusieurs Personnes (PPPPP) */
|
||||
|
||||
// Packet: packet[0] = PacketType, packet[1..n-1] = {packet}
|
||||
|
||||
namespace netprot {
|
||||
typedef uint8_t PacketType;
|
||||
enum PACKET_TYPE {
|
||||
enum class PACKET_TYPE: uint8_t {
|
||||
ERR, INPUT, OUTPUT, SYNC,
|
||||
TEAMINF, SELFINF, PLAYINF, LOGINF,
|
||||
CHUNKMOD, PLAYERMOD, PICKUPMOD,
|
||||
GAMEINFO, ENDINFO , CHAT, ERRLOG,
|
||||
LAST_PACK
|
||||
};
|
||||
|
||||
struct Buffer { // Pour pouvoir rendre l'utilisation des buffers plus clean.
|
||||
char* ptr = new char[BUFFER_LENGTH];
|
||||
int32_t len = BUFFER_LENGTH;
|
||||
|
||||
struct Packet {
|
||||
void* ptr = nullptr;
|
||||
~Buffer() { delete[] ptr; }
|
||||
void rstLen() { len = BUFFER_LENGTH; }
|
||||
};
|
||||
|
||||
struct Packet { // Pour pouvoir recevoir les paquets du recv() sans avoir à les aiguiller dans la même thread.
|
||||
void* ptr = nullptr; // Notez que le pointeur doit être supprimé séparément lorsqu'il n'est plus utile.
|
||||
PACKET_TYPE type;
|
||||
};
|
||||
|
||||
@@ -120,14 +127,19 @@ namespace netprot {
|
||||
bool Deserialize(Chat* chat, char* buf, const uint32_t buflen); // srv/cli
|
||||
bool Deserialize(ErrorLog* errlog, char* buf, const uint32_t buflen); // srv
|
||||
|
||||
PacketType getType(char* buf, uint32_t buflen);
|
||||
PACKET_TYPE getType(char* buf, uint32_t buflen);
|
||||
|
||||
Packet getPack(char* buf, uint32_t buflen);
|
||||
Packet getPack(Buffer* buf);
|
||||
|
||||
bool emptyPack(Packet pck);
|
||||
|
||||
template <class T> void sendPack(SOCKET sock, T* pack, char** buf, uint32_t* buflen);
|
||||
template <class T> void sendPackTo(SOCKET sock, T* pack, char** buf, uint32_t* buflen, sockaddr_in* sockad);
|
||||
|
||||
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 sendPack(SOCKET sock, T* pack, char** buf, uint32_t* buflen) {
|
||||
netprot::Serialize(pack, buf, buflen);
|
||||
@@ -143,6 +155,19 @@ namespace netprot {
|
||||
*buflen = BUFFER_LENGTH;
|
||||
}
|
||||
|
||||
};
|
||||
template <class T>
|
||||
void sendPack(SOCKET sock, T* pack, Buffer* buf) {
|
||||
netprot::Serialize(pack, buf->ptr, buf->len);
|
||||
send(sock, buf->ptr, buf->len, 0);
|
||||
buf->rstLen();
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void sendPackTo(SOCKET sock, T* pack, Buffer* buf, sockaddr_in* sockad) {
|
||||
sockaddr_in addr = *sockad;
|
||||
netprot::Serialize(pack, buf->ptr, buf->len);
|
||||
sendto(sock, buf->ptr, buf->len, 0, (sockaddr*)&addr, sizeof(addr));
|
||||
buf->rstLen();
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user