its own class.
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:
+// 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);
--- /dev/null
+#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);
+ }
+ }
+}
#include "includes.hpp"
+#include <time.h>
enum {
wxString sendcmd, recvcmd, buf, allmsgs;
wxStringList xferbuf, msgbuf;
int i, r;
+ CitMessage *message;
if (message_window != NULL) {
delete message_window;
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);
}