From f2187ebd49f78b84bd2dca6172abc81e54dda199 Mon Sep 17 00:00:00 2001 From: Richard Worth Date: Fri, 2 Dec 2005 13:20:42 +0000 Subject: [PATCH] 2005-12-02 Richard D. Worth * TODO: Check off Global commands, HELP, VERSION. * src/ttt-client.c: (_ttt_client_execute_message), (_ttt_client_execute_help), (_execute_request): Whitespace changes. Implement HELP with usage and short description. * src/ttt-server.c: Update the server welcome message. --- ChangeLog | 10 ++++++ TODO | 6 ++-- src/ttt-client.c | 82 +++++++++++++++++++++++++++++++++++++++--------- src/ttt-server.c | 30 +++++++----------- 4 files changed, 91 insertions(+), 37 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2361926..bb05052 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2005-12-02 Richard D. Worth + + * TODO: Check off Global commands, HELP, VERSION. + + * src/ttt-client.c: (_ttt_client_execute_message), + (_ttt_client_execute_help), (_execute_request): Whitespace + changes. Implement HELP with usage and short description. + + * src/ttt-server.c: Update the server welcome message. + 2005-12-01 Richard D. Worth * TODO: Check off NOTICE MESSAGE, ERROR NONAMESET. diff --git a/TODO b/TODO index ec6630f..f0bf20a 100644 --- a/TODO +++ b/TODO @@ -6,12 +6,12 @@ working on something. S C 1. Requests ✓ 1.1 HELO - 1.2. Global commands +✓ 1.2. Global commands ✓ 1.2.1. WHO ✓ 1.2.2. MESSAGE - 1.2.3. HELP +✓ 1.2.3. HELP ✓ 1.2.4. QUIT - 1.2.5. VERSION +✓ 1.2.5. VERSION 1.3. Game management commands 1.3.1. INVITE 1.3.2. ACCEPT diff --git a/src/ttt-client.c b/src/ttt-client.c index 81f6e13..1dd755f 100644 --- a/src/ttt-client.c +++ b/src/ttt-client.c @@ -84,15 +84,28 @@ typedef struct _ttt_command_description { int args_min; int args_max; ttt_command_func_t execute; + const char *usage; + const char *description; } ttt_command_description_t; ttt_command_description_t command_descriptions[] = { - {"HELO", 1, 1, _ttt_client_execute_helo }, - {"WHO", 0, 0, _ttt_client_execute_who }, - {"MESSAGE", 1, 1, _ttt_client_execute_message}, - {"HELP", 0, 1, _ttt_client_execute_help }, - {"VERSION", 1, 1, _ttt_client_execute_version}, - {"QUIT", 0, 0, _ttt_client_execute_quit } + {"HELO", 1, 1, _ttt_client_execute_helo, + "HELO ", "Register."}, + + {"HELP", 0, 1, _ttt_client_execute_help, + "HELP ", "Display help for a command."}, + + {"MESSAGE", 1, 1, _ttt_client_execute_message, + "MESSAGE ", "Send a message to everyone."}, + + {"QUIT", 0, 0, _ttt_client_execute_quit, + "QUIT ", "Quit session."}, + + {"VERSION", 1, 1, _ttt_client_execute_version, + "VERSION ", "Negotiate protocol version."}, + + {"WHO", 0, 0, _ttt_client_execute_who, + "WHO ", "List registered users."} }; #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) @@ -164,10 +177,10 @@ _ttt_client_execute_message (ttt_client_t *client, if (!client->registered) return TTT_ERROR_NO_NAME_SET; - xasprintf(&response, "MESSAGE\r\n"); + xasprintf (&response, "MESSAGE\r\n"); ttt_client_send (client, response); - xasprintf(¬ice, "NOTICE MESSAGE %s \"%s\"\r\n", + xasprintf (¬ice, "NOTICE MESSAGE %s \"%s\"\r\n", client->name, args[0]); ttt_server_broadcast (client->server, notice); @@ -184,10 +197,47 @@ _ttt_client_execute_help (ttt_client_t *client, int num_args) { char *response; + char *command; + ttt_command_description_t *desc; + int i; + ttt_bool_t is_command = FALSE; + + if (num_args == 0) { + xasprintf (&response, "HELP \"\r\n" + "Available Commands:\r\n"); + for (i = 0; i < ARRAY_SIZE(command_descriptions); i++) { + desc = &command_descriptions[i]; + xasprintf (&response, "%s\r\n %s - %s\r\n", + response, + desc->usage, + desc->description); + } + xasprintf (&response, "%s\"\r\n", response); + } else { + command = args[0]; + for (i = 0; i < strlen (command); i++) + command[i] = toupper (command[i]); + for (i = 0; i < ARRAY_SIZE(command_descriptions); i++) { + desc = &command_descriptions[i]; + if (strcmp (desc->command, command) == 0) { + is_command = TRUE; + xasprintf (&response, "HELP %s \"\r\n" + "%s\r\n" + "\r\n" + "Usage:\r\n" + " %s\r\n" + "\"\r\n", + desc->command, + desc->description, + desc->usage); + /* XXX: Add detailed help. */ + } + } + } + + if ((num_args == 1) && (!is_command)) + return TTT_ERROR_SYNTAX; - /* XXX: NYI */ - - xasprintf(&response, "HELP - NYI\r\n"); ttt_client_send (client, response); free (response); @@ -347,15 +397,17 @@ _execute_request (ttt_client_t *client) int num_args = client->num_request_strings-1; ttt_command_description_t *desc; - for (i=0; i < strlen (command); i++) + for (i = 0; i < strlen (command); i++) command[i] = toupper (command[i]); - for (i=0; i < ARRAY_SIZE(command_descriptions); i++) { + for (i = 0; i < ARRAY_SIZE(command_descriptions); i++) { desc = &command_descriptions[i]; - if (strcmp(command, desc->command) == 0) { + if (strcmp (command, desc->command) == 0) { if ((num_args < desc->args_min) || (num_args > desc->args_max)) return TTT_ERROR_SYNTAX; - return (desc->execute) (client, &client->request_strings[1], num_args); + return (desc->execute) (client, + &client->request_strings[1], + num_args); } } diff --git a/src/ttt-server.c b/src/ttt-server.c index 7ffbfc5..23fd138 100644 --- a/src/ttt-server.c +++ b/src/ttt-server.c @@ -173,26 +173,18 @@ ttt_server_get_port (ttt_server_t *server) } static const char *WELCOME_MESSAGE = -"Welcome to ttt-server. So far, this program is still a demonstration\r\n" -"TCP/IP server, acting something like a rather braindead chat server.\r\n" -"The server is currently listening on:\r\n" -"\r\n %s:%s\r\n" -"\r\nTo test this, simply connect one or more clients to that host and port.\r\n" +"Welcome to ttt-server. The server is currently listening on:\r\n" +"\r\n" +" %s:%s\r\n" +"\r\n" +"To test this, simply connect one or more clients to that host and port.\r\n" "For example:\r\n" -"\r\n telnet %s %s\r\n" -"\r\nOnce you have connected a client, the server will send each line of text\r\n" -"it receives to all connected clients. The server reports client joins and\r\n" -"departures on stdout.\r\n" -"\r\nNote that to terminate the telnet client you type Control-], then\r\n" -", then \"close\" (and ) at the \"telnet> \" prompt.\r\n" -"\r\nHave fun!\r\n" -"-Carl\r\n" -"\r\nPS. At this point we're ready to leave the demonstration phase and to\r\n" -"begin implementing TTTP (tic-tac-toe protocol) as well as fixing the\r\n" -"protocol specifcation. We don't need a custom client to move forward on\r\n" -"the server (that is one of the ideas behind using a telnet-compatible\r\n" -"protocol), but a custom client would still be a fine project for a\r\n" -"motivated beginning programmer.\r\n\r\n"; +"\r\n" +" telnet %s %s\r\n" +"\r\n" +"The TTTP (tic-tac-toe protocol) has been partially implemented.\r\n" +"The following commands should work: HELO, HELP, MESSAGE, VERSION, QUIT, WHO.\r\n" +"\r\n"; static void _ttt_server_accept (void *closure, int client_socket) -- 2.43.0