+struct _ttt_server {
+ pthread_mutex_t mutex;
+
+ int next_client_id;
+
+ ttt_client_t **clients;
+ int clients_size;
+ int num_clients;
+};
+
+static void
+ttt_server_init (ttt_server_t *server)
+{
+ pthread_mutex_init (&server->mutex, NULL);
+
+ server->next_client_id = 0;
+
+ server->clients = NULL;
+ server->clients_size = 0;
+ server->num_clients = 0;
+}
+
+static ttt_client_t *
+ttt_server_create_client (ttt_server_t *server, int client_socket)
+{
+ ttt_client_t *client;
+
+ pthread_mutex_lock (&server->mutex);
+
+ client = ttt_client_create (server, client_socket,
+ server->next_client_id++);
+
+ printf ("Client %d has joined.\n", client->id);
+
+ server->num_clients++;
+
+ if (server->num_clients > server->clients_size) {
+ if (server->clients_size == 0)
+ server->clients_size = 1;
+ else
+ server->clients_size *= 2;
+
+ server->clients = xrealloc (server->clients,
+ server->clients_size * sizeof (ttt_client_t *));
+ }
+
+ server->clients [server->num_clients - 1] = client;
+
+ pthread_mutex_unlock (&server->mutex);
+
+ return client;
+}
+