Changeset - 737aa148dada
[Not reviewed]
0 4 0
Jan Kaluza - 10 years ago 2016-01-18 13:19:18
jkaluza@redhat.com
Slack: Stop sending pings when disconnected from RTM
4 files changed with 16 insertions and 2 deletions:
0 comments (0 inline, 0 general)
include/transport/WebSocketClient.h
Show inline comments
 
@@ -58,12 +58,13 @@ class WebSocketClient {
 

	
 
		void write(const std::string &data);
 

	
 
		boost::signal<void (const std::string &payload)> onPayloadReceived;
 

	
 
		boost::signal<void ()> onWebSocketConnected;
 
		boost::signal<void (const boost::optional<Swift::Connection::Error> &error)> onWebSocketDisconnected;
 

	
 
	private:
 
		void handleDNSResult(const std::vector<Swift::HostAddress>&, boost::optional<Swift::DomainNameResolveError>);
 
		void handleDataRead(boost::shared_ptr<Swift::SafeByteArray> data);
 
		void handleConnected(bool error);
 
		void handleDisconnected(const boost::optional<Swift::Connection::Error> &error);
libtransport/WebSocketClient.cpp
Show inline comments
 
@@ -215,12 +215,13 @@ void WebSocketClient::handleConnected(bool error) {
 
void WebSocketClient::handleDisconnected(const boost::optional<Swift::Connection::Error> &error) {
 
	if (!error) {
 
		return;
 
	}
 

	
 
	LOG4CXX_ERROR(logger, "Disconected from " << m_host << ". Will reconnect in 1 second.");
 
	onWebSocketDisconnected(error);
 
	m_reconnectTimer->start();
 
}
 

	
 
void WebSocketClient::handleDNSResult(const std::vector<Swift::HostAddress> &addrs, boost::optional<Swift::DomainNameResolveError> error) {
 
	if (error) {
 
		LOG4CXX_ERROR(logger, "DNS resolving error. Will try again in 1 second.");
spectrum/src/frontends/slack/SlackRTM.cpp
Show inline comments
 
@@ -39,12 +39,13 @@ namespace Transport {
 
DEFINE_LOGGER(logger, "SlackRTM");
 

	
 
SlackRTM::SlackRTM(Component *component, StorageBackend *storageBackend, UserInfo uinfo) : m_uinfo(uinfo) {
 
	m_component = component;
 
	m_storageBackend = storageBackend;
 
	m_counter = 0;
 
	m_started = false;
 
	m_client = new WebSocketClient(component);
 
	m_client->onPayloadReceived.connect(boost::bind(&SlackRTM::handlePayloadReceived, this, _1));
 
	m_client->onWebSocketConnected.connect(boost::bind(&SlackRTM::handleWebSocketConnected, this));
 

	
 
	m_pingTimer = m_component->getNetworkFactories()->getTimerFactory()->createTimer(20000);
 
	m_pingTimer->onTick.connect(boost::bind(&SlackRTM::sendPing, this));
 
@@ -189,15 +190,23 @@ void SlackRTM::handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &re
 

	
 
	std::string u = url.GetString();
 
	LOG4CXX_INFO(logger, "Started RTM, WebSocket URL is " << u);
 
	LOG4CXX_INFO(logger, data);
 

	
 
	m_client->connectServer(u);
 
	m_pingTimer->start();
 
}
 

	
 
void SlackRTM::handleWebSocketConnected() {
 
	onRTMStarted();
 
	if (!m_started) {
 
		onRTMStarted();
 
		m_started = true;
 
	}
 

	
 
	m_pingTimer->start();
 
}
 

	
 
void SlackRTM::handleWebSocketDisconnected(const boost::optional<Swift::Connection::Error> &error) {
 
	m_pingTimer->stop();
 
}
 

	
 

	
 
}
spectrum/src/frontends/slack/SlackRTM.h
Show inline comments
 
@@ -29,12 +29,13 @@
 
#include <Swiften/Network/HostAddressPort.h>
 
#include <Swiften/TLS/PlatformTLSFactories.h>
 
#include <Swiften/Network/DomainNameResolveError.h>
 
#include <Swiften/Network/DomainNameAddressQuery.h>
 
#include <Swiften/Network/DomainNameResolver.h>
 
#include <Swiften/Network/HostAddress.h>
 
#include <Swiften/Network/Connection.h>
 
#include <Swiften/Base/SafeByteArray.h>
 
#include "Swiften/Network/Timer.h"
 
#include "Swiften/Version.h"
 

	
 
#define HAVE_SWIFTEN_3  (SWIFTEN_VERSION >= 0x030000)
 

	
 
@@ -89,12 +90,13 @@ class SlackRTM {
 
		}
 

	
 
	private:
 
		void handlePayloadReceived(const std::string &payload);
 
		void handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data);
 
		void handleWebSocketConnected();
 
		void handleWebSocketDisconnected(const boost::optional<Swift::Connection::Error> &error);
 

	
 
	private:
 
		std::map<std::string, SlackChannelInfo> m_channels;
 
		std::map<std::string, SlackImInfo> m_ims;
 
		std::map<std::string, SlackUserInfo> m_users;
 
		std::string m_selfName;
 
@@ -105,9 +107,10 @@ class SlackRTM {
 
		UserInfo m_uinfo;
 
		WebSocketClient *m_client;
 
		std::string m_token;
 
		unsigned long m_counter;
 
		Swift::Timer::ref m_pingTimer;
 
		SlackAPI *m_api;
 
		bool m_started;
 
};
 

	
 
}
0 comments (0 inline, 0 general)