X-Git-Url: https://git.cworth.org/git?p=ttt;a=blobdiff_plain;f=src%2Fttt-client.c;fp=src%2Fttt-client.c;h=7797090a49b17d94d8467c9c0718c3b49bd78fcc;hp=9d88380640bd096bc950c0965a2f78f467753086;hb=fb7c828d7963a599cb43593ecd70a317e7cdb962;hpb=747a73feb09523f99f5fb65dcb048ba38cc6eeb6 diff --git a/src/ttt-client.c b/src/ttt-client.c index 9d88380..7797090 100644 --- a/src/ttt-client.c +++ b/src/ttt-client.c @@ -46,8 +46,8 @@ struct _ttt_client { }; typedef ttt_error_t (*ttt_command_func_t) (ttt_client_t *client, - char **args, - int num_args); + char **args, + int num_args); static ttt_error_t _ttt_client_execute_helo (ttt_client_t *client, @@ -71,13 +71,13 @@ _ttt_client_execute_message (ttt_client_t *client, static ttt_error_t _ttt_client_execute_help (ttt_client_t *client, - char **args, - int num_args); + char **args, + int num_args); static ttt_error_t _ttt_client_execute_version (ttt_client_t *client, - char **args, - int num_args); + char **args, + int num_args); static ttt_error_t _ttt_client_execute_quit (ttt_client_t *client, @@ -86,13 +86,23 @@ _ttt_client_execute_quit (ttt_client_t *client, static ttt_error_t _ttt_client_execute_invite (ttt_client_t *client, - char **args, - int num_args); + char **args, + int num_args); static ttt_error_t _ttt_client_execute_accept (ttt_client_t *client, - char **args, - int num_args); + char **args, + int num_args); + +static ttt_error_t +_ttt_client_execute_retract (ttt_client_t *client, + char **args, + int num_args); + +static ttt_error_t +_ttt_client_execute_decline (ttt_client_t *client, + char **args, + int num_args); typedef struct _ttt_command_description { const char *command; @@ -116,6 +126,12 @@ ttt_command_description_t command_descriptions[] = { {"ACCEPT", 1, 1, _ttt_client_execute_accept, "ACCEPT ", "Accept a game invitation."}, + {"RETRACT", 1, 1, _ttt_client_execute_retract, + "RETRACT ", "Retract a game invitation."}, + + {"DECLINE", 1, 1, _ttt_client_execute_decline, + "DECLINE ", "Decline a game invitation."}, + {"MESSAGE", 1, 1, _ttt_client_execute_message, "MESSAGE ", "Send a message to everyone."}, @@ -217,8 +233,8 @@ _ttt_client_execute_statistics (ttt_client_t *client, static ttt_error_t _ttt_client_execute_message (ttt_client_t *client, - char **args, - int num_args) + char **args, + int num_args) { char *response; char *notice; @@ -244,8 +260,8 @@ _ttt_client_execute_message (ttt_client_t *client, static ttt_error_t _ttt_client_execute_help (ttt_client_t *client, - char **args, - int num_args) + char **args, + int num_args) { char *response; char *command; @@ -297,8 +313,8 @@ _ttt_client_execute_help (ttt_client_t *client, static ttt_error_t _ttt_client_execute_version (ttt_client_t *client, - char **args, - int num_args) + char **args, + int num_args) { char *response; char *clientversion; @@ -352,8 +368,8 @@ _ttt_client_execute_quit (ttt_client_t *client, static ttt_error_t _ttt_client_execute_invite (ttt_client_t *client, - char **args, - int num_args) + char **args, + int num_args) { const char *username; char *response; @@ -379,6 +395,8 @@ _ttt_client_execute_invite (ttt_client_t *client, username); ttt_server_broadcast (client->server, notice); + /* XXX: Store invitation in state */ + free (notice); free (response); @@ -387,8 +405,8 @@ _ttt_client_execute_invite (ttt_client_t *client, static ttt_error_t _ttt_client_execute_accept (ttt_client_t *client, - char **args, - int num_args) + char **args, + int num_args) { const char *username; char *response; @@ -406,6 +424,8 @@ _ttt_client_execute_accept (ttt_client_t *client, if (error) return error; + /* XXX: Verify invitation, else return ERROR NO_INVITE */ + xasprintf (&response, "ACCEPT\r\n"); ttt_client_send (client, response); @@ -422,6 +442,84 @@ _ttt_client_execute_accept (ttt_client_t *client, return TTT_ERROR_NONE; } +static ttt_error_t +_ttt_client_execute_retract (ttt_client_t *client, + char **args, + int num_args) +{ + const char *username; + char *response; + char *notice; + ttt_error_t error; + + assert (num_args == 1); + + username = args[0]; + + if (!client->registered) + return TTT_ERROR_NO_NAME_SET; + + error = ttt_server_verify_username (client->server, username); + if (error) + return error; + + /* XXX: Verify invitation, else return ERROR NO_INVITE */ + + xasprintf (&response, "RETRACT\r\n"); + ttt_client_send (client, response); + + xasprintf (¬ice, "NOTICE RETRACT %s %s\r\n", + client->username, + username); + ttt_server_broadcast (client->server, notice); + + /* XXX: Remove invitiation from state */ + + free (notice); + free (response); + + return TTT_ERROR_NONE; +} + +static ttt_error_t +_ttt_client_execute_decline (ttt_client_t *client, + char **args, + int num_args) +{ + const char *username; + char *response; + char *notice; + ttt_error_t error; + + assert (num_args == 1); + + username = args[0]; + + if (!client->registered) + return TTT_ERROR_NO_NAME_SET; + + error = ttt_server_verify_username (client->server, username); + if (error) + return error; + + /* XXX: Verify invitation, else return ERROR NO_INVITE */ + + xasprintf (&response, "DECLINE\r\n"); + ttt_client_send (client, response); + + xasprintf (¬ice, "NOTICE DECLINE %s %s\r\n", + client->username, + username); + ttt_server_broadcast (client->server, notice); + + /* XXX: Remove invitation from state */ + + free (notice); + free (response); + + return TTT_ERROR_NONE; +} + static void _free_request (ttt_client_t *client);