From 1bf1343ac5e300b0642350df5c8958d26a98ef49 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 25 Jul 2011 18:22:11 +0200 Subject: [PATCH] Stop loop instead of exit() --- backends/libpurple/main.cpp | 6 ++++++ backends/libpurple/spectrumeventloop.cpp | 1 + include/transport/networkplugin.h | 3 +++ src/networkplugin.cpp | 15 ++++++++------- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index f7122453..81d9faee 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -155,8 +155,14 @@ static std::string getAlias(PurpleBuddy *m_buddy) { class SpectrumNetworkPlugin : public NetworkPlugin { public: + SpectrumEventLoop *m_loop; SpectrumNetworkPlugin(Config *config, SpectrumEventLoop *loop, const std::string &host, int port) : NetworkPlugin(loop, host, port) { this->config = config; + m_loop = loop; + } + + void handleExit() { + m_loop->stop(); } void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) { diff --git a/backends/libpurple/spectrumeventloop.cpp b/backends/libpurple/spectrumeventloop.cpp index 6d59695b..90f04333 100644 --- a/backends/libpurple/spectrumeventloop.cpp +++ b/backends/libpurple/spectrumeventloop.cpp @@ -68,6 +68,7 @@ void SpectrumEventLoop::run() { } void SpectrumEventLoop::stop() { + std::cout << "stopped loop\n"; if (!m_isRunning) return; if (m_loop) { diff --git a/include/transport/networkplugin.h b/include/transport/networkplugin.h index 7fc937f1..983c28f9 100644 --- a/include/transport/networkplugin.h +++ b/include/transport/networkplugin.h @@ -83,6 +83,8 @@ class NetworkPlugin { virtual void handleTypedRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {} virtual void handleStoppedTypingRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {} virtual void handleAttentionRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*message*/) {} + + virtual void handleExit() { std::cout << "EXITING\n"; exit(1); } private: @@ -113,6 +115,7 @@ class NetworkPlugin { Swift::BoostNetworkFactories *m_factories; Swift::BoostIOServiceThread m_boostIOServiceThread; boost::shared_ptr m_conn; + Swift::EventLoop *m_loop; Swift::Timer::ref m_pingTimer; bool m_pingReceived; double m_init_res; diff --git a/src/networkplugin.cpp b/src/networkplugin.cpp index d296f70b..cddd7a4b 100644 --- a/src/networkplugin.cpp +++ b/src/networkplugin.cpp @@ -49,6 +49,7 @@ NetworkPlugin::NetworkPlugin(Swift::EventLoop *loop, const std::string &host, in m_host = host; m_port = port; m_pingReceived = false; + m_loop = loop; m_conn = m_factories->getConnectionFactory()->createConnection(); m_conn->onDataRead.connect(boost::bind(&NetworkPlugin::handleDataRead, this, _1)); m_conn->onConnectFinished.connect(boost::bind(&NetworkPlugin::_handleConnected, this, _1)); @@ -262,20 +263,20 @@ void NetworkPlugin::handleRoomChanged(const std::string &user, const std::string void NetworkPlugin::_handleConnected(bool error) { if (error) { - LOG4CXX_ERROR(logger, "Connecting error. Exiting"); +// LOG4CXX_ERROR(logger, "Connecting error. Exiting"); m_pingTimer->stop(); - exit(1); + handleExit(); } else { - LOG4CXX_INFO(logger, "Connected to NetworkPluginServer"); +// LOG4CXX_INFO(logger, "Connected to NetworkPluginServer"); m_pingTimer->start(); } } void NetworkPlugin::handleDisconnected() { - LOG4CXX_INFO(logger, "Disconnected from NetworkPluginServer. Exiting."); +// LOG4CXX_INFO(logger, "Disconnected from NetworkPluginServer. Exiting."); m_pingTimer->stop(); - exit(1); + handleExit(); } void NetworkPlugin::connect() { @@ -518,8 +519,8 @@ void NetworkPlugin::sendMemoryUsage() { void NetworkPlugin::pingTimeout() { if (m_pingReceived == false) { - LOG4CXX_ERROR(logger, "No PING received for long time (NetworkPluginServer crashed?). Exiting"); - exit(1); +// LOG4CXX_ERROR(logger, "No PING received for long time. Exiting"); + handleExit(); } m_pingReceived = false; m_pingTimer->start();