]> code.citadel.org Git - citadel.git/commitdiff
Got a really cool message-reading loop working. Also made the message
authorArt Cancro <ajc@citadel.org>
Sun, 4 Apr 1999 22:39:57 +0000 (22:39 +0000)
committerArt Cancro <ajc@citadel.org>
Sun, 4 Apr 1999 22:39:57 +0000 (22:39 +0000)
its own class.

daphne/Makefile
daphne/includes.hpp
daphne/message.cpp [new file with mode: 0644]
daphne/roomview.cpp

index 212c96c9832597acb9e655b25d0fc1183dfbe6e1..6a2b7be0af85c4ad41426d8697773af6b099d6d0 100644 (file)
@@ -13,10 +13,10 @@ all: daphne
 
 daphne: main.o citclient.o userlogin.o testwindow.o who.o \
        utils.o express_message.o send_express.o \
-       roomtree.o roomview.o tcp_sockets.o
+       roomtree.o roomview.o tcp_sockets.o message.o
        c++ main.o citclient.o userlogin.o testwindow.o who.o \
        utils.o express_message.o send_express.o \
-       roomtree.o roomview.o tcp_sockets.o \
+       roomtree.o roomview.o tcp_sockets.o message.o \
        $(LFLAGS) -o daphne
 
 clean:
index 05ead868b8556646586eab6989c85dec28e3ab5f..9d56d4f9363e6c550bac1e5d426a87e188fb7d09 100644 (file)
@@ -228,6 +228,21 @@ private:
 
 
 
+// A message.  (This is not a GUI class; it's used for internal
+// representation.)
+class CitMessage {
+public:
+       CitMessage(CitClient *sock, wxString getmsg_cmd, wxString inRoom);
+       wxString author;
+       long timestamp;
+       wxString room;
+       wxString msgtext;
+};
+
+
+
+
+
 // Stuff from utils.cpp
 
 void ListToMultiline(wxString& outputbuf, wxStringList inputlist);
diff --git a/daphne/message.cpp b/daphne/message.cpp
new file mode 100644 (file)
index 0000000..529a187
--- /dev/null
@@ -0,0 +1,44 @@
+#include "includes.hpp"
+#include <time.h>
+
+CitMessage::CitMessage(CitClient *sock, wxString getmsg_cmd, wxString inRoom) {
+
+       wxString sendcmd, recvcmd, buf, key;
+       wxStringList xferbuf;
+       int i;
+       bool in_text = FALSE;           // true if reading the message body
+
+       room.Empty();
+       author.Empty();
+       msgtext.Empty();
+       timestamp = time(NULL);         // nb. this is Unix-specific
+
+       // Fetch the message from the server
+       if (sock->serv_trans(getmsg_cmd, recvcmd, xferbuf, inRoom) != 1) {
+               msgtext = "<EM>Error: " + recvcmd.Mid(4) + "</EM>" ;
+                return;
+       }
+
+        for (i=0; i<xferbuf.Number(); ++i) {
+                buf.Printf("%s", (wxString *)xferbuf.Nth(i)->GetData());
+
+               // Break out important information if in the header
+               if (!in_text) {
+                       key = buf.Left(4);
+                       if (!key.CmpNoCase("text"))
+                               in_text = TRUE;
+                       else if (!key.CmpNoCase("from"))
+                               author = buf.Mid(5);
+                       else if (!key.CmpNoCase("time"))
+                               timestamp = atol(buf.Mid(5));
+                       else if (!key.CmpNoCase("room"))
+                               room = buf.Mid(5);
+
+               // Otherwise, process message text
+               } else {
+                       if ( (buf.Left(1) == " ") && (msgtext.Len() > 0) )
+                               msgtext.Append("<BR>");
+                       msgtext.Append(buf);
+               }
+       }
+}
index bc3b6539152c03366ef902c7f6d385d7489042b5..e69085ff5255e2e95f034cebd43d56fea1f70f17 100644 (file)
@@ -1,4 +1,5 @@
 #include "includes.hpp"
+#include <time.h>
 
 
 enum {
@@ -120,6 +121,7 @@ void RoomView::do_readloop(wxString readcmd) {
        wxString sendcmd, recvcmd, buf, allmsgs;
        wxStringList xferbuf, msgbuf;
         int i, r;
+       CitMessage *message;
        
        if (message_window != NULL) {
                delete message_window;
@@ -154,16 +156,22 @@ void RoomView::do_readloop(wxString readcmd) {
        allmsgs = "<HTML><BODY><CENTER><H1>List of Messages</H1></CENTER><HR>";
         for (i=0; i<xferbuf.Number(); ++i) {
                 buf.Printf("%s", (wxString *)xferbuf.Nth(i)->GetData());
+
                sendcmd = "MSG0 " + buf;
-               r = citsock->serv_trans(sendcmd, recvcmd, msgbuf, ThisRoom);
-               if (r == 1) {
-                       ListToMultiline(buf, msgbuf);
-                       allmsgs += buf;
-                       allmsgs += "<HR>";
-               }
-               allmsgs += "</HTML>";
-               message_window->SetPage(allmsgs);
+               message = new CitMessage(citsock, sendcmd, ThisRoom);
+
+               allmsgs += "<i>";
+               allmsgs += asctime(localtime(&message->timestamp));
+               allmsgs += " from " + message->author;
+               allmsgs += "</i><br>";
+               allmsgs += message->msgtext;
+
+               delete message;
+
+               allmsgs += "<HR>";
         }
+       allmsgs += "</BODY></HTML>";
+       message_window->SetPage(allmsgs);
 }