Listing 3. Server Code

 1  #include <stdio.h>
 2  #include <string.h>
 3  #include <stdlib.h>
 4  #include <enet/enet.h>
 5  #include "config.h"

 6  ENetAddress  address;
 7  ENetHost   *server;
 8  ENetEvent  event;
 9  ENetPacket      *packet;

10  char    buffer[BUFFERSIZE];

11  int  main(int argc, char ** argv) {
12  int  i;

13    if (enet_initialize() != 0) {
14      printf("Could not initialize enet.");
15      return 0;
16    }

17    address.host = ENET_HOST_ANY;
18    address.port = PORT;

19    server = enet_host_create(&address, 100, 2, 0, 0);

20    if (server == NULL) {
21      printf("Could not start server.\n");
22      return 0;
23    }

24    while (1) {
25      while (enet_host_service(server, &event, 1000) > 0) {
26        switch (event.type) {

27          case ENET_EVENT_TYPE_CONNECT:
28            break;

29          case ENET_EVENT_TYPE_RECEIVE:
30            if (event.peer->data == NULL) {
31              event.peer->data =
                  malloc(strlen((char*) event.packet->data)+1);
32              strcpy((char*) event.peer->data, (char*)
                 event.packet->data);

33              sprintf(buffer, "%s has connected\n",
                  (char*) event.packet->data);
34              packet = enet_packet_create(buffer,
                  strlen(buffer)+1, 0);
35              enet_host_broadcast(server, 1, packet);
36              enet_host_flush(server);
37            } else {
38              for (i=0; i<server->peerCount; i++) {
39                if (&server->peers[i] != event.peer) {
40                  sprintf(buffer, "%s: %s",
41                    (char*) event.peer->data, (char*)
                       event.packet->data);
42                  packet = enet_packet_create(buffer,
                       strlen(buffer)+1, 0);
43                              enet_peer_send(&server->peers[i], 0,
                                packet);
44                  enet_host_flush(server);
45                } else {

46                }
47              }
48            }
49            break;

50          case ENET_EVENT_TYPE_DISCONNECT:
51            sprintf(buffer, "%s has disconnected.", (char*)
                  event.peer->data);
52            packet = enet_packet_create(buffer, strlen(buffer)+1, 0);
53            enet_host_broadcast(server, 1, packet);
54            free(event.peer->data);
55            event.peer->data = NULL;
56            break;

57          default:
58            printf("Tick tock.\n");
59            break;
60        }

61      }
62    }

63    enet_host_destroy(server);
64    enet_deinitialize();
65  }

