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 ()> onWebSocketConnected;
boost::signal<void (const boost::optional<Swift::Connection::Error> &error)> onWebSocketDisconnected;
private:
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.");
onWebSocketDisconnected(error);
m_reconnectTimer->start();
}

View file

@ -42,6 +42,7 @@ SlackRTM::SlackRTM(Component *component, StorageBackend *storageBackend, UserInf
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));
@ -192,11 +193,19 @@ void SlackRTM::handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &re
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();
}

View file

@ -32,6 +32,7 @@
#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"
@ -92,6 +93,7 @@ class SlackRTM {
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;
@ -108,6 +110,7 @@ class SlackRTM {
unsigned long m_counter;
Swift::Timer::ref m_pingTimer;
SlackAPI *m_api;
bool m_started;
};
}