continued writing cache
[NeonServV5.git] / IRCParser.c
index eb2e8a4a09b9da5e7089c2de81e730978fd3ebe2..f60d2aafd98ad302ec80a3bc724f14e2bde140e0 100644 (file)
@@ -1,5 +1,9 @@
 
 #include "IRCParser.h"
+#include "UserNode.h"
+#include "ChanNode.h"
+#include "ChanUser.h"
+#include "IRCEvents.h"
 #include "ClientSocket.h"
 
 struct irc_cmd *irc_commands = NULL;
@@ -66,17 +70,37 @@ static void register_irc_function(char *command, irc_cmd_t *func) {
 
 static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char **argv, int argc) {
     struct irc_cmd *irc_cmd;
+    int ret = 0;
     for(irc_cmd = irc_commands; irc_cmd; irc_cmd = irc_cmd->next) {
         if(!stricmp(irc_cmd->cmd, cmd)) {
-            irc_cmd->func(client, from, argv, argc);
+            ret = irc_cmd->func(client, from, argv, argc);
             break;
         }
     }
+    if(!ret) {
+        fprintf(stderr,"PARSE ERROR: %s", cmd);
+    }
 }
 
 static IRC_CMD(raw_001) {
     client->flags |= SOCKET_FLAG_READY;
-    putsock(client, "PRIVMSG Watchcat :hi");
+    putsock(client, "JOIN #pktest");
+    return 1;
+}
+
+static IRC_CMD(raw_join) {
+    if(from == NULL || argc < 1) return 0;
+    struct UserNode *user = getUserByMask(from);
+    if(user == NULL) {
+        user = addUserMask(from);
+    }
+    struct ChanNode *chan = getChanByName(argv[0]);
+    if(chan == NULL) {
+        chan = addChannel(argv[0]);
+        
+    }
+    putsock(client, "PRIVMSG #pktest :hi");
+    
     return 1;
 }
 
@@ -89,5 +113,6 @@ static IRC_CMD(raw_ping) {
 void parser_init() {
     //all the raws we receive...
     register_irc_function("001", raw_001);
+    register_irc_function("JOIN", raw_join);
     register_irc_function("PING", raw_ping);
 }