#include #include "bettola/network/socket.h" #include "bettola/network/net_common.h" #include "bettola/network/message.h" #include "bettola/network/player_pos_message.h" #include "game/game.h" int main(void) { Game game; printf("=== Bettola Server: Starting ===\n"); BettolaLib::Network::Socket server_socket; if(!server_socket.create()) { printf("Bettola Server: Failed to create socket.\n"); return 1; } if(!server_socket.bind(BettolaLib::Network::DEFAULT_PORT)) { printf("Bettola Server: Failed to bind socket to port %hu.\n", BettolaLib::Network::DEFAULT_PORT); server_socket.close(); return 1; } if(!server_socket.listen()) { printf("Bettola Server: Failed to listen on socket.\n"); server_socket.close(); return 1; } printf("Bettola Server: Listening on port %hu...\n", BettolaLib::Network::DEFAULT_PORT); /* Main server loop. */ while(true) { BettolaLib::Network::Socket* client_socket = server_socket.accept(); if(client_socket == nullptr) { printf("Bettola Server: Failed to accept client connection.\n"); continue; /* try accepting again. */ } game.add_player(client_socket); printf("Bettola Server: Client connected!\n"); while(true) { BettolaLib::Network::MessageHeader header; ssize_t bytes_received = client_socket->recv(&header, sizeof(header)); if(bytes_received <= 0) { game.remove_player(client_socket); break; } if(header.type == BettolaLib::Network::MessageType::PlayerPosition) { BettolaLib::Network::PlayerPosMessage msg; bytes_received = client_socket->recv(&msg, sizeof(msg)); if(bytes_received > 0) { printf("Bettola Server: Received PlayerPosition messgae: x=%.2f, y=%.2f\n", msg.x, msg.y); game.update_player_pos(client_socket, msg.x, msg.y); } } } } server_socket.close(); /* Shouldn't reach here. */ printf("=== Bettola Server: Shutting Down ===\n"); return 0; }