summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Examples/EchoBot')
-rw-r--r--Swiften/Examples/EchoBot/.gitignore1
-rw-r--r--Swiften/Examples/EchoBot/EchoBot.cpp47
-rw-r--r--Swiften/Examples/EchoBot/Makefile.inc13
3 files changed, 61 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..526e6b0
--- /dev/null
+++ b/Swiften/Examples/EchoBot/EchoBot.cpp
@@ -0,0 +1,47 @@
+#include <boost/bind.hpp>
+
+#include "Swiften/Client/Client.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) : client(new Client(jid, pass)) {
+ client->onConnected.connect(bind(&EchoBot::handleConnected, this));
+ client->onMessageReceived.connect(bind(&EchoBot::handleMessageReceived, this, _1));
+ client->connect();
+ }
+
+ private:
+ void handleConnected() {
+ shared_ptr<GetRosterRequest> rosterRequest(new GetRosterRequest(client.get()));
+ 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:
+ std::auto_ptr<Client> client;
+};
+
+int main(int, char**) {
+ SimpleEventLoop eventLoop;
+ EchoBot bot(JID("echobot@wonderland.lit"), "mypass");
+ eventLoop.run();
+ return 0;
+}
diff --git a/Swiften/Examples/EchoBot/Makefile.inc b/Swiften/Examples/EchoBot/Makefile.inc
new file mode 100644
index 0000000..b126b15
--- /dev/null
+++ b/Swiften/Examples/EchoBot/Makefile.inc
@@ -0,0 +1,13 @@
+ECHOBOT_TARGET = Swiften/Examples/EchoBot/EchoBot
+ECHOBOT_SOURCES += \
+ Swiften/Examples/EchoBot/EchoBot.cpp
+ECHOBOT_OBJECTS = \
+ $(ECHOBOT_SOURCES:.cpp=.o)
+
+CLEANFILES += $(ECHOBOT_OBJECTS) $(ECHOBOT_TARGET)
+EXAMPLES_TARGETS += $(ECHOBOT_TARGET)
+
+EchoBot: $(ECHOBOT_TARGET)
+
+$(ECHOBOT_TARGET): $(SWIFTEN_TARGET) $(ECHOBOT_OBJECTS)
+ $(QUIET_LINK)$(CXX) -o $(ECHOBOT_TARGET) $(ECHOBOT_OBJECTS) $(LDFLAGS) $(CPPCLIENT_LDFLAGS) $(SWIFTEN_TARGET) $(LIBS)