X-Git-Url: https://git.cworth.org/git?p=ttt;a=blobdiff_plain;f=src%2Fttt-client.c;h=53cc4ff3556ce728669a8833919a85c19d197a01;hp=9c9b819f8c1a3dfeebcbe5c693e58811bca45c9b;hb=e2c8706061d31d48f9516297d118d230354a5949;hpb=980a478f042f8cf48f4484bb117fab8dafd8b450 diff --git a/src/ttt-client.c b/src/ttt-client.c index 9c9b819..53cc4ff 100644 --- a/src/ttt-client.c +++ b/src/ttt-client.c @@ -29,17 +29,18 @@ struct _ttt_client { pthread_mutex_t mutex; - pthread_t thread; + pthread_t thread; - ttt_server_t *server; - int socket; - yyscan_t scanner; + ttt_server_t *server; + int socket; + yyscan_t scanner; - char *name; - ttt_bool_t registered; + char **request_strings; + int num_request_strings; - char **request_strings; - int num_request_strings; + char *name; + ttt_bool_t registered; + int num_wins; }; typedef ttt_error_t (*ttt_command_func_t) (ttt_client_t *client, @@ -61,17 +62,26 @@ _ttt_client_execute_quit (ttt_client_t *client, char **args, int num_args); +static ttt_error_t +_ttt_client_execute_message (ttt_client_t *client, + char **args, + int num_args); + + + typedef struct _ttt_command_description { - const char *command; - int args_required; + const char *command; + int args_required; ttt_command_func_t execute; } ttt_command_description_t; ttt_command_description_t command_descriptions[] = { - {"HELO", 1, _ttt_client_execute_helo}, - {"WHO", 0, _ttt_client_execute_who}, - {"QUIT", 0, _ttt_client_execute_quit} + {"HELO", 1, _ttt_client_execute_helo}, + {"WHO", 0, _ttt_client_execute_who }, + {"QUIT", 0, _ttt_client_execute_quit}, + {"MESSAGE", 1, _ttt_client_execute_message} }; + #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) static ttt_error_t @@ -92,7 +102,8 @@ _ttt_client_execute_helo (ttt_client_t *client, client->registered = TRUE; - xasprintf (&response, "HELO %s %s %s\n", client->name, + xasprintf (&response, "HELO %s %s %s\n", + client->name, ttt_server_get_host (client->server), ttt_server_get_port (client->server)); @@ -108,7 +119,7 @@ _ttt_client_execute_who (ttt_client_t *client, char **args, int num_args) { - const char *response; + char *response; assert (num_args == 0); @@ -122,15 +133,42 @@ _ttt_client_execute_who (ttt_client_t *client, } static ttt_error_t -_ttt_client_execute_quit (ttt_client_t *client, - char **args, - int num_args) +_ttt_client_execute_quit (ttt_client_t *client, + char **args, + int num_args) { assert (num_args == 0); return TTT_ERROR_QUIT_REQUESTED; } +static ttt_error_t +_ttt_client_execute_message (ttt_client_t *client, + char **args, + int num_args) +{ + char *response; + int i; + + assert (num_args > 0); + + xasprintf(&response, "MESSAGE\n"); + ttt_client_send (client, response); + + xasprintf(&response, "NOTICE MESSAGE %s", client->name); + for (i=0; iserver,response); + + free (response); + return TTT_ERROR_NONE; + + +} + static void _free_request (ttt_client_t *client); @@ -155,6 +193,7 @@ _ttt_client_init (ttt_client_t *client, client->name = NULL; client->registered = FALSE; + client->num_wins = 0; } static void @@ -246,7 +285,7 @@ _execute_request (ttt_client_t *client) for (i=0; i < ARRAY_SIZE(command_descriptions); i++) { desc = &command_descriptions[i]; if (strcmp(command, desc->command) == 0) { - if (num_args != desc->args_required) + if (num_args < desc->args_required) return TTT_ERROR_SYNTAX; return (desc->execute) (client, &client->request_strings[1], num_args); } @@ -329,3 +368,10 @@ ttt_client_set_name (ttt_client_t *client, const char *name) free (client->name); client->name = xstrdup (name); } + +/* Exported: See ttt-client.h for documentation. */ +int +ttt_client_get_num_wins (ttt_client_t *client) +{ + return client->num_wins; +}