Changeset - 1bf1343ac5e3
[Not reviewed]
0 4 0
Jan Kaluza - 14 years ago 2011-07-25 18:22:11
hanzz.k@gmail.com
Stop loop instead of exit()
4 files changed with 18 insertions and 7 deletions:
0 comments (0 inline, 0 general)
backends/libpurple/main.cpp
Show inline comments
 
@@ -152,14 +152,20 @@ static std::string getAlias(PurpleBuddy *m_buddy) {
 
	}
 
	return alias;
 
}
 

	
 
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) {
 
			PurpleAccount *account = NULL;
 
			const char *protocol = CONFIG_STRING(config, "service.protocol").c_str();
 
			if (purple_accounts_find(legacyName.c_str(), protocol) != NULL){
backends/libpurple/spectrumeventloop.cpp
Show inline comments
 
@@ -65,12 +65,13 @@ void SpectrumEventLoop::run() {
 
		event_loop(0);
 
	}
 
#endif
 
}
 

	
 
void SpectrumEventLoop::stop() {
 
	std::cout << "stopped loop\n";
 
	if (!m_isRunning)
 
		return;
 
	if (m_loop) {
 
		g_main_loop_quit(m_loop);
 
		g_main_loop_unref(m_loop);
 
		m_loop = NULL;
include/transport/networkplugin.h
Show inline comments
 
@@ -80,12 +80,14 @@ class NetworkPlugin {
 
		virtual void handleBuddyRemovedRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*groups*/) {}
 

	
 
		virtual void handleTypingRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
 
		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:
 
		void connect();
 
		void handleLoginPayload(const std::string &payload);
 
		void handleLogoutPayload(const std::string &payload);
 
@@ -110,12 +112,13 @@ class NetworkPlugin {
 
		Swift::SafeByteArray m_data;
 
		std::string m_host;
 
		int m_port;
 
		Swift::BoostNetworkFactories *m_factories;
 
		Swift::BoostIOServiceThread m_boostIOServiceThread;
 
		boost::shared_ptr<Swift::Connection> m_conn;
 
		Swift::EventLoop *m_loop;
 
		Swift::Timer::ref m_pingTimer;
 
		bool m_pingReceived;
 
		double m_init_res;
 

	
 
};
 

	
src/networkplugin.cpp
Show inline comments
 
@@ -46,12 +46,13 @@ namespace Transport {
 

	
 
NetworkPlugin::NetworkPlugin(Swift::EventLoop *loop, const std::string &host, int port) {
 
	m_factories = new Swift::BoostNetworkFactories(loop);
 
	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));
 
	m_conn->onDisconnected.connect(boost::bind(&NetworkPlugin::handleDisconnected, this));
 

	
 
	m_pingTimer = m_factories->getTimerFactory()->createTimer(30000);
 
@@ -259,26 +260,26 @@ void NetworkPlugin::handleRoomChanged(const std::string &user, const std::string
 
 
 
	send(message);
 
}
 

	
 
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() {
 
	LOG4CXX_INFO(logger, "Connecting NetworkPluginServer host " << m_host << " port " << m_port);
 
	m_conn->connect(Swift::HostAddressPort(Swift::HostAddress(m_host), m_port));
 
}
 
@@ -515,14 +516,14 @@ void NetworkPlugin::sendMemoryUsage() {
 

	
 
	send(message);
 
}
 

	
 
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();
 
}
 

	
 
}
0 comments (0 inline, 0 general)