+void ParseServerLine_Numeric(tServer *Server, const char *ident, int Num, char *Line)
+{
+ int pos = 0;
+ const char *message;
+ const char *user = GetValue(Line, &pos);
+
+ if( Line[pos] == ':' ) {
+ message = Line + pos + 1;
+ }
+ else {
+ message = GetValue(Line, &pos);
+ }
+
+ switch(Num)
+ {
+ case 332: // Topic
+ user = message; // Channel
+ message = Line + pos + 1; // Topic
+ Message_AppendF(Server, MSG_TYPE_SERVER, user, user, "Topic: %s", message);
+ break;
+ case 333: // Topic set by
+ user = message; // Channel
+ message = GetValue(Line, &pos); // User
+ GetValue(Line, &pos); // Timestamp
+ Message_AppendF(Server, MSG_TYPE_SERVER, user, user, "Set by %s", message);
+ break;
+ case 353: // /NAMES list
+ // <user> = <channel> :list
+ // '=' was eaten in and set to message
+ user = GetValue(Line, &pos); // Actually channel
+ message = Line + pos + 1; // List
+ Message_AppendF(Server, MSG_TYPE_SERVER, user, user, "Names: %s", message);
+ break;
+ case 366: // end of /NAMES list
+ // <user> <channel> :msg
+ user = message;
+ message = Line + pos + 1;
+ Message_Append(Server, MSG_TYPE_SERVER, user, user, message);
+ break;
+ case 372: // MOTD Data
+ case 375: // MOTD Start
+ case 376: // MOTD End
+
+ default:
+ //printf("[%s] %i %s\n", Server->Name, num, message);
+ Message_Append(Server, MSG_TYPE_SERVER, ident, user, message);
+ break;
+ }
+}
+
+void ParseServerLine_String(tServer *Server, const char *ident, const char *cmd, char *Line)
+{
+ int pos = 0;
+ _SysDebug("ident=%s,cmd=%s,Line=%s", ident, cmd, Line);
+ if( strcmp(cmd, "NOTICE") == 0 )
+ {
+ const char *class = GetValue(Line, &pos);
+ _SysDebug("NOTICE class='%s'", class);
+
+ const char *message = (Line[pos] == ':') ? Line + pos + 1 : GetValue(Line, &pos);
+
+ //printf("[%s] NOTICE %s: %s\n", Server->Name, ident, message);
+ char *ident_bang = strchr(ident, '!');
+ if( ident_bang ) {
+ *ident_bang = '\0';
+ }
+ Message_Append(Server, MSG_TYPE_NOTICE, ident, "", message);
+ }
+ else if( strcmp(cmd, "PRIVMSG") == 0 )
+ {
+ const char *dest = GetValue(Line, &pos);
+ const char *message = (Line[pos] == ':') ? Line + pos + 1 : GetValue(Line, &pos);
+
+ // TODO: Catch when the privmsg is addressed to the user
+
+// Cmd_PRIVMSG(Server, dest, ident, message);
+ char *ident_bang = strchr(ident, '!');
+ if( ident_bang ) {
+ *ident_bang = '\0';
+ }
+ Message_Append(Server, MSG_TYPE_STANDARD, ident, dest, message);
+ }
+ else if( strcmp(cmd, "JOIN" ) == 0 )
+ {
+ const char *channel = Line + pos + 1;
+
+ Message_AppendF(Server, MSG_TYPE_JOIN, "", channel, "%s has joined", ident);
+ //Window_Create(Server, channel);
+ }
+ else if( strcmp(cmd, "PART" ) == 0 )
+ {
+ const char *channel = Line + pos + 1;
+
+ Message_AppendF(Server, MSG_TYPE_PART, "", channel, "%s has left", ident);
+ //Window_Create(Server, channel);
+ }
+ else
+ {
+ Message_AppendF(Server, MSG_TYPE_SERVER, "", "", "Unknown message %s (%s)", cmd, Line);
+ }
+}
+