The IrcBot class can connect to a channel on an IRC network. Users on the same network can send messages to the bot that are parsed by message handlers. The included handlers read digital/analog inputs and write digital outputs or echo messages back to the command sender/channel. Users can write their own message handlers inheriting from the MessageHandler class to perform different actions.

Revision:
1:cf586c9bbb52
Parent:
0:b8fb2df56652
Child:
2:e4c74eb20586
--- a/irc.cpp	Sat Aug 02 12:09:10 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-#include "irc.h"
-
-IrcMessage::IrcMessage(char * f, char * t, char * m) {
-    sprintf(from, "%s", f);
-    sprintf(to, "%s", t);
-    sprintf(msg, "%s", m);    
-}
-
-IrcMessage::IrcMessage() {
-    from[0] = '\0';
-    to[0] = '\0';
-    msg[0] = '\0';
-}
-
-Irc::Irc(char * nick, char * net, int p, char * chan) :
-        pc(USBTX, USBRX), sock(), port(p), ident(false), connected(false),
-        setup(false), joined(false), parseindex(0)
-{
-    sprintf(nickname, "%s", nick);
-    sprintf(password, "%s", "");
-    sprintf(network, "%s", net);
-    sprintf(channel, "%s", chan);
-    pc.printf("Created Irc obj for %s.\n", nickname);
-}
-
-void Irc::identify(char * pass) {
-    ident = true;
-    sprintf(password, "%s", pass);    
-}
-
-void Irc::join(char * chan) {
-    char cmd[64];
-    sprintf(cmd, ":source JOIN :%s\r\n", chan);
-    send(cmd);
-}
-
-void Irc::connect() {
-    pc.printf("Connecting to %s:%d...\n", network, port);
-    sock.connect(network, port);
-    pc.printf("Done.\n");
-    connected = true;
-}
-
-void Irc::disconnect() {
-    if (connected) {
-        pc.printf("Disconnecting.\n");
-        sock.close();
-        connected = false;
-    }
-}
-
-void Irc::add(MessageHandler * handler) {
-    handlers.push_back(handler);
-}
-
-bool Irc::read() {
-    if (!connected) return 0;
-    int ret = sock.receive(readbuffer, sizeof(readbuffer) - 1);
-    bool parsed = false;
-    if (ret >= 0) {
-        readbuffer[ret] = '\0';
-        pc.printf("Received %d chars: ---%s--\n", ret, readbuffer);
-        for (int i = 0; i < ret; i++) {
-            parsebuffer[parseindex] = readbuffer[i];
-            parseindex++;
-            if (readbuffer[i] == '\n') {
-                parsebuffer[parseindex] = '\0';
-                parse();
-                parsed = true;
-                parseindex = 0;
-            }
-        }
-    }
-    return parsed;
-}
-
-void Irc::send(char * cmd) {
-    if (!connected) return;
-    int i = 0;
-    bool ok = true;
-    while (cmd[i] != '\0') {
-        i++;
-        if (i > 512) {
-            ok = false;
-            break;    
-        }  
-    }
-    if (!ok) return;
-    pc.printf("Sending: ---%s---\n", cmd);
-    sock.send_all(cmd, i);
-}
-
-void Irc::handle(IrcMessage msg) {
-    pc.printf("Handling message from %s, to %s: %s\n", msg.from, msg.to, msg.msg);    
-    for (int i = 0; i < handlers.size(); i++) {
-        IrcMessage out = handlers.at(i)->handle(msg);
-        if (out.to[0] != '\0') {
-            sprintf(out.from, "%s", nickname);
-            pc.printf("Need to send: ---%s--- from %s to %s.\n", out.msg, out.from, out.to);
-            char cmd[512];
-            sprintf(cmd, "PRIVMSG %s :%s\r\n", out.to, out.msg);
-            send(cmd);
-        }
-    }
-}
-
-void Irc::parse() {
-    pc.printf("Parsing: --%s--\n", parsebuffer);
-    if (setup && (!joined)) {
-        char cmd[256];
-        sprintf(cmd, ":source JOIN :%s\r\n", channel);
-        send(cmd);
-        joined = true;
-        return;   
-    }
-    if (!setup) {
-        char cmd[256];
-        sprintf(cmd, "NICK %s\r\nUSER %s 0 * :Lester\r\n", nickname, nickname);
-        send(cmd);
-        setup = true;
-        return;
-    }
-    char * c = NULL;
-    c = strstr(parsebuffer, "PING");
-    if (c != NULL) {
-        char cmd[] = "PONG\r\n";
-        send(cmd);    
-    }
-    c = strstr(parsebuffer, "PRIVMSG");
-    if (c != NULL) {
-        char f[32];
-        char t[32];
-        char m[256];
-        int i;
-        for (i = 1; i < 32; i++) {
-            if (parsebuffer[i] == '!') {
-                f[i - 1] = '\0';    
-                break;
-            }
-            f[i - 1] = parsebuffer[i];   
-        }
-        int nspace = 0;
-        bool inmsg = false;
-        int toindex = 0, msgindex = 0;
-        for (; i < sizeof(parsebuffer); i++) {
-            if (parsebuffer[i] == '\r') break;
-            if (parsebuffer[i] == '\n') break;
-            if (parsebuffer[i] == '\0') break;
-            if (parsebuffer[i] == ' ') {
-                nspace++;    
-            }
-            if ((nspace == 2) && (parsebuffer[i] != ' ')) {
-                t[toindex] = parsebuffer[i];
-                toindex++;
-            }
-            if (inmsg) {
-                m[msgindex] = parsebuffer[i];
-                msgindex++;    
-            }
-            if ((parsebuffer[i] == ':') && (!inmsg)) {
-                inmsg = true;
-            }
-        }
-        t[toindex] = '\0';
-        m[msgindex] = '\0';
-        IrcMessage msg(f, t, m);
-        handle(msg);
-    }
-}
\ No newline at end of file