]> code.citadel.org Git - citadel.git/commitdiff
* Improve client chat mode reliability and performance by assuming that all
authorArt Cancro <ajc@citadel.org>
Tue, 2 Sep 2003 14:49:05 +0000 (14:49 +0000)
committerArt Cancro <ajc@citadel.org>
Tue, 2 Sep 2003 14:49:05 +0000 (14:49 +0000)
  server output will be in complete lines.  (This is a safe assumption.)

citadel/ChangeLog
citadel/client_chat.c

index 5250a9d2c658df9e1791d40d9c69bbbd99144744..4e31b11533647daafcfe905a46ef56306c486038 100644 (file)
@@ -1,4 +1,8 @@
  $Log$
+ Revision 610.6  2003/09/02 14:49:05  ajc
+ * Improve client chat mode reliability and performance by assuming that all
+   server output will be in complete lines.  (This is a safe assumption.)
+
  Revision 610.5  2003/09/02 04:04:39  ajc
  * Don't try to directly spool to non-neighbor nodes
 
@@ -4986,4 +4990,3 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
        * Initial CVS import
-
index de9ced5fd0517b310059926731682a6dd93e90e8..f32241154610b11c678b1fe7b2499aa1b0cf91a9 100644 (file)
@@ -78,7 +78,8 @@ void chatmode(CtdlIPC *ipc)
                scr_printf("%s\n", &buf[4]);
                return;
        }
-       scr_printf("Entering chat mode (type /quit to exit, /help for other cmds)\n");
+       scr_printf("Entering chat mode "
+               "(type /quit to exit, /help for other cmds)\n");
        set_keepalives(KA_NO);
        last_transmit = time(NULL);
 
@@ -97,19 +98,17 @@ void chatmode(CtdlIPC *ipc)
                FD_SET(CtdlIPC_getsockfd(ipc), &rfds);
                tv.tv_sec = S_KEEPALIVE;
                tv.tv_usec = 0;
-               retval = select(CtdlIPC_getsockfd(ipc) + 1, &rfds, NULL, NULL, &tv);
+               retval = select(CtdlIPC_getsockfd(ipc) + 1, &rfds,
+                       NULL, NULL, &tv);
 
+               /* If there's data from the server... */
                if (FD_ISSET(CtdlIPC_getsockfd(ipc), &rfds)) {
-                       ch = CtdlIPC_get(ipc);
-                       if (ch == 10) {
-                               recv_complete_line = 1;
-                               goto RCL;       /* ugly, but we've gotta get out! */
-                       } else {
-                               buf[strlen(buf) + 1] = 0;
-                               buf[strlen(buf)] = ch;
-                       }
-                       goto RCL;
+                       CtdlIPC_getline(ipc, buf);
+                       recv_complete_line = 1;
+                       goto RCL;       /* ugly, but we've gotta get out! */
                }
+
+               /* If there's data from the keyboard... */
                if (FD_ISSET(0, &rfds)) {
                        ch = scr_getc(SCR_BLOCK);
                        if ((ch == 10) || (ch == 13)) {
@@ -125,13 +124,15 @@ void chatmode(CtdlIPC *ipc)
                                wbuf[strlen(wbuf)] = ch;
                        }
                }
+
                /* if the user hit return, send the line */
-             RCL:if (send_complete_line) {
+RCL:           if (send_complete_line) {
                        CtdlIPC_putline(ipc, wbuf);
                        last_transmit = time(NULL);
                        strcpy(wbuf, "");
                        send_complete_line = 0;
                }
+
                /* if it's time to word wrap, send a partial line */
                if (strlen(wbuf) >= (77 - strlen(fullname))) {
                        pos = 0;
@@ -151,6 +152,7 @@ void chatmode(CtdlIPC *ipc)
                                strcpy(wbuf, &wbuf[pos + 1]);
                        }
                }
+
                if (recv_complete_line) {
                        sln_printf("\r%79s\r", "");
                        if (!strcmp(buf, "000")) {
@@ -159,17 +161,15 @@ void chatmode(CtdlIPC *ipc)
                                sln_flush();
                                set_keepalives(KA_YES);
 
-                               /* Some users complained about the client and server
-                                * losing protocol synchronization when exiting chat.
-                                * This little dialog forces everything to be
-                                * hunky-dory.
+                               /* Some users complained about the client and
+                                * server losing protocol synchronization when
+                                * exiting chat.  This little dialog forces
+                                * everything to be hunky-dory.
                                 */
                                CtdlIPC_putline(ipc, "ECHO __ExitingChat__");
                                do {
                                        CtdlIPC_getline(ipc, buf);
                                } while (strcmp(buf, "200 __ExitingChat__"));
-
-
                                return;
                        }
                        if (num_parms(buf) >= 2) {