#include "enet/enet.h" #include #include #ifndef WIN32 #include // So we can sleep. #endif void cross_sleep(unsigned long ms); int main (int argc, char ** argv) { if(enet_initialize()!=0) { printf("Unable to initialize the network library.\n"); getchar(); return 0; } ENetAddress address; ENetHost* server=NULL; address.host=ENET_HOST_ANY; address.port=65532; server = enet_host_create(&address, 32, 0, 0); if(server==NULL) { printf("Unable to start a server on port %u.\n", address.port); enet_deinitialize(); getchar(); return 0; } printf("Server started on port %u. Press space to stop.\n", address.port); ENetEvent event; char peer_IP[64]; bool shutdown=false; while(enet_host_service(server, &event, 0)>=0) { if(shutdown==true) break; switch (event.type) { case ENET_EVENT_TYPE_CONNECT: peer_IP[0]=0; enet_address_get_host_ip(&event.peer->address, peer_IP, 64); printf("A new client connected from %s.\n", peer_IP); event.peer -> data = NULL; break; case ENET_EVENT_TYPE_DISCONNECT: peer_IP[0]=0; enet_address_get_host_ip(&event.peer->address, peer_IP, 64); printf("The client from %s has just disconnected.\n", peer_IP); event.peer -> data = NULL; // Just to be petty, we haven't actually allocated anything. break; case ENET_EVENT_TYPE_RECEIVE: if(strcmp((const char *)event.packet->data, "/shutdown")==0) { enet_packet_destroy(event.packet); shutdown=true; break; } peer_IP[0]=0; enet_address_get_host_ip(&event.peer->address, peer_IP, 64); printf("On channel %u, the client from %s writes:\n%s\n", event.channelID, peer_IP, event.packet->data); enet_packet_destroy(event.packet); break; default: break; } cross_sleep(1); } enet_host_destroy(server); // Bad. We should do a much nicer disconnect here. enet_deinitialize(); printf("Server stopped.\n"); getchar(); return 0; } void cross_sleep(unsigned long ms) { #ifndef WIN32 usleep(ms*1000); // usleep doesn't take milliseconds, so we need to convert. #else Sleep(ms); #endif }