bettola/srv/main.cpp

67 lines
1.8 KiB
C++

#include <cstdio>
#include "bettola/network/socket.h"
#include "bettola/network/net_common.h"
#include "bettola/network/message.h"
#include "bettola/network/player_pos_message.h"
int main(void) {
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. */
}
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) {
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);
}
}
}
}
server_socket.close(); /* Shouldn't reach here. */
printf("=== Bettola Server: Shutting Down ===\n");
return 0;
}