diff options
| author | Remko Tronçon <git@el-tramo.be> | 2010-12-04 12:43:57 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2010-12-04 13:24:48 (GMT) | 
| commit | bbf8a5fcb47d649bdcee1b2122eaa76f2c914ef7 (patch) | |
| tree | 3cef6ffab06f263ad6f5dc3df5d7ba065223f84e /Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp | |
| parent | ebd2b8b8a2f1ad2812543c5350c0acf0a5b8c188 (diff) | |
| download | swift-contrib-bbf8a5fcb47d649bdcee1b2122eaa76f2c914ef7.zip swift-contrib-bbf8a5fcb47d649bdcee1b2122eaa76f2c914ef7.tar.bz2  | |
Added EchoPayload parserialement.
Diffstat (limited to 'Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp')
| -rw-r--r-- | Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp | 120 | 
1 files changed, 120 insertions, 0 deletions
diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp new file mode 100644 index 0000000..4c96f6b --- /dev/null +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +//... +#include <iostream> +#include <boost/bind.hpp> + +#include <Swiften/Swiften.h> + +using namespace Swift; +using namespace boost; +//... +#include "EchoPayload.h" +#include "EchoPayloadParserFactory.h" +#include "EchoPayloadSerializer.h" + +class EchoBot { +	public: +		EchoBot(EventLoop* eventLoop, NetworkFactories* networkFactories) { +			//... +			client = new Client(eventLoop, networkFactories, JID("echobot@wonderland.lit"), "mypass"); +			client->onConnected.connect(bind(&EchoBot::handleConnected, this)); +			client->onMessageReceived.connect( +					bind(&EchoBot::handleMessageReceived, this, _1)); +			client->onPresenceReceived.connect( +					bind(&EchoBot::handlePresenceReceived, this, _1)); +			tracer = new ClientXMLTracer(client); + +			softwareVersionResponder = new SoftwareVersionResponder(client->getIQRouter()); +			softwareVersionResponder->setVersion("EchoBot", "1.0"); +			softwareVersionResponder->start(); +			//... +			client->addPayloadParserFactory(&echoPayloadParserFactory); +			client->addPayloadSerializer(&echoPayloadSerializer); +			//... +			client->connect(); +			//... +		} + +		~EchoBot() { +			client->removePayloadSerializer(&echoPayloadSerializer); +			client->removePayloadParserFactory(&echoPayloadParserFactory); +			//... +			softwareVersionResponder->stop(); +			delete softwareVersionResponder; +			delete tracer; +			delete client; +			//... +		} +		//... +	 +	private: +		void handlePresenceReceived(Presence::ref presence) { +			// Automatically approve subscription requests +			if (presence->getType() == Presence::Subscribe) { +				Presence::ref response = Presence::create(); +				response->setTo(presence->getFrom()); +				response->setType(Presence::Subscribed); +				client->sendPresence(response); +			} +		} + +		void handleConnected() { +			// Request the roster +			GetRosterRequest::ref rosterRequest =  +					GetRosterRequest::create(client->getIQRouter()); +			rosterRequest->onResponse.connect( +					bind(&EchoBot::handleRosterReceived, this, _2)); +			rosterRequest->send(); +		} + +		void handleRosterReceived(ErrorPayload::ref error) { +			if (error) { +				std::cerr << "Error receiving roster. Continuing anyway."; +			} +			// Send initial available presence +			client->sendPresence(Presence::create("Send me a message")); +		} + +		//... +		void handleMessageReceived(Message::ref message) { +			//... +			// Echo back the incoming message +			message->setTo(message->getFrom()); +			message->setFrom(JID()); +			//... +			if (!message->getPayload<EchoPayload>()) { +				boost::shared_ptr<EchoPayload> echoPayload(new EchoPayload()); +				echoPayload->setMessage("This is an echoed message"); +				message->addPayload(echoPayload); +				client->sendMessage(message); +			} +		} +		//... + +		//... +	private: +		//... +		Client* client; +		ClientXMLTracer* tracer; +		SoftwareVersionResponder* softwareVersionResponder; +		//... +		EchoPayloadParserFactory echoPayloadParserFactory; +		EchoPayloadSerializer echoPayloadSerializer; +}; +//... + +int main(int, char**) { +	SimpleEventLoop eventLoop; +	BoostNetworkFactories networkFactories(&eventLoop); + +	EchoBot bot(&eventLoop, &networkFactories); + +	eventLoop.run(); +	return 0; +} +//...  | 
 Swift