コード例 #1
0
ファイル: UIIrcStatus.cpp プロジェクト: pasnox/monkeystudio2
IrcStatus::IrcStatus(QWidget *parent) : QWidget(parent)
{
    setupUi(this);

    connect(pbJoin, SIGNAL(clicked()), this, SLOT(onJoin()));
    connect(pbConnect, SIGNAL(clicked()), this, SLOT(onConnect()));

    pbJoin->setEnabled(false);
    bConnected = false;

}
コード例 #2
0
ファイル: MP1Node.cpp プロジェクト: bntam/mp1-assignment
/**
 * FUNCTION NAME: recvCallBack
 *
 * DESCRIPTION: Message handler for different message types
 */
bool MP1Node::recvCallBack(void *env, char *data, int size ) {
		/*
		 * Your code goes here
		 */

		assert(size >= sizeof(MessageHdr));

		MessageHdr* msg = (MessageHdr*) data;
		Address *src_addr = (Address*)(msg+1);

		size -= sizeof(MessageHdr) + sizeof(Address) + 1;
		data += sizeof(MessageHdr) + sizeof(Address) + 1;

		switch (msg->msgType) {
				case JOINREQ:
						onJoin(src_addr, data, size);
						onHeartbeat(src_addr, data, size);
						break;
				case PING: 
						onHeartbeat(src_addr, data, size);
						break;
				case JOINREP:
						{
						memberNode->inGroup = 1;
						stringstream msg;
						msg << "JOINREP from " <<  src_addr->getAddress();
						msg << " data " << *(long*)(data );
						log->LOG(&memberNode->addr, msg.str().c_str());
						onHeartbeat(src_addr, data, size);
						break;
						}
				default:
						log->LOG(&memberNode->addr, "Received other msg");
						break;
		}
}
コード例 #3
0
ファイル: IRC.cpp プロジェクト: Chase-san/AnnaBot
void IRC::handle(const string& oline) {
    string line = trim(oline);
    printf("%s\n", line.c_str());

    //We are pinged, respond!
    if(line.compare(0, 4, "PING") == 0) {
        onServerPing(line.substr(5));
        return;
    }

    char* cstr = new char[line.size() + 1];
    strcpy(cstr, line.c_str());

    string sender, nick, login, host;

    bool nickOnly = false;
    size_t tokn = 0;
    char *tok = strtok(cstr, " ");
    while(tok != NULL) {
        //For each token, check
        string tmp = tok;
        if(tokn == 0) {
            sender = tmp;
            if(sender[0] == ':')
                sender = sender.substr(1);

            size_t exp = sender.find("!");
            size_t at = sender.find("@");

            //TODO: Add checks for 'exp' and 'at' being string::npos
            //  to avoid calling these when there are (no ill effects
            //  have been seen from not doing so yet, however for sanity sake)
            if(exp == string::npos || at == string::npos) {
                nick = trim(sender);
                login = "";
                host = "";
                nickOnly = true;
            } else {
                nick = trim(sender.substr(0, exp));
                login = trim(sender.substr(exp + 1, at));
                host = trim(sender.substr(at + 1));
            }
        }

        if(tokn == 1) {
            tok = strtok(NULL, " ");
            string target(tok); //AKA channel

            uint32_t code = 0;
            if(tmp.length() == 3 && (code = (uint32_t) atoi(tmp.c_str())) != 0 && code < 1000) {
                string response = line.substr(sender.length()+5+target.length()+1);
                handle_numeric(code,target,response);
                onNumeric(sender,code,target,response);
            } else if(tmp.compare("PRIVMSG") == 0) {
                handle_msg(target, nick, login, host, line.substr(line.find(" :") + 2));
            } else if(tmp.compare("NOTICE") == 0) {
                onNotice(target, nick, login, host, line.substr(line.find(" :") + 2));
            } else if(tmp.compare("JOIN") == 0) {
                //TODO: Add this user to the channel.
                onJoin(target, nick, login, host);
            } else if(tmp.compare("PART") == 0) {
                //TODO: Remove this user from the channel.
                onPart(target, nick, login, host);
            } else if(tmp.compare("TOPIC") == 0) {
                onTopic(target, line.substr(line.find(" :") + 2), nick, time(NULL), true);
            } else if(tmp.compare("KICK") == 0) {
                tok = strtok(NULL, " ");
                string recipient(tok);
                onKick(target, nick, login, host, recipient, line.substr(line.find(" :") + 2));
            } else if(tmp.compare("QUIT") == 0) {
                onQuit(nick, login, host, line.substr(line.find(" :") + 2));
            } else if(tmp.compare("MODE") == 0) {
                tok = strtok(NULL, " ");
                string mode = tok;
                if(mode[0] == ':')
                    mode = mode.substr(1);
                handle_mode(nick, login, host, target, mode);
            }
            //TODO: Add mode handler here
            else {
                onUnknown(line);
            }

            break;
        }

        tok = strtok(NULL, " ");
        ++tokn;
    }

    delete[] cstr;
}
コード例 #4
0
ファイル: Server.hpp プロジェクト: Goon83/prototls
            /** accepts and keeps track of connections. reads data
              from connected peers and notifies through virtual methods
              if packets can be deserialized 
             \param tls use GnuTLS for encryption 
             \param port listen for incoming connections at this port
             \param maxPeers maximum number of connected peers */
            void serve(bool tls, int port, int maxPeers) {
                if (tls)
                    sock.reset(new TLSSocket());
                else
                    sock.reset(new Socket());
                sock->setNonBlocking();
                sock->bind(port);
                sock->listen(maxPeers);
                Select select;
                /* Wait for a peer, send data and term */
                while (!closed)
                {
                    select.reset();
                    if (peers.size() < maxPeers)
                        select.input(sock->getFd());
                    for (typename Peers::iterator i = peers.begin(); i != peers.end(); i++) {
                        select.input((*i)->getFd());
                    }
                    if (select.select(100) == -1)
                        continue;
                    if (select.canRead(sock->getFd()) 
                            && peers.size() < maxPeers) {
                        try {
                            Socket* csock = sock->accept();

                            if (tls)  {
                                boost::threadpool::schedule(pool, 
                                        boost::bind(&Server::handshake, this, csock));
                            } else {
                                peers.push_back(boost::shared_ptr<PeerT>(new PeerT()));
                                csock->setNonBlocking();
                                peers.back()->setup(csock);
                                onJoin(*peers.back());

                            }
                        } catch (SocketExcept& e) {
                            std::cerr << e.what() << std::endl;
                        }
                    }
                    if (tls)  {
                        Socket* sock = NULL;
                        socketsReady.try_pop_front(sock);
                        if (sock) {
                            sock->setNonBlocking();
                            peers.push_back(boost::shared_ptr<PeerT>(new PeerT()));
                            peers.back()->setup(sock);
                            onJoin(*peers.back());
                        }
                    }
                    for (size_t i = 0; i < peers.size(); i++) {
                        boost::shared_ptr<PeerT>& p = peers[i];
                        if (select.canRead(p->getFd()))
                            p->onInput();
                        while (p->hasPacket()) {
                            onPacket(*p);
                        }
                    }
                    // collect dead peers
                    size_t count = peers.size();
                    for (size_t i = 0; i < count; ) {
                        if (!peers[i]->isActive()) {
                            onLeave(*peers[i]);

                            peers[i] = peers[peers.size() - 1];
                            count--;
                        } else
                            i++;
                    }
                    if (count < peers.size()) {
                        peers.resize(count);
                    }

                }
            }
