From fb7c828d7963a599cb43593ecd70a317e7cdb962 Mon Sep 17 00:00:00 2001 From: Richard Worth Date: Tue, 6 Dec 2005 15:27:01 +0000 Subject: [PATCH] 2005-12-06 Richard D. Worth * PROTOCOL: Add error NO_INVITE * TODO: Uncheck INVITE, ACCEPT * src/ttt-error.c: (ttt_error_string): Add errors NO_INVITE, NO_GAME * src/ttt-client.c: (_ttt_client_execute_message), (_ttt_client_execute_help), (_ttt_client_execute_version), (_ttt_client_execute_invite), (_ttt_client_execute_accept), (_ttt_client_execute_retract), (_ttt_client_execute_decline): Whitespace changes. Partially implement RETRACT, DECLINE. --- ChangeLog | 15 ++++++ PROTOCOL | 17 ++++-- TODO | 7 +-- src/ttt-client.c | 138 ++++++++++++++++++++++++++++++++++++++++------- src/ttt-error.c | 4 ++ 5 files changed, 154 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index fdbb515..efc5645 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2005-12-06 Richard D. Worth + + * PROTOCOL: Add error NO_INVITE + + * TODO: Uncheck INVITE, ACCEPT + + * src/ttt-error.c: (ttt_error_string): Add errors NO_INVITE, + NO_GAME + + * src/ttt-client.c: (_ttt_client_execute_message), + (_ttt_client_execute_help), (_ttt_client_execute_version), + (_ttt_client_execute_invite), (_ttt_client_execute_accept), + (_ttt_client_execute_retract), (_ttt_client_execute_decline): + Whitespace changes. Partially implement RETRACT, DECLINE. + 2005-12-05 Richard D. Worth * PROTOCOL: Fill some missing possible error occurrences. diff --git a/PROTOCOL b/PROTOCOL index ad6369c..d765ba0 100644 --- a/PROTOCOL +++ b/PROTOCOL @@ -149,7 +149,7 @@ Document Conventions ACCEPT - Possible errors: NO_NAME_SET, NO_USER + Possible errors: NO_NAME_SET, NO_USER, NO_INVITE 1.3.3. Retracting an invitiation @@ -159,7 +159,7 @@ Document Conventions RETRACT - Possible errors: NO_NAME_SET, NO_USER + Possible errors: NO_NAME_SET, NO_USER, NO_INVITE 1.3.3. Declining an invitation @@ -169,7 +169,7 @@ Document Conventions DECLINE - Possible errors: NO_NAME_SET, NO_USER + Possible errors: NO_NAME_SET, NO_USER, NO_INVITE 1.4. In-game commands @@ -386,7 +386,16 @@ Document Conventions Errors from game management commands - 3.4.1. No such game + 3.4.1. No invitiation from/for specified user + + ERROR NO_INVITE + + An invitiation action was attempted where no invitation + exists. + + Possibly returned by: ACCEPT, RETRACT, DECLINE + + 3.4.2. No such game ERROR NO_GAME diff --git a/TODO b/TODO index e4f3b5d..25a1dd3 100644 --- a/TODO +++ b/TODO @@ -14,8 +14,8 @@ S C ✓ 1.2.5. QUIT ✓ 1.2.6. VERSION 1.3. Game management commands -✓ 1.3.1. INVITE -✓ 1.3.2. ACCEPT + 1.3.1. INVITE + 1.3.2. ACCEPT 1.3.3. RETRACT 1.3.4. DECLINE 1.4. In-game commands @@ -50,7 +50,8 @@ S C 3.2.4. ERROR NOT_GRID 3.3. Global command errors. 3.4. Game management errors. - 3.4.1. ERROR NO_GAME + 3.4.1. ERROR NO_INVITE + 3.4.2. ERROR NO_GAME 3.5. User information errors ✓ 3.5.1. ERROR NO_USER 3.6. In-game errors 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); diff --git a/src/ttt-error.c b/src/ttt-error.c index d3e57cb..9022e93 100644 --- a/src/ttt-error.c +++ b/src/ttt-error.c @@ -39,6 +39,10 @@ ttt_error_string (ttt_error_t error) return "ERROR NOT_NUMBER\r\n"; case TTT_ERROR_NOT_GRID: return "ERROR NOT_GRID\r\n"; + case TTT_ERROR_NO_INVITE: + return "ERROR NO_INVITE\r\n"; + case TTT_ERROR_NO_GAME: + return "ERROR NO_GAME\r\n"; case TTT_ERROR_NO_USER: return "ERROR NO_USER\r\n"; case TTT_ERROR_NOT_IN_GAME: -- 2.43.0