Changeset - 6cfc7e743431
[Not reviewed]
0 4 0
Jan Kaluza - 10 years ago 2015-11-25 17:02:51
jkaluza@redhat.com
Do not start SlackRTM until we are really connected to WebSocket and the connection is upgraded
4 files changed with 8 insertions and 0 deletions:
0 comments (0 inline, 0 general)
include/transport/WebSocketClient.h
Show inline comments
 
@@ -60,6 +60,8 @@ class WebSocketClient {
 

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

	
 
		boost::signal<void ()> onWebSocketConnected;
 

	
 
	private:
 
		void handleDNSResult(const std::vector<Swift::HostAddress>&, boost::optional<Swift::DomainNameResolveError>);
 
		void handleDataRead(boost::shared_ptr<Swift::SafeByteArray> data);
spectrum/src/frontends/slack/SlackRTM.cpp
Show inline comments
 
@@ -43,6 +43,8 @@ SlackRTM::SlackRTM(Component *component, StorageBackend *storageBackend, UserInf
 
	m_counter = 0;
 
	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));
 

	
 
@@ -127,7 +129,9 @@ void SlackRTM::handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &re
 

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

	
 
void SlackRTM::handleWebSocketConnected() {
 
	onRTMStarted();
 
}
 

	
spectrum/src/frontends/slack/SlackRTM.h
Show inline comments
 
@@ -85,6 +85,7 @@ class SlackRTM {
 
	private:
 
		void handlePayloadReceived(const std::string &payload);
 
		void handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data);
 
		void handleWebSocketConnected();
 

	
 
	private:
 
		std::map<std::string, SlackChannelInfo> m_channels;
src/WebSocketClient.cpp
Show inline comments
 
@@ -122,6 +122,7 @@ void WebSocketClient::handleDataRead(boost::shared_ptr<Swift::SafeByteArray> dat
 
		if (m_buffer.find("\r\n\r\n") != std::string::npos) {
 
			m_buffer.erase(0, m_buffer.find("\r\n\r\n") + 4);
 
			m_upgraded = true;
 
			onWebSocketConnected();
 
		}
 
		else {
 
			return;
0 comments (0 inline, 0 general)