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 ()> onWebSocketConnected;
|
||||
boost::signal<void (const boost::optional<Swift::Connection::Error> &error)> onWebSocketDisconnected;
|
||||
|
||||
private:
|
||||
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.");
|
||||
onWebSocketDisconnected(error);
|
||||
m_reconnectTimer->start();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue