2005-12-06 Richard D. Worth <richard@theworths.org>
authorRichard Worth <richard@theworths.org>
Tue, 6 Dec 2005 15:27:01 +0000 (15:27 +0000)
committerRichard Worth <richard@theworths.org>
Tue, 6 Dec 2005 15:27:01 +0000 (15:27 +0000)
        * 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
PROTOCOL
TODO
src/ttt-client.c
src/ttt-error.c

index fdbb515f31f50357f55b7ede766d39d579acfc5d..efc5645c50eced60c6e38b63c3f5876677b72025 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2005-12-06  Richard D. Worth  <richard@theworths.org>
+
+       * 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  <richard@theworths.org>
 
        * PROTOCOL: Fill some missing possible error occurrences.
index ad6369c25857f591422abe21bbdefe83cc5b5108..d765ba0ed853e9f9351289f7ee27421056d70380 100644 (file)
--- 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 e4f3b5d4b2a3d3920d318b0cdc50b50281696888..25a1dd302e66e153cda597a5d06ea4c18c02cbfe 100644 (file)
--- 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
index 9d88380640bd096bc950c0965a2f78f467753086..7797090a49b17d94d8467c9c0718c3b49bd78fcc 100644 (file)
@@ -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 <username>       ", "Accept a game invitation."},
 
+    {"RETRACT", 1, 1, _ttt_client_execute_retract,
+     "RETRACT <username>       ", "Retract a game invitation."},
+
+    {"DECLINE", 1, 1, _ttt_client_execute_decline,
+     "DECLINE <username>       ", "Decline a game invitation."},
+
     {"MESSAGE", 1, 1, _ttt_client_execute_message,
      "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 (&notice, "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 (&notice, "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);
 
index d3e57cba6791da535d6ac64f90ad2aad5de51bc7..9022e93b74b1f131789d29454576e6cda7115add 100644 (file)
@@ -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: