From 2298c1327c745d89f9128a68af9eb506b09f10e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Sat, 11 Jul 2009 16:16:48 +0200
Subject: Added EchoBot example.


diff --git a/Swiften/Elements/Presence.h b/Swiften/Elements/Presence.h
index 1243bca..002ed0e 100644
--- a/Swiften/Elements/Presence.h
+++ b/Swiften/Elements/Presence.h
@@ -13,6 +13,9 @@ namespace Swift {
 			enum Type { Available, Error, Probe, Subscribe, Subscribed, Unavailable, Unsubscribe, Unsubscribed };
 
 			Presence() : type_(Available) /*, showType_(Online)*/ {}
+			Presence(const String& status) : type_(Available) {
+				setStatus(status);
+			}
 
 			Type getType() const { return type_; }
 			void setType(Type type) { type_ = type; }
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)
diff --git a/Swiften/Examples/Makefile.inc b/Swiften/Examples/Makefile.inc
index 4f61f2c..15aebae 100644
--- a/Swiften/Examples/Makefile.inc
+++ b/Swiften/Examples/Makefile.inc
@@ -1,3 +1,4 @@
+include Swiften/Examples/EchoBot/Makefile.inc
 include Swiften/Examples/TuneBot/Makefile.inc
 
 .PHONY: examples
-- 
cgit v0.10.2-6-g49f6