Slack: Stop sending pings when disconnected from RTM
This commit is contained in:
parent
b527476801
commit
737aa148da
4 changed files with 16 additions and 2 deletions
|
@ -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>);
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue