X-Git-Url: https://git.cworth.org/git?p=ttt;a=blobdiff_plain;f=src%2Fttt-client.c;h=7b37fad3c5ecade9e6acc9ec6bd98a78c5f9b6d6;hp=24738649e2f52990dd3631e48e1eee9183c28d40;hb=e26c0a51dea5e5ade3bdf081f29500a0fe3944d3;hpb=65526318e1c88d56bd1a78d072c4d38252dbd864 diff --git a/src/ttt-client.c b/src/ttt-client.c index 2473864..7b37fad 100644 --- a/src/ttt-client.c +++ b/src/ttt-client.c @@ -62,6 +62,13 @@ _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; @@ -69,10 +76,12 @@ typedef struct _ttt_command_description { } 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 @@ -100,6 +109,9 @@ _ttt_client_execute_helo (ttt_client_t *client, ttt_client_send (client, response); + xasprintf (&response, "NOTICE USER %s\n",client->name); + ttt_server_broadcast(client->server,response); + free (response); return TTT_ERROR_NONE; @@ -110,7 +122,7 @@ _ttt_client_execute_who (ttt_client_t *client, char **args, int num_args) { - const char *response; + char *response; assert (num_args == 0); @@ -124,15 +136,46 @@ _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); + char *notice; + assert (num_args == 0); + xasprintf (¬ice,"NOTICE QUIT %s\n",client->name); + ttt_server_broadcast(client->server,notice); + free (notice); 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); @@ -249,7 +292,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); }