diff options
27 files changed, 170 insertions, 106 deletions
diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot1.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot1.cpp index ec9c583..e545801 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot1.cpp +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot1.cpp @@ -10,8 +10,9 @@ using namespace Swift; int main(int, char**) { SimpleEventLoop eventLoop; + BoostNetworkFactories networkFactories(&eventLoop); - Client client(&eventLoop, JID("echobot@wonderland.lit"), "mypass"); + Client client(&eventLoop, &networkFactories, JID("echobot@wonderland.lit"), "mypass"); client.connect(); eventLoop.run(); diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot2.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot2.cpp index fb24e46..810307c 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot2.cpp +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot2.cpp @@ -19,8 +19,9 @@ void handleMessageReceived(Message::ref message); int main(int, char**) { SimpleEventLoop eventLoop; + BoostNetworkFactories networkFactories(&eventLoop); - client = new Client(&eventLoop, JID("echobot@wonderland.lit"), "mypass"); + client = new Client(&eventLoop, &networkFactories, JID("echobot@wonderland.lit"), "mypass"); client->onConnected.connect(&handleConnected); client->onMessageReceived.connect(bind(&handleMessageReceived, _1)); client->connect(); diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot3.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot3.cpp index d3e3d97..bca00af 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot3.cpp +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot3.cpp @@ -14,8 +14,8 @@ using namespace boost; class EchoBot { public: - EchoBot(EventLoop* eventLoop) { - client = new Client(eventLoop, JID("echobot@wonderland.lit"), "mypass"); + EchoBot(EventLoop* eventLoop, NetworkFactories* networkFactories) { + client = new Client(eventLoop, networkFactories, JID("echobot@wonderland.lit"), "mypass"); client->onConnected.connect(bind(&EchoBot::handleConnected, this)); client->onMessageReceived.connect( bind(&EchoBot::handleMessageReceived, this, _1)); @@ -47,7 +47,10 @@ class EchoBot { int main(int, char**) { SimpleEventLoop eventLoop; - EchoBot bot(&eventLoop); + BoostNetworkFactories networkFactories(&eventLoop); + + EchoBot bot(&eventLoop, &networkFactories); + eventLoop.run(); return 0; } diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot4.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot4.cpp index e54346d..077e749 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot4.cpp +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot4.cpp @@ -15,9 +15,9 @@ using namespace boost; //... class EchoBot { public: - EchoBot(EventLoop* eventLoop) { + EchoBot(EventLoop* eventLoop, NetworkFactories* networkFactories) { //... - client = new Client(eventLoop, JID("echobot@wonderland.lit"), "mypass"); + client = new Client(eventLoop, networkFactories, JID("echobot@wonderland.lit"), "mypass"); client->onConnected.connect(bind(&EchoBot::handleConnected, this)); client->onMessageReceived.connect( bind(&EchoBot::handleMessageReceived, this, _1)); @@ -82,7 +82,10 @@ class EchoBot { int main(int, char**) { SimpleEventLoop eventLoop; - EchoBot bot(&eventLoop); + BoostNetworkFactories networkFactories(&eventLoop); + + EchoBot bot(&eventLoop, &networkFactories); + eventLoop.run(); return 0; } diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot5.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot5.cpp index 000b2ce..6690b7c 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot5.cpp +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot5.cpp @@ -15,9 +15,9 @@ using namespace boost; //... class EchoBot { public: - EchoBot(EventLoop* eventLoop) { + EchoBot(EventLoop* eventLoop, NetworkFactories* networkFactories) { //... - client = new Client(eventLoop, JID("echobot@wonderland.lit"), "mypass"); + client = new Client(eventLoop, networkFactories, JID("echobot@wonderland.lit"), "mypass"); client->onConnected.connect(bind(&EchoBot::handleConnected, this)); client->onMessageReceived.connect( bind(&EchoBot::handleMessageReceived, this, _1)); @@ -90,7 +90,10 @@ class EchoBot { int main(int, char**) { SimpleEventLoop eventLoop; - EchoBot bot(&eventLoop); + BoostNetworkFactories networkFactories(&eventLoop); + + EchoBot bot(&eventLoop, &networkFactories); + eventLoop.run(); return 0; } diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoComponent.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoComponent.cpp index b99aec5..0a856f9 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoComponent.cpp +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoComponent.cpp @@ -14,8 +14,8 @@ using namespace boost; class EchoComponent { public: - EchoComponent(EventLoop* eventLoop) { - component = new Component(eventLoop, JID("echo.wonderland.lit"), "EchoSecret"); + EchoComponent(EventLoop* eventLoop, NetworkFactories* networkFactories) { + component = new Component(eventLoop, networkFactories, JID("echo.wonderland.lit"), "EchoSecret"); component->onConnected.connect(bind(&EchoComponent::handleConnected, this)); component->onMessageReceived.connect( bind(&EchoComponent::handleMessageReceived, this, _1)); @@ -58,7 +58,10 @@ class EchoComponent { int main(int, char**) { SimpleEventLoop eventLoop; - EchoComponent bot(&eventLoop); + BoostNetworkFactories networkFactories(&eventLoop); + + EchoComponent bot(&eventLoop, &networkFactories); + eventLoop.run(); return 0; } diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index b8ba289..0542fd6 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -11,9 +11,7 @@ #include <boost/shared_ptr.hpp> #include <stdlib.h> -#include "Swiften/Network/BoostTimerFactory.h" -#include "Swiften/Network/BoostIOServiceThread.h" -#include "Swiften/Network/MainBoostIOServiceThread.h" +#include "Swiften/Network/TimerFactory.h" #include "Swift/Controllers/BuildVersion.h" #include "Swift/Controllers/StoragesFactory.h" #include "Swiften/Client/Storages.h" @@ -82,8 +80,8 @@ MainController::MainController( Notifier* notifier, bool useDelayForLatency) : eventLoop_(eventLoop), - timerFactory_(&boostIOServiceThread_.getIOService(), eventLoop), - idleDetector_(&idleQuerier_, &timerFactory_, 100), + networkFactories_(eventLoop), + idleDetector_(&idleQuerier_, networkFactories_.getTimerFactory(), 100), storagesFactory_(storagesFactory), chatWindowFactory_(chatWindowFactory), mainWindowFactory_(mainWindowFactory), @@ -229,7 +227,7 @@ void MainController::handleConnected() { rosterController_->onChangeStatusRequest.connect(boost::bind(&MainController::handleChangeStatusRequest, this, _1, _2)); rosterController_->onSignOutRequest.connect(boost::bind(&MainController::signOut, this)); - chatsManager_ = new ChatsManager(jid_, client_->getStanzaChannel(), client_->getIQRouter(), eventController_, chatWindowFactory_, client_->getNickResolver(), client_->getPresenceOracle(), client_->getPresenceSender(), uiEventStream_, chatListWindowFactory_, useDelayForLatency_, &timerFactory_, client_->getMUCRegistry(), client_->getEntityCapsProvider(), client_->getMUCManager()); + chatsManager_ = new ChatsManager(jid_, client_->getStanzaChannel(), client_->getIQRouter(), eventController_, chatWindowFactory_, client_->getNickResolver(), client_->getPresenceOracle(), client_->getPresenceSender(), uiEventStream_, chatListWindowFactory_, useDelayForLatency_, networkFactories_.getTimerFactory(), client_->getMUCRegistry(), client_->getEntityCapsProvider(), client_->getMUCManager()); client_->onMessageReceived.connect(boost::bind(&ChatsManager::handleIncomingMessage, chatsManager_, _1)); chatsManager_->setAvatarManager(client_->getAvatarManager()); @@ -355,7 +353,7 @@ void MainController::performLoginFromCachedCredentials() { } if (!client_) { storages_ = storagesFactory_->createStorages(jid_); - client_ = new Swift::Client(eventLoop_, jid_, password_, storages_); + client_ = new Swift::Client(eventLoop_, &networkFactories_, jid_, password_, storages_); client_->setAlwaysTrustCertificates(); client_->onDataRead.connect(boost::bind(&XMLConsoleController::handleDataRead, xmlConsoleController_, _1)); client_->onDataWritten.connect(boost::bind(&XMLConsoleController::handleDataWritten, xmlConsoleController_, _1)); @@ -365,7 +363,7 @@ void MainController::performLoginFromCachedCredentials() { client_->setSoftwareVersion(CLIENT_NAME, buildVersion); client_->getVCardManager()->onVCardChanged.connect(boost::bind(&MainController::handleVCardReceived, this, _1, _2)); - presenceNotifier_ = new PresenceNotifier(client_->getStanzaChannel(), notifier_, client_->getMUCRegistry(), client_->getAvatarManager(), client_->getNickResolver(), client_->getPresenceOracle(), &timerFactory_); + presenceNotifier_ = new PresenceNotifier(client_->getStanzaChannel(), notifier_, client_->getMUCRegistry(), client_->getAvatarManager(), client_->getNickResolver(), client_->getPresenceOracle(), networkFactories_.getTimerFactory()); presenceNotifier_->onNotificationActivated.connect(boost::bind(&MainController::handleNotificationClicked, this, _1)); eventNotifier_ = new EventNotifier(eventController_, notifier_, client_->getAvatarManager(), client_->getNickResolver()); eventNotifier_->onNotificationActivated.connect(boost::bind(&MainController::handleNotificationClicked, this, _1)); @@ -459,7 +457,7 @@ void MainController::setReconnectTimer() { if (reconnectTimer_) { reconnectTimer_->stop(); } - reconnectTimer_ = timerFactory_.createTimer(timeBeforeNextReconnect_ * 1000); + reconnectTimer_ = networkFactories_.getTimerFactory()->createTimer(timeBeforeNextReconnect_ * 1000); reconnectTimer_->onTick.connect(boost::bind(&MainController::reconnectAfterError, this)); reconnectTimer_->start(); } diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h index c05d098..d2d55ac 100644 --- a/Swift/Controllers/MainController.h +++ b/Swift/Controllers/MainController.h @@ -10,8 +10,8 @@ #include <boost/shared_ptr.hpp> #include <vector> -#include "Swiften/Network/BoostIOServiceThread.h" -#include "Swiften/Network/BoostTimerFactory.h" +#include "Swiften/Network/BoostNetworkFactories.h" +#include "Swiften/Network/Timer.h" #include "SwifTools/Idle/PlatformIdleQuerier.h" #include "SwifTools/Idle/ActualIdleDetector.h" #include "Swiften/Base/String.h" @@ -110,8 +110,7 @@ namespace Swift { private: EventLoop* eventLoop_; - BoostIOServiceThread boostIOServiceThread_; - BoostTimerFactory timerFactory_; + BoostNetworkFactories networkFactories_; PlatformIdleQuerier idleQuerier_; ActualIdleDetector idleDetector_; StoragesFactory* storagesFactory_; diff --git a/Swiften/Client/Client.cpp b/Swiften/Client/Client.cpp index 3b2c102..dcc8a79 100644 --- a/Swiften/Client/Client.cpp +++ b/Swiften/Client/Client.cpp @@ -27,7 +27,7 @@ namespace Swift { -Client::Client(EventLoop* eventLoop, const JID& jid, const String& password, Storages* storages) : CoreClient(eventLoop, jid, password), storages(storages) { +Client::Client(EventLoop* eventLoop, NetworkFactories* networkFactories, const JID& jid, const String& password, Storages* storages) : CoreClient(eventLoop, networkFactories, jid, password), storages(storages) { memoryStorages = new MemoryStorages(); softwareVersionResponder = new SoftwareVersionResponder(getIQRouter()); diff --git a/Swiften/Client/Client.h b/Swiften/Client/Client.h index fa45fdd..61d9e32 100644 --- a/Swiften/Client/Client.h +++ b/Swiften/Client/Client.h @@ -46,7 +46,7 @@ namespace Swift { * this is NULL, * all data will be stored in memory (and be lost on shutdown) */ - Client(EventLoop* eventLoop, const JID& jid, const String& password, Storages* storages = NULL); + Client(EventLoop* eventLoop, NetworkFactories* networkFactories, const JID& jid, const String& password, Storages* storages = NULL); ~Client(); diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp index 66fe23e..de0785f 100644 --- a/Swiften/Client/CoreClient.cpp +++ b/Swiften/Client/CoreClient.cpp @@ -8,14 +8,11 @@ #include <boost/bind.hpp> -#include "Swiften/Network/MainBoostIOServiceThread.h" -#include "Swiften/Network/BoostIOServiceThread.h" #include "Swiften/Client/ClientSession.h" #include "Swiften/TLS/PlatformTLSFactories.h" #include "Swiften/TLS/CertificateVerificationError.h" #include "Swiften/Network/Connector.h" -#include "Swiften/Network/BoostConnectionFactory.h" -#include "Swiften/Network/BoostTimerFactory.h" +#include "Swiften/Network/NetworkFactories.h" #include "Swiften/TLS/PKCS12Certificate.h" #include "Swiften/Session/BasicSessionStream.h" #include "Swiften/Queries/IQRouter.h" @@ -24,7 +21,7 @@ namespace Swift { -CoreClient::CoreClient(EventLoop* eventLoop, const JID& jid, const String& password) : resolver_(eventLoop), jid_(jid), password_(password), eventLoop(eventLoop), disconnectRequested_(false), certificateTrustChecker(NULL) { +CoreClient::CoreClient(EventLoop* eventLoop, NetworkFactories* networkFactories, const JID& jid, const String& password) : resolver_(eventLoop), jid_(jid), password_(password), eventLoop(eventLoop), networkFactories(networkFactories), disconnectRequested_(false), certificateTrustChecker(NULL) { stanzaChannel_ = new ClientSessionStanzaChannel(); stanzaChannel_->onMessageReceived.connect(boost::ref(onMessageReceived)); stanzaChannel_->onPresenceReceived.connect(boost::ref(onPresenceReceived)); @@ -32,8 +29,6 @@ CoreClient::CoreClient(EventLoop* eventLoop, const JID& jid, const String& passw stanzaChannel_->onAvailableChanged.connect(boost::bind(&CoreClient::handleStanzaChannelAvailableChanged, this, _1)); iqRouter_ = new IQRouter(stanzaChannel_); - connectionFactory_ = new BoostConnectionFactory(&MainBoostIOServiceThread::getInstance().getIOService(), eventLoop); - timerFactory_ = new BoostTimerFactory(&MainBoostIOServiceThread::getInstance().getIOService(), eventLoop); tlsFactories = new PlatformTLSFactories(); } @@ -42,8 +37,6 @@ CoreClient::~CoreClient() { std::cerr << "Warning: Client not disconnected properly" << std::endl; } delete tlsFactories; - delete timerFactory_; - delete connectionFactory_; delete iqRouter_; stanzaChannel_->onAvailableChanged.disconnect(boost::bind(&CoreClient::handleStanzaChannelAvailableChanged, this, _1)); @@ -65,7 +58,7 @@ void CoreClient::connect(const JID& jid) { void CoreClient::connect(const String& host) { disconnectRequested_ = false; assert(!connector_); - connector_ = Connector::create(host, &resolver_, connectionFactory_, timerFactory_); + connector_ = Connector::create(host, &resolver_, networkFactories->getConnectionFactory(), networkFactories->getTimerFactory()); connector_->onConnectFinished.connect(boost::bind(&CoreClient::handleConnectorFinished, this, _1)); connector_->setTimeoutMilliseconds(60*1000); connector_->start(); @@ -82,7 +75,7 @@ void CoreClient::handleConnectorFinished(boost::shared_ptr<Connection> connectio connection_ = connection; assert(!sessionStream_); - sessionStream_ = boost::shared_ptr<BasicSessionStream>(new BasicSessionStream(ClientStreamType, connection_, &payloadParserFactories_, &payloadSerializers_, tlsFactories->getTLSContextFactory(), timerFactory_)); + sessionStream_ = boost::shared_ptr<BasicSessionStream>(new BasicSessionStream(ClientStreamType, connection_, &payloadParserFactories_, &payloadSerializers_, tlsFactories->getTLSContextFactory(), networkFactories->getTimerFactory())); if (!certificate_.isEmpty()) { sessionStream_->setTLSCertificate(PKCS12Certificate(certificate_, password_)); } diff --git a/Swiften/Client/CoreClient.h b/Swiften/Client/CoreClient.h index 628ced0..d104148 100644 --- a/Swiften/Client/CoreClient.h +++ b/Swiften/Client/CoreClient.h @@ -34,6 +34,7 @@ namespace Swift { class EventLoop; class PlatformTLSFactories; class CertificateTrustChecker; + class NetworkFactories; /** * The central class for communicating with an XMPP server. @@ -51,7 +52,7 @@ namespace Swift { * Constructs a client for the given JID with the given password. * The given eventLoop will be used to post events to. */ - CoreClient(EventLoop* eventLoop, const JID& jid, const String& password); + CoreClient(EventLoop* eventLoop, NetworkFactories* networkFactories, const JID& jid, const String& password); ~CoreClient(); void setCertificate(const String& certificate); @@ -205,11 +206,10 @@ namespace Swift { JID jid_; String password_; EventLoop* eventLoop; + NetworkFactories* networkFactories; ClientSessionStanzaChannel* stanzaChannel_; IQRouter* iqRouter_; Connector::ref connector_; - ConnectionFactory* connectionFactory_; - TimerFactory* timerFactory_; PlatformTLSFactories* tlsFactories; FullPayloadParserFactoryCollection payloadParserFactories_; FullPayloadSerializerCollection payloadSerializers_; diff --git a/Swiften/Component/Component.cpp b/Swiften/Component/Component.cpp index 579bca9..f3e2b81 100644 --- a/Swiften/Component/Component.cpp +++ b/Swiften/Component/Component.cpp @@ -10,7 +10,7 @@ namespace Swift { -Component::Component(EventLoop* eventLoop, const JID& jid, const String& secret) : CoreComponent(eventLoop, jid, secret) { +Component::Component(EventLoop* eventLoop, NetworkFactories* networkFactories, const JID& jid, const String& secret) : CoreComponent(eventLoop, networkFactories, jid, secret) { softwareVersionResponder = new SoftwareVersionResponder(getIQRouter()); softwareVersionResponder->start(); } diff --git a/Swiften/Component/Component.h b/Swiften/Component/Component.h index b880725..1a04272 100644 --- a/Swiften/Component/Component.h +++ b/Swiften/Component/Component.h @@ -19,7 +19,7 @@ namespace Swift { */ class Component : public CoreComponent { public: - Component(EventLoop* eventLoop, const JID& jid, const String& secret); + Component(EventLoop* eventLoop, NetworkFactories* networkFactories, const JID& jid, const String& secret); ~Component(); /** diff --git a/Swiften/Component/CoreComponent.cpp b/Swiften/Component/CoreComponent.cpp index 2821dd2..656f967 100644 --- a/Swiften/Component/CoreComponent.cpp +++ b/Swiften/Component/CoreComponent.cpp @@ -8,12 +8,9 @@ #include <boost/bind.hpp> -#include "Swiften/Network/MainBoostIOServiceThread.h" -#include "Swiften/Network/BoostIOServiceThread.h" #include "Swiften/Component/ComponentSession.h" #include "Swiften/Network/Connector.h" -#include "Swiften/Network/BoostConnectionFactory.h" -#include "Swiften/Network/BoostTimerFactory.h" +#include "Swiften/Network/NetworkFactories.h" #include "Swiften/TLS/PKCS12Certificate.h" #include "Swiften/Session/BasicSessionStream.h" #include "Swiften/Queries/IQRouter.h" @@ -22,7 +19,7 @@ namespace Swift { -CoreComponent::CoreComponent(EventLoop* eventLoop, const JID& jid, const String& secret) : eventLoop(eventLoop), resolver_(eventLoop), jid_(jid), secret_(secret), disconnectRequested_(false) { +CoreComponent::CoreComponent(EventLoop* eventLoop, NetworkFactories* networkFactories, const JID& jid, const String& secret) : eventLoop(eventLoop), networkFactories(networkFactories), resolver_(eventLoop), jid_(jid), secret_(secret), disconnectRequested_(false) { stanzaChannel_ = new ComponentSessionStanzaChannel(); stanzaChannel_->onMessageReceived.connect(boost::ref(onMessageReceived)); stanzaChannel_->onPresenceReceived.connect(boost::ref(onPresenceReceived)); @@ -30,16 +27,12 @@ CoreComponent::CoreComponent(EventLoop* eventLoop, const JID& jid, const String& iqRouter_ = new IQRouter(stanzaChannel_); iqRouter_->setFrom(jid); - connectionFactory_ = new BoostConnectionFactory(&MainBoostIOServiceThread::getInstance().getIOService(), eventLoop); - timerFactory_ = new BoostTimerFactory(&MainBoostIOServiceThread::getInstance().getIOService(), eventLoop); } CoreComponent::~CoreComponent() { if (session_ || connection_) { std::cerr << "Warning: Component not disconnected properly" << std::endl; } - delete timerFactory_; - delete connectionFactory_; delete iqRouter_; stanzaChannel_->onAvailableChanged.disconnect(boost::bind(&CoreComponent::handleStanzaChannelAvailableChanged, this, _1)); @@ -50,7 +43,7 @@ CoreComponent::~CoreComponent() { void CoreComponent::connect(const String& host, int port) { assert(!connector_); - connector_ = ComponentConnector::create(host, port, &resolver_, connectionFactory_, timerFactory_); + connector_ = ComponentConnector::create(host, port, &resolver_, networkFactories->getConnectionFactory(), networkFactories->getTimerFactory()); connector_->onConnectFinished.connect(boost::bind(&CoreComponent::handleConnectorFinished, this, _1)); connector_->setTimeoutMilliseconds(60*1000); connector_->start(); @@ -69,7 +62,7 @@ void CoreComponent::handleConnectorFinished(boost::shared_ptr<Connection> connec connection_ = connection; assert(!sessionStream_); - sessionStream_ = boost::shared_ptr<BasicSessionStream>(new BasicSessionStream(ComponentStreamType, connection_, &payloadParserFactories_, &payloadSerializers_, NULL, timerFactory_)); + sessionStream_ = boost::shared_ptr<BasicSessionStream>(new BasicSessionStream(ComponentStreamType, connection_, &payloadParserFactories_, &payloadSerializers_, NULL, networkFactories->getTimerFactory())); sessionStream_->onDataRead.connect(boost::bind(&CoreComponent::handleDataRead, this, _1)); sessionStream_->onDataWritten.connect(boost::bind(&CoreComponent::handleDataWritten, this, _1)); sessionStream_->initialize(); diff --git a/Swiften/Component/CoreComponent.h b/Swiften/Component/CoreComponent.h index 59466f7..dd4c5fd 100644 --- a/Swiften/Component/CoreComponent.h +++ b/Swiften/Component/CoreComponent.h @@ -25,8 +25,7 @@ namespace Swift { class IQRouter; - class ConnectionFactory; - class TimerFactory; + class NetworkFactories; class ComponentSession; class BasicSessionStream; @@ -42,7 +41,7 @@ namespace Swift { */ class CoreComponent { public: - CoreComponent(EventLoop* eventLoop, const JID& jid, const String& secret); + CoreComponent(EventLoop* eventLoop, NetworkFactories* networkFactories, const JID& jid, const String& secret); ~CoreComponent(); void connect(const String& host, int port); @@ -88,14 +87,13 @@ namespace Swift { private: EventLoop* eventLoop; + NetworkFactories* networkFactories; PlatformDomainNameResolver resolver_; JID jid_; String secret_; ComponentSessionStanzaChannel* stanzaChannel_; IQRouter* iqRouter_; ComponentConnector::ref connector_; - ConnectionFactory* connectionFactory_; - TimerFactory* timerFactory_; FullPayloadParserFactoryCollection payloadParserFactories_; FullPayloadSerializerCollection payloadSerializers_; boost::shared_ptr<Connection> connection_; diff --git a/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp b/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp index 9da5cdf..c090153 100644 --- a/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp +++ b/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp @@ -8,12 +8,12 @@ #include <boost/thread.hpp> #include "Swiften/Client/Client.h" -#include "Swiften/Network/BoostTimer.h" +#include "Swiften/Network/Timer.h" +#include "Swiften/Network/TimerFactory.h" +#include "Swiften/Network/BoostNetworkFactories.h" #include "Swiften/EventLoop/EventLoop.h" #include "Swiften/Client/ClientXMLTracer.h" #include "Swiften/EventLoop/SimpleEventLoop.h" -#include "Swiften/Network/BoostIOServiceThread.h" -#include "Swiften/Network/MainBoostIOServiceThread.h" #include "Swiften/Disco/GetDiscoInfoRequest.h" using namespace Swift; @@ -21,6 +21,7 @@ using namespace Swift; enum ExitCodes {OK = 0, CANNOT_CONNECT, CANNOT_AUTH, NO_RESPONSE, DISCO_ERROR}; SimpleEventLoop eventLoop; +BoostNetworkFactories networkFactories(&eventLoop); Client* client = 0; JID recipient; @@ -67,7 +68,7 @@ int main(int argc, char* argv[]) { connectHost = argv[argi++]; } - client = new Swift::Client(&eventLoop, JID(jid), String(argv[argi++])); + client = new Swift::Client(&eventLoop, &networkFactories, JID(jid), String(argv[argi++])); char* timeoutChar = argv[argi++]; int timeout = atoi(timeoutChar); timeout = (timeout ? timeout : 30) * 1000; @@ -84,7 +85,7 @@ int main(int argc, char* argv[]) { } { - BoostTimer::ref timer(BoostTimer::create(timeout, &MainBoostIOServiceThread::getInstance().getIOService(), &eventLoop)); + Timer::ref timer = networkFactories.getTimerFactory()->createTimer(timeout); timer->onTick.connect(boost::bind(&SimpleEventLoop::stop, &eventLoop)); timer->start(); diff --git a/Swiften/Examples/SendFile/SendFile.cpp b/Swiften/Examples/SendFile/SendFile.cpp index f0a2d59..630daac 100644 --- a/Swiften/Examples/SendFile/SendFile.cpp +++ b/Swiften/Examples/SendFile/SendFile.cpp @@ -9,28 +9,30 @@ #include "Swiften/Client/Client.h" #include "Swiften/Network/BoostTimer.h" +#include "Swiften/Network/TimerFactory.h" +#include "Swiften/Network/BoostNetworkFactories.h" #include "Swiften/EventLoop/EventLoop.h" #include "Swiften/Client/ClientXMLTracer.h" #include "Swiften/EventLoop/SimpleEventLoop.h" -#include "Swiften/Network/MainBoostIOServiceThread.h" #include "Swiften/FileTransfer/OutgoingFileTransfer.h" #include "Swiften/FileTransfer/FileReadBytestream.h" #include "Swiften/FileTransfer/SOCKS5BytestreamServer.h" #include "Swiften/Network/BoostConnectionServer.h" -#include "Swiften/Network/BoostIOServiceThread.h" using namespace Swift; SimpleEventLoop eventLoop; +BoostNetworkFactories networkFactories(&eventLoop); + int exitCode = 2; class FileSender { public: FileSender(const JID& jid, const String& password, const JID& recipient, const boost::filesystem::path& file, int port) : jid(jid), password(password), recipient(recipient), file(file), transfer(NULL) { - connectionServer = BoostConnectionServer::create(port, &MainBoostIOServiceThread::getInstance().getIOService(), &eventLoop); + connectionServer = BoostConnectionServer::create(port, &networkFactories.getIOServiceThread()->getIOService(), &eventLoop); socksBytestreamServer = new SOCKS5BytestreamServer(connectionServer); - client = new Swift::Client(&eventLoop, jid, password); + client = new Swift::Client(&eventLoop, &networkFactories, jid, password); client->onConnected.connect(boost::bind(&FileSender::handleConnected, this)); client->onDisconnected.connect(boost::bind(&FileSender::handleDisconnected, this, _1)); //tracer = new ClientXMLTracer(client); diff --git a/Swiften/Examples/SendMessage/SendMessage.cpp b/Swiften/Examples/SendMessage/SendMessage.cpp index 567a351..8e28dab 100644 --- a/Swiften/Examples/SendMessage/SendMessage.cpp +++ b/Swiften/Examples/SendMessage/SendMessage.cpp @@ -8,16 +8,16 @@ #include <boost/thread.hpp> #include "Swiften/Client/Client.h" -#include "Swiften/Network/BoostTimer.h" +#include "Swiften/Network/BoostNetworkFactories.h" +#include "Swiften/Network/TimerFactory.h" #include "Swiften/EventLoop/EventLoop.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; +BoostNetworkFactories networkFactories(&eventLoop); Client* client = 0; JID recipient; @@ -57,7 +57,7 @@ int main(int argc, char* argv[]) { connectHost = argv[argi++]; } - client = new Swift::Client(&eventLoop, JID(jid), String(argv[argi++])); + client = new Swift::Client(&eventLoop, &networkFactories, JID(jid), String(argv[argi++])); client->setAlwaysTrustCertificates(); recipient = JID(argv[argi++]); @@ -73,7 +73,7 @@ int main(int argc, char* argv[]) { } { - BoostTimer::ref timer(BoostTimer::create(30000, &MainBoostIOServiceThread::getInstance().getIOService(), &eventLoop)); + Timer::ref timer = networkFactories.getTimerFactory()->createTimer(30000); timer->onTick.connect(boost::bind(&SimpleEventLoop::stop, &eventLoop)); timer->start(); diff --git a/Swiften/Network/BoostNetworkFactories.cpp b/Swiften/Network/BoostNetworkFactories.cpp new file mode 100644 index 0000000..fc52b08 --- /dev/null +++ b/Swiften/Network/BoostNetworkFactories.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "Swiften/Network/BoostNetworkFactories.h" +#include "Swiften/Network/BoostTimerFactory.h" +#include "Swiften/Network/BoostConnectionFactory.h" + +namespace Swift { + +BoostNetworkFactories::BoostNetworkFactories(EventLoop* eventLoop) { + timerFactory = new BoostTimerFactory(&ioServiceThread.getIOService(), eventLoop); + connectionFactory = new BoostConnectionFactory(&ioServiceThread.getIOService(), eventLoop); +} + +BoostNetworkFactories::~BoostNetworkFactories() { + delete connectionFactory; + delete timerFactory; +} + +} diff --git a/Swiften/Network/BoostNetworkFactories.h b/Swiften/Network/BoostNetworkFactories.h new file mode 100644 index 0000000..3f8b557 --- /dev/null +++ b/Swiften/Network/BoostNetworkFactories.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "Swiften/Network/NetworkFactories.h" +#include "Swiften/Network/BoostIOServiceThread.h" + +namespace Swift { + class EventLoop; + + class BoostNetworkFactories : public NetworkFactories { + public: + BoostNetworkFactories(EventLoop* eventLoop); + ~BoostNetworkFactories(); + + virtual TimerFactory* getTimerFactory() const { + return timerFactory; + } + + virtual ConnectionFactory* getConnectionFactory() const { + return connectionFactory; + } + + BoostIOServiceThread* getIOServiceThread() { + return &ioServiceThread; + } + + private: + BoostIOServiceThread ioServiceThread; + TimerFactory* timerFactory; + ConnectionFactory* connectionFactory; + }; +} diff --git a/Swiften/Network/MainBoostIOServiceThread.cpp b/Swiften/Network/MainBoostIOServiceThread.cpp deleted file mode 100644 index 9e4f1fc..0000000 --- a/Swiften/Network/MainBoostIOServiceThread.cpp +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2010 Remko Tronçon - * Licensed under the GNU General Public License v3. - * See Documentation/Licenses/GPLv3.txt for more information. - */ - -#include "Swiften/Network/MainBoostIOServiceThread.h" - -#include "Swiften/Network/BoostIOServiceThread.h" - -namespace Swift { - -BoostIOServiceThread& MainBoostIOServiceThread::getInstance() { - static BoostIOServiceThread instance; - return instance; -} - -} diff --git a/Swiften/Network/MainBoostIOServiceThread.h b/Swiften/Network/NetworkFactories.cpp index 29cd4d3..361cb90 100644 --- a/Swiften/Network/MainBoostIOServiceThread.h +++ b/Swiften/Network/NetworkFactories.cpp @@ -4,13 +4,11 @@ * See Documentation/Licenses/GPLv3.txt for more information. */ -#pragma once +#include "Swiften/Network/NetworkFactories.h" namespace Swift { - class BoostIOServiceThread; - class MainBoostIOServiceThread { - public: - static BoostIOServiceThread& getInstance(); - }; +NetworkFactories::~NetworkFactories() { +} + } diff --git a/Swiften/Network/NetworkFactories.h b/Swiften/Network/NetworkFactories.h new file mode 100644 index 0000000..23e2780 --- /dev/null +++ b/Swiften/Network/NetworkFactories.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +namespace Swift { + class TimerFactory; + class ConnectionFactory; + + /** + * An interface collecting network factories. + */ + class NetworkFactories { + public: + virtual ~NetworkFactories(); + + virtual TimerFactory* getTimerFactory() const = 0; + virtual ConnectionFactory* getConnectionFactory() const = 0; + }; +} diff --git a/Swiften/Network/SConscript b/Swiften/Network/SConscript index b4946f9..f193407 100644 --- a/Swiften/Network/SConscript +++ b/Swiften/Network/SConscript @@ -9,7 +9,6 @@ sourceList = [ "BoostConnection.cpp", "BoostConnectionFactory.cpp", "BoostConnectionServer.cpp", - "MainBoostIOServiceThread.cpp", "BoostIOServiceThread.cpp", "ConnectionFactory.cpp", "ConnectionServer.cpp", @@ -24,6 +23,8 @@ sourceList = [ "PlatformDomainNameServiceQuery.cpp", "StaticDomainNameResolver.cpp", "HostAddress.cpp", + "NetworkFactories.cpp", + "BoostNetworkFactories.cpp", "Timer.cpp", "BoostTimer.cpp"] if myenv.get("HAVE_CARES", False) : diff --git a/Swiften/QA/ClientTest/ClientTest.cpp b/Swiften/QA/ClientTest/ClientTest.cpp index dd63056..511deb4 100644 --- a/Swiften/QA/ClientTest/ClientTest.cpp +++ b/Swiften/QA/ClientTest/ClientTest.cpp @@ -8,17 +8,17 @@ #include <boost/thread.hpp> #include "Swiften/Client/Client.h" -#include "Swiften/Network/BoostTimer.h" +#include "Swiften/Network/TimerFactory.h" +#include "Swiften/Network/BoostNetworkFactories.h" #include "Swiften/EventLoop/EventLoop.h" #include "Swiften/EventLoop/SimpleEventLoop.h" #include "Swiften/Roster/GetRosterRequest.h" #include "Swiften/Client/ClientXMLTracer.h" -#include "Swiften/Network/BoostIOServiceThread.h" -#include "Swiften/Network/MainBoostIOServiceThread.h" using namespace Swift; SimpleEventLoop eventLoop; +BoostNetworkFactories networkFactories(&eventLoop); Client* client = 0; bool reconnected = false; @@ -55,14 +55,14 @@ int main(int, char**) { return -1; } - client = new Swift::Client(&eventLoop, JID(jid), String(pass)); + client = new Swift::Client(&eventLoop, &networkFactories, JID(jid), String(pass)); ClientXMLTracer* tracer = new ClientXMLTracer(client); client->onConnected.connect(&handleConnected); client->setAlwaysTrustCertificates(); client->connect(); { - boost::shared_ptr<BoostTimer> timer(BoostTimer::create(30000, &MainBoostIOServiceThread::getInstance().getIOService(), &eventLoop)); + Timer::ref timer = networkFactories.getTimerFactory()->createTimer(30000); timer->onTick.connect(boost::bind(&SimpleEventLoop::stop, &eventLoop)); timer->start(); diff --git a/Swiften/SConscript b/Swiften/SConscript index 4c08692..7da329b 100644 --- a/Swiften/SConscript +++ b/Swiften/SConscript @@ -273,7 +273,7 @@ if env["SCONS_STAGE"] == "build" : # Generate the Swiften header swiften_header = "#pragma once\n" top_path = env.Dir("..").abspath - public_dirs = ["Avatars", "Base", "Chat", "Client", "Component", "Disco", "Elements", "JID", "MUC", "Presence", "Queries", "Roster", "StringCodecs", "TLS", "VCards"] + public_dirs = ["Avatars", "Base", "Chat", "Client", "Component", "Disco", "Elements", "JID", "MUC", "Network", "Presence", "Queries", "Roster", "StringCodecs", "TLS", "VCards"] for public_dir in public_dirs : for root, dirs, files in os.walk(env.Dir(public_dir).abspath) : if root.endswith("UnitTest") : @@ -283,6 +283,8 @@ if env["SCONS_STAGE"] == "build" : for file in files : if not file.endswith(".h") : continue + if file.startswith("CAres") : + continue swiften_header += "#include \"" + os.path.relpath(os.path.join(root, file), top_path) + "\"\n" for file in ["EventLoop/SimpleEventLoop.h"] : swiften_header += "#include \"Swiften/" + file + "\"\n" |