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.

Committer:
NickRyder
Date:
Sat Aug 02 12:57:57 2014 +0000
Revision:
2:e4c74eb20586
Parent:
1:cf586c9bbb52
Added documentation.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NickRyder 0:b8fb2df56652 1 #ifndef __mbed_irc_h__
NickRyder 0:b8fb2df56652 2 #define __mbed_irc_h__
NickRyder 0:b8fb2df56652 3
NickRyder 0:b8fb2df56652 4 #include "mbed.h"
NickRyder 0:b8fb2df56652 5 #include "EthernetInterface.h"
NickRyder 0:b8fb2df56652 6 #include <vector>
NickRyder 0:b8fb2df56652 7
NickRyder 2:e4c74eb20586 8 /**
NickRyder 2:e4c74eb20586 9 * IrcBot responds to commands on IRC using message users' handlers
NickRyder 2:e4c74eb20586 10 */
NickRyder 0:b8fb2df56652 11 class IrcMessage {
NickRyder 0:b8fb2df56652 12 public:
NickRyder 2:e4c74eb20586 13 /** Create empty IrcMessage */
NickRyder 0:b8fb2df56652 14 IrcMessage();
NickRyder 2:e4c74eb20586 15
NickRyder 2:e4c74eb20586 16 /** Create an IrcMessage
NickRyder 2:e4c74eb20586 17 * @param from The user sending the message.
NickRyder 2:e4c74eb20586 18 * @param to The user/channel receiving the message.
NickRyder 2:e4c74eb20586 19 * @param message The message.
NickRyder 2:e4c74eb20586 20 */
NickRyder 2:e4c74eb20586 21 IrcMessage(char * from, char * to, char * message);
NickRyder 0:b8fb2df56652 22 char from[32], to[32], msg[256];
NickRyder 0:b8fb2df56652 23 };
NickRyder 0:b8fb2df56652 24
NickRyder 2:e4c74eb20586 25 /**
NickRyder 2:e4c74eb20586 26 * Base MessageHandler class.
NickRyder 2:e4c74eb20586 27 * Users should write classes inheriting from MessageHandler to parse and
NickRyder 2:e4c74eb20586 28 * respond to incoming IRC messages.
NickRyder 2:e4c74eb20586 29 */
NickRyder 0:b8fb2df56652 30 class MessageHandler {
NickRyder 0:b8fb2df56652 31 public:
NickRyder 0:b8fb2df56652 32 MessageHandler() {};
NickRyder 0:b8fb2df56652 33 virtual IrcMessage handle(IrcMessage msg) {return IrcMessage();}
NickRyder 0:b8fb2df56652 34 };
NickRyder 0:b8fb2df56652 35
NickRyder 2:e4c74eb20586 36 /**
NickRyder 2:e4c74eb20586 37 * IrcBot connects to an IRC network and joins a channel. Users can add message
NickRyder 2:e4c74eb20586 38 * handlers which parse incoming private messages and respond to them.
NickRyder 2:e4c74eb20586 39 */
NickRyder 2:e4c74eb20586 40 class IrcBot {
NickRyder 0:b8fb2df56652 41 public:
NickRyder 2:e4c74eb20586 42 /** Create an IrcBot
NickRyder 2:e4c74eb20586 43 *
NickRyder 2:e4c74eb20586 44 * @param nickname Bot's nickname
NickRyder 2:e4c74eb20586 45 * @param network IRC network to join
NickRyder 2:e4c74eb20586 46 * @param port Port to connect to network on
NickRyder 2:e4c74eb20586 47 * @param channel Channel to connect to
NickRyder 2:e4c74eb20586 48 */
NickRyder 2:e4c74eb20586 49 IrcBot(char * nickname, char * network, int port, char * channel);
NickRyder 2:e4c74eb20586 50 /** Connect to the network.
NickRyder 2:e4c74eb20586 51 *
NickRyder 2:e4c74eb20586 52 * Users should have already created a network interface
NickRyder 2:e4c74eb20586 53 * (Ethernet/Wifi/3G/whatever) to carry the connection.
NickRyder 2:e4c74eb20586 54 */
NickRyder 0:b8fb2df56652 55 void connect();
NickRyder 2:e4c74eb20586 56 /// Disconnect from the network.
NickRyder 0:b8fb2df56652 57 void disconnect();
NickRyder 2:e4c74eb20586 58 /// Add a handler for incoming messages.
NickRyder 0:b8fb2df56652 59 void add(MessageHandler *);
NickRyder 2:e4c74eb20586 60
NickRyder 2:e4c74eb20586 61 /** Read data from internet connection, parse input and handle any
NickRyder 2:e4c74eb20586 62 * incoming private messages
NickRyder 2:e4c74eb20586 63 */
NickRyder 0:b8fb2df56652 64 bool read();
NickRyder 0:b8fb2df56652 65 private:
NickRyder 0:b8fb2df56652 66 void handle(IrcMessage);
NickRyder 0:b8fb2df56652 67 void parse();
NickRyder 0:b8fb2df56652 68 void send(char *);
NickRyder 0:b8fb2df56652 69 Serial pc;
NickRyder 0:b8fb2df56652 70 TCPSocketConnection sock;
NickRyder 0:b8fb2df56652 71 char network[64];
NickRyder 0:b8fb2df56652 72 char channel[64];
NickRyder 0:b8fb2df56652 73 int port;
NickRyder 0:b8fb2df56652 74 char nickname[64];
NickRyder 0:b8fb2df56652 75 char password[64];
NickRyder 0:b8fb2df56652 76 bool ident, connected, setup, joined;
NickRyder 0:b8fb2df56652 77 char readbuffer[512];
NickRyder 0:b8fb2df56652 78 char parsebuffer[512];
NickRyder 0:b8fb2df56652 79 int parseindex;
NickRyder 0:b8fb2df56652 80 vector<MessageHandler *> handlers;
NickRyder 0:b8fb2df56652 81 };
NickRyder 0:b8fb2df56652 82
NickRyder 0:b8fb2df56652 83 #endif