コード例 #5
0
ファイル: cppmodule.cpp プロジェクト: S1M0NE/IrcBot
bool CPPModule::onEvent(IrcConnection* connection, const std::string& senderID, const std::string& eventName, const std::string& json, const std::string& optString) {
	JSONNode n;
	if(!json.empty()) {
		n = libjson::parse(json);
	}

	if(senderID=="IRCCONNECTION") {
		//Create a IrcModuleConnection instance
		IrcModuleConnection ircModuleConnection(mID, mModuleManager, connection);


		//Call onConnect if its the called event
		if(eventName=="onConnect") {
			return onConnect(ircModuleConnection);
		}


		//Convert the IRC Message
		IrcMessage message;
		message.ircLine = n["ircLine"].as_string();
		message.prefix = n["prefix"].as_string();
		message.hasDetailedPrefix = n["hasDetailedPrefix"].as_bool();

		if(message.hasDetailedPrefix) {
			message.msgPrefix.nick_or_server = n["msgPrefix"]["nick_or_server"].as_string();
			message.msgPrefix.user = n["msgPrefix"]["user"].as_string();
			message.msgPrefix.host = n["msgPrefix"]["host"].as_string();
		}

		message.command = n["command"].as_string();
		message.isNumeric = n["isNumeric"].as_bool();
		message.target = n["target"].as_string();
		message.params = n["params"].as_string();


		//Call all other event handlers
		if(eventName=="onMessage") {
			return onMessage(ircModuleConnection, message);
		}
		else if(eventName=="onJoin") {
			return onJoin(ircModuleConnection, message);
		}
		else if(eventName=="onPart") {
			return onPart(ircModuleConnection, message);
		}
		else if(eventName=="onKick") {
			return onKick(ircModuleConnection, message, optString);
		}
		else if(eventName=="onQuit") {
			return onQuit(ircModuleConnection, message);
		}
		else if(eventName=="onKill") {
			return onKill(ircModuleConnection, message, optString);
		}
		else if(eventName=="onPrivateMessage") {
			return onPrivateMessage(ircModuleConnection, message);
		}
		else if(eventName=="onChannelMessage") {
			return onChannelMessage(ircModuleConnection, message);
		}
		else if(eventName=="onNotice") {
			return onNotice(ircModuleConnection, message);
		}
		else if(eventName=="onInvite") {
			return onInvite(ircModuleConnection, message);
		}
		else if(eventName=="onTopicChanged") {
			return onTopicChanged(ircModuleConnection, message);
		}
		else if(eventName=="onNickChanged") {
			return onNickChanged(ircModuleConnection, message);
		}
	}

	return true;
}