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.
IrcBot.h@2:e4c74eb20586, 2014-08-02 (annotated)
- 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?
User | Revision | Line number | New 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 |