diff options
Diffstat (limited to 'Swiften/Examples')
-rw-r--r-- | Swiften/Examples/EchoBot/.gitignore | 1 | ||||
-rw-r--r-- | Swiften/Examples/EchoBot/EchoBot.cpp | 56 | ||||
-rw-r--r-- | Swiften/Examples/SConscript | 8 | ||||
-rw-r--r-- | Swiften/Examples/SendMessage/.gitignore | 1 | ||||
-rw-r--r-- | Swiften/Examples/SendMessage/SConscript | 13 | ||||
-rw-r--r-- | Swiften/Examples/SendMessage/SendMessage.cpp | 53 |
6 files changed, 132 insertions, 0 deletions
diff --git a/Swiften/Examples/EchoBot/.gitignore b/Swiften/Examples/EchoBot/.gitignore new file mode 100644 index 0000000..9200f42 --- /dev/null +++ b/Swiften/Examples/EchoBot/.gitignore @@ -0,0 +1 @@ +EchoBot diff --git a/Swiften/Examples/EchoBot/EchoBot.cpp b/Swiften/Examples/EchoBot/EchoBot.cpp new file mode 100644 index 0000000..872d901 --- /dev/null +++ b/Swiften/Examples/EchoBot/EchoBot.cpp @@ -0,0 +1,56 @@ +#include <boost/bind.hpp> + +#include "Swiften/Client/Client.h" +#include "Swiften/Client/ClientXMLTracer.h" +#include "Swiften/EventLoop/SimpleEventLoop.h" +#include "Swiften/Queries/Requests/GetRosterRequest.h" + +using namespace Swift; +using namespace boost; + +class EchoBot { + public: + EchoBot(const JID& jid, const String& pass) : tracer(0) { + client = new Client(jid, pass); + tracer = new ClientXMLTracer(client); + client->onConnected.connect(bind(&EchoBot::handleConnected, this)); + client->onMessageReceived.connect(bind(&EchoBot::handleMessageReceived, this, _1)); + client->connect(); + } + + ~EchoBot() { + delete tracer; + delete client; + } + + private: + void handleConnected() { + shared_ptr<GetRosterRequest> rosterRequest(new GetRosterRequest(client)); + rosterRequest->onResponse.connect(bind(&EchoBot::handleRosterReceived, this, _2)); + rosterRequest->send(); + } + + void handleRosterReceived(const optional<Error>& error) { + if (error) { + std::cerr << "Error receiving roster. Continuing anyway."; + } + client->sendPresence(shared_ptr<Presence>(new Presence("Send me a message"))); + } + + void handleMessageReceived(shared_ptr<Message> message) { + message->setTo(message->getFrom()); + message->setFrom(JID()); + client->sendMessage(message); + } + + private: + Client* client; + ClientXMLTracer* tracer; +}; + +int main(int, char**) { + SimpleEventLoop eventLoop; + EchoBot bot(JID("echobot@wonderland.lit"), "mypass"); + eventLoop.run(); + return 0; +} diff --git a/Swiften/Examples/SConscript b/Swiften/Examples/SConscript new file mode 100644 index 0000000..a4d5998 --- /dev/null +++ b/Swiften/Examples/SConscript @@ -0,0 +1,8 @@ +Import("swiften_env") + +myenv = swiften_env.Clone() + +if myenv["target"] == "native": + SConscript(dirs = [ + "SendMessage" + ]) diff --git a/Swiften/Examples/SendMessage/.gitignore b/Swiften/Examples/SendMessage/.gitignore new file mode 100644 index 0000000..3b8b4d2 --- /dev/null +++ b/Swiften/Examples/SendMessage/.gitignore @@ -0,0 +1 @@ +SendMessage diff --git a/Swiften/Examples/SendMessage/SConscript b/Swiften/Examples/SendMessage/SConscript new file mode 100644 index 0000000..0e0197e --- /dev/null +++ b/Swiften/Examples/SendMessage/SConscript @@ -0,0 +1,13 @@ +Import("env") + +myenv = env.Clone() +myenv.MergeFlags(myenv["SWIFTEN_FLAGS"]) +myenv.MergeFlags(myenv["CPPUNIT_FLAGS"]) +myenv.MergeFlags(myenv["LIBIDN_FLAGS"]) +myenv.MergeFlags(myenv["BOOST_FLAGS"]) +myenv.MergeFlags(myenv["SQLITE_FLAGS"]) +myenv.MergeFlags(myenv["ZLIB_FLAGS"]) +myenv.MergeFlags(myenv["OPENSSL_FLAGS"]) +myenv.MergeFlags(myenv.get("LIBXML_FLAGS", "")) +myenv.MergeFlags(myenv.get("EXPAT_FLAGS", "")) +tester = myenv.Program("SendMessage", ["SendMessage.cpp"]) diff --git a/Swiften/Examples/SendMessage/SendMessage.cpp b/Swiften/Examples/SendMessage/SendMessage.cpp new file mode 100644 index 0000000..b7a80dd --- /dev/null +++ b/Swiften/Examples/SendMessage/SendMessage.cpp @@ -0,0 +1,53 @@ +#include <boost/bind.hpp> +#include <boost/thread.hpp> + +#include "Swiften/Client/Client.h" +#include "Swiften/Network/BoostTimer.h" +#include "Swiften/EventLoop/MainEventLoop.h" +#include "Swiften/Client/ClientXMLTracer.h" +#include "Swiften/EventLoop/SimpleEventLoop.h" +#include "Swiften/Network/BoostIOServiceThread.h" +#include "Swiften/Network/MainBoostIOServiceThread.h" + +using namespace Swift; + +SimpleEventLoop eventLoop; + +Client* client = 0; +JID recipient; +std::string messageBody; + +void handleConnected() { + boost::shared_ptr<Message> message(new Message()); + message->setBody(messageBody); + message->setTo(recipient); + client->sendMessage(message); + client->disconnect(); + eventLoop.stop(); +} + +int main(int argc, char* argv[]) { + if (argc != 5) { + std::cerr << "Usage: " << argv[0] << " <jid> <password> <recipient> <message>" << std::endl; + return -1; + } + + recipient = JID(argv[3]); + messageBody = std::string(argv[4]); + + client = new Swift::Client(JID(argv[1]), String(argv[2])); + ClientXMLTracer* tracer = new ClientXMLTracer(client); + client->onConnected.connect(&handleConnected); + client->connect(); + + { + boost::shared_ptr<BoostTimer> timer(new BoostTimer(30000, &MainBoostIOServiceThread::getInstance().getIOService())); + timer->onTick.connect(boost::bind(&SimpleEventLoop::stop, &eventLoop)); + timer->start(); + + eventLoop.run(); + } + + delete tracer; + delete client; +} |