diff --git a/spectrum/src/frontends/slack/SlackRTM.h b/spectrum/src/frontends/slack/SlackRTM.h index 26b6c4bf839e9c93768ebfce26cf214527beea50..6e1b6d340b5eff65a5924af758709a9c7f74b1f2 100644 --- a/spectrum/src/frontends/slack/SlackRTM.h +++ b/spectrum/src/frontends/slack/SlackRTM.h @@ -20,6 +20,8 @@ #pragma once +#include "SlackAPI.h" + #include "transport/StorageBackend.h" #include "rapidjson/document.h" @@ -31,6 +33,7 @@ #include #include #include +#include "Swiften/Network/Timer.h" #include "Swiften/Version.h" #define HAVE_SWIFTEN_3 (SWIFTEN_VERSION >= 0x030000) @@ -50,6 +53,8 @@ namespace Transport { class Component; class StorageBackend; class HTTPRequest; +class WebSocketClient; +class SlackAPI; class SlackRTM { public: @@ -57,21 +62,40 @@ class SlackRTM { virtual ~SlackRTM(); + void sendPing(); + + void sendMessage(const std::string &channel, const std::string &message); + + boost::signal onRTMStarted; + + std::map &getUsers() { + return m_users; + } + + SlackAPI *getAPI() { + return m_api; + } + + boost::signal onMessageReceived; + private: - void handleDNSResult(const std::vector&, boost::optional); - void handleDataRead(boost::shared_ptr data); - void handleConnected(bool error); + void handlePayloadReceived(const std::string &payload); void handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data); + private: + std::map m_channels; + std::map m_ims; + std::map m_users; + private: Component *m_component; StorageBackend *m_storageBackend; UserInfo m_uinfo; - boost::shared_ptr m_dnsQuery; - boost::shared_ptr m_conn; - Swift::TLSConnectionFactory *m_tlsConnectionFactory; - std::string m_host; - std::string m_path; + WebSocketClient *m_client; + std::string m_token; + unsigned long m_counter; + Swift::Timer::ref m_pingTimer; + SlackAPI *m_api; }; }