Slack: Stop sending pings when disconnected from RTM

This commit is contained in:
Jan Kaluza 2016-01-18 13:19:18 +01:00
parent b527476801
commit 737aa148da
4 changed files with 16 additions and 2 deletions

View file

@ -61,6 +61,7 @@ class WebSocketClient {
boost::signal<void (const std::string &payload)> onPayloadReceived; boost::signal<void (const std::string &payload)> onPayloadReceived;
boost::signal<void ()> onWebSocketConnected; boost::signal<void ()> onWebSocketConnected;
boost::signal<void (const boost::optional<Swift::Connection::Error> &error)> onWebSocketDisconnected;
private: private:
void handleDNSResult(const std::vector<Swift::HostAddress>&, boost::optional<Swift::DomainNameResolveError>); void handleDNSResult(const std::vector<Swift::HostAddress>&, boost::optional<Swift::DomainNameResolveError>);

View file

@ -218,6 +218,7 @@ void WebSocketClient::handleDisconnected(const boost::optional<Swift::Connection
} }
LOG4CXX_ERROR(logger, "Disconected from " << m_host << ". Will reconnect in 1 second."); LOG4CXX_ERROR(logger, "Disconected from " << m_host << ". Will reconnect in 1 second.");
onWebSocketDisconnected(error);
m_reconnectTimer->start(); m_reconnectTimer->start();
} }

View file

@ -42,6 +42,7 @@ SlackRTM::SlackRTM(Component *component, StorageBackend *storageBackend, UserInf
m_component = component; m_component = component;
m_storageBackend = storageBackend; m_storageBackend = storageBackend;
m_counter = 0; m_counter = 0;
m_started = false;
m_client = new WebSocketClient(component); m_client = new WebSocketClient(component);
m_client->onPayloadReceived.connect(boost::bind(&SlackRTM::handlePayloadReceived, this, _1)); m_client->onPayloadReceived.connect(boost::bind(&SlackRTM::handlePayloadReceived, this, _1));
m_client->onWebSocketConnected.connect(boost::bind(&SlackRTM::handleWebSocketConnected, this)); m_client->onWebSocketConnected.connect(boost::bind(&SlackRTM::handleWebSocketConnected, this));
@ -192,11 +193,19 @@ void SlackRTM::handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &re
LOG4CXX_INFO(logger, data); LOG4CXX_INFO(logger, data);
m_client->connectServer(u); m_client->connectServer(u);
m_pingTimer->start();
} }
void SlackRTM::handleWebSocketConnected() { 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();
} }

View file

@ -32,6 +32,7 @@
#include <Swiften/Network/DomainNameAddressQuery.h> #include <Swiften/Network/DomainNameAddressQuery.h>
#include <Swiften/Network/DomainNameResolver.h> #include <Swiften/Network/DomainNameResolver.h>
#include <Swiften/Network/HostAddress.h> #include <Swiften/Network/HostAddress.h>
#include <Swiften/Network/Connection.h>
#include <Swiften/Base/SafeByteArray.h> #include <Swiften/Base/SafeByteArray.h>
#include "Swiften/Network/Timer.h" #include "Swiften/Network/Timer.h"
#include "Swiften/Version.h" #include "Swiften/Version.h"
@ -92,6 +93,7 @@ class SlackRTM {
void handlePayloadReceived(const std::string &payload); void handlePayloadReceived(const std::string &payload);
void handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data); void handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data);
void handleWebSocketConnected(); void handleWebSocketConnected();
void handleWebSocketDisconnected(const boost::optional<Swift::Connection::Error> &error);
private: private:
std::map<std::string, SlackChannelInfo> m_channels; std::map<std::string, SlackChannelInfo> m_channels;
@ -108,6 +110,7 @@ class SlackRTM {
unsigned long m_counter; unsigned long m_counter;
Swift::Timer::ref m_pingTimer; Swift::Timer::ref m_pingTimer;
SlackAPI *m_api; SlackAPI *m_api;
bool m_started;
}; };
} }