#include "network.h" void SendMessage(UDPsocket sock, IPaddress address, ProtocolMessage m) { UDPpacket packet = { .channel = -1, .data = (void *) &m, .len = MessageSize(m), .maxlen = sizeof(ProtocolMessage), .status = 0, .address = address, }; if(!SDLNet_UDP_Send(sock, -1, &packet)) { SDL_Log("Messge not sended: %s\n", SDLNet_GetError()); exit(1); } } bool RecvMessage(UDPsocket sock, IPaddress * address, ProtocolMessage * m) { UDPpacket packet = { .channel = -1, .data = (void *) m, .len = sizeof(ProtocolMessage), .maxlen = sizeof(ProtocolMessage), .status = 0, .address = (IPaddress) { 0, 0 }, }; int status; status = SDLNet_UDP_Recv(sock, &packet); if(status < 0) goto error_recv; else if(status == 0) goto error_norecv; if(address) *address = packet.address; return true; error_recv: SDL_Log("Messge not received: %s\n", SDLNet_GetError()); exit(1); error_norecv: return false; } bool WaitMessage(UDPsocket sock, IPaddress * address, ProtocolMessage * m, uint32_t timeout) { uint32_t lastTime = SDL_GetTicks(); while(SDL_GetTicks() - lastTime < timeout) { if(RecvMessage(sock, address, m)) return true; SDL_Delay(1); } return false; }