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