diff options
author | Remko Tronçon <git@el-tramo.be> | 2009-07-19 13:21:38 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2009-07-19 13:27:00 (GMT) |
commit | a6fcd9e7aa12c5e00c61ff809e81fba14babd70c (patch) | |
tree | f65419f4f9a78a1db574f8fa792e745f7fbdf76c /Swiften/Session/Session.cpp | |
parent | 9ccf1973ec3e23e4ba061b774c3f3e3bde4f1040 (diff) | |
download | swift-contrib-a6fcd9e7aa12c5e00c61ff809e81fba14babd70c.zip swift-contrib-a6fcd9e7aa12c5e00c61ff809e81fba14babd70c.tar.bz2 |
Factor out common session stuff into Session class.
Diffstat (limited to 'Swiften/Session/Session.cpp')
-rw-r--r-- | Swiften/Session/Session.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/Swiften/Session/Session.cpp b/Swiften/Session/Session.cpp index 9ab8e4d..84354e5 100644 --- a/Swiften/Session/Session.cpp +++ b/Swiften/Session/Session.cpp @@ -28,12 +28,14 @@ void Session::startSession() { void Session::finishSession() { connection->disconnect(); - onSessionFinished(boost::optional<Error>()); + handleSessionFinished(boost::optional<SessionError>()); + onSessionFinished(boost::optional<SessionError>()); } -void Session::finishSession(const Error& error) { +void Session::finishSession(const SessionError& error) { connection->disconnect(); - onSessionFinished(boost::optional<Error>(error)); + handleSessionFinished(boost::optional<SessionError>(error)); + onSessionFinished(boost::optional<SessionError>(error)); } void Session::initializeStreamStack() { @@ -41,23 +43,31 @@ void Session::initializeStreamStack() { new XMPPLayer(payloadParserFactories, payloadSerializers)); xmppLayer->onStreamStart.connect( boost::bind(&Session::handleStreamStart, this, _1)); - xmppLayer->onElement.connect( - boost::bind(&Session::handleElement, this, _1)); + xmppLayer->onElement.connect(boost::bind(&Session::handleElement, this, _1)); xmppLayer->onError.connect( boost::bind(&Session::finishSession, this, XMLError)); + xmppLayer->onDataRead.connect(boost::bind(boost::ref(onDataRead), _1)); + xmppLayer->onWriteData.connect(boost::bind(boost::ref(onDataWritten), _1)); 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) { +void Session::sendElement(boost::shared_ptr<Element> stanza) { xmppLayer->writeElement(stanza); } void Session::handleDisconnected(const boost::optional<Connection::Error>& connectionError) { if (connectionError) { - finishSession(ConnectionError); + switch (*connectionError) { + case Connection::ReadError: + finishSession(ConnectionReadError); + break; + case Connection::WriteError: + finishSession(ConnectionWriteError); + break; + } } else { finishSession(); |