summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2009-07-19 12:27:15 (GMT)
committerRemko Tronçon <git@el-tramo.be>2009-07-19 12:27:15 (GMT)
commit9ccf1973ec3e23e4ba061b774c3f3e3bde4f1040 (patch)
tree4f760b6223c1ca5ef95ee3a261a0f2ec13b963a5 /Swiften/Session/Session.cpp
parent1de12ed346fc0018527afe082886129088e27a95 (diff)
downloadswift-9ccf1973ec3e23e4ba061b774c3f3e3bde4f1040.zip
swift-9ccf1973ec3e23e4ba061b774c3f3e3bde4f1040.tar.bz2
Rename Session to ClientSession.
Diffstat (limited to 'Swiften/Session/Session.cpp')
-rw-r--r--Swiften/Session/Session.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/Swiften/Session/Session.cpp b/Swiften/Session/Session.cpp
new file mode 100644
index 0000000..9ab8e4d
--- /dev/null
+++ b/Swiften/Session/Session.cpp
@@ -0,0 +1,72 @@
+#include "Swiften/Session/Session.h"
+
+#include <boost/bind.hpp>
+
+#include "Swiften/StreamStack/XMPPLayer.h"
+#include "Swiften/StreamStack/StreamStack.h"
+
+namespace Swift {
+
+Session::Session(
+ boost::shared_ptr<Connection> connection,
+ PayloadParserFactoryCollection* payloadParserFactories,
+ PayloadSerializerCollection* payloadSerializers) :
+ connection(connection),
+ payloadParserFactories(payloadParserFactories),
+ payloadSerializers(payloadSerializers),
+ initialized(false) {
+}
+
+Session::~Session() {
+ delete streamStack;
+}
+
+void Session::startSession() {
+ initializeStreamStack();
+ handleSessionStarted();
+}
+
+void Session::finishSession() {
+ connection->disconnect();
+ onSessionFinished(boost::optional<Error>());
+}
+
+void Session::finishSession(const Error& error) {
+ connection->disconnect();
+ onSessionFinished(boost::optional<Error>(error));
+}
+
+void Session::initializeStreamStack() {
+ xmppLayer = boost::shared_ptr<XMPPLayer>(
+ new XMPPLayer(payloadParserFactories, payloadSerializers));
+ xmppLayer->onStreamStart.connect(
+ boost::bind(&Session::handleStreamStart, this, _1));
+ xmppLayer->onElement.connect(
+ boost::bind(&Session::handleElement, this, _1));
+ xmppLayer->onError.connect(
+ boost::bind(&Session::finishSession, this, XMLError));
+ connection->onDisconnected.connect(
+ boost::bind(&Session::handleDisconnected, shared_from_this(), _1));
+ connectionLayer = boost::shared_ptr<ConnectionLayer>(new ConnectionLayer(connection));
+ streamStack = new StreamStack(xmppLayer, connectionLayer);
+}
+
+void Session::sendStanza(boost::shared_ptr<Stanza> stanza) {
+ xmppLayer->writeElement(stanza);
+}
+
+void Session::handleDisconnected(const boost::optional<Connection::Error>& connectionError) {
+ if (connectionError) {
+ finishSession(ConnectionError);
+ }
+ else {
+ finishSession();
+ }
+}
+
+void Session::setInitialized() {
+ initialized = true;
+ onSessionStarted();
+}
+
+}