Twitch SDK (Internal)
pubsubclientconnection.h
Go to the documentation of this file.
1 /********************************************************************************************
2 * Twitch Broadcasting SDK
3 *
4 * This software is supplied under the terms of a license agreement with Twitch Interactive, Inc. and
5 * may not be copied or used except in accordance with the terms of that agreement
6 * Copyright (c) 2012-2016 Twitch Interactive, Inc.
7 *********************************************************************************************/
8 
9 #pragma once
10 
16 #include "twitchsdk/core/socket.h"
17 #include "twitchsdk/core/thread.h"
18 #include "twitchsdk/core/timer.h"
21 
22 
23 namespace ttv
24 {
25  class OAuthToken;
26  class PubSubClientConnection;
27  class User;
28 
29  namespace pubsub
30  {
31  struct ClientMessage;
32  struct ServerMessage;
33  struct ConnectServerMessage;
34  struct DisconnectServerMessage;
35  struct SendMessageServerMessage;
36  struct SubscribeToTopicServerMessage;
37  struct UnsubscribeFromTopicServerMessage;
38  }
39 }
40 
41 
47 {
48 public:
50  {
51  enum Enum
52  {
56  Unsubscribing
57  };
58  };
59 
60  class IListener
61  {
62  public:
63  virtual void OnReconnectReceived(PubSubClientConnection* connection) = 0;
64  virtual void OnConnectionStateChanged(PubSubClientConnection* connection, PubSubState state, TTV_ErrorCode ec) = 0;
65  virtual void OnTopicSubscriptionChanged(PubSubClientConnection* connection, const std::string& topic, TopicSubscriptionState::Enum state, TTV_ErrorCode ec) = 0;
66  virtual void OnTopicMessageReceived(PubSubClientConnection* connection, const std::string& topic, const json::Value& message) = 0;
67  virtual void OnPongTimeout(PubSubClientConnection* connection) = 0;
68  virtual void OnAuthenticationError(PubSubClientConnection* connection, TTV_ErrorCode ec, const std::shared_ptr<const OAuthToken>& oauthToken) = 0;
69  };
70 
71  typedef std::function<void(TTV_ErrorCode ec, const std::string& error, const json::Value& result)> InternalCallback;
72 
73 public:
74  PubSubClientConnection(std::shared_ptr<User> user);
75 
76  PubSubState GetState() const { return mState; }
77  TopicSubscriptionState::Enum GetTopicState(const std::string& topic) const;
78 
79  void AddListener(const std::shared_ptr<IListener>& listener);
80  void RemoveListener(const std::shared_ptr<IListener>& listener);
81 
82  TTV_ErrorCode Connect();
83  TTV_ErrorCode Disconnect();
84  TTV_ErrorCode Send(const std::string& text);
85  bool Connected();
86 
87  TTV_ErrorCode Listen(const std::string& topic, std::shared_ptr<User> user);
88  TTV_ErrorCode Unlisten(const std::string& topic);
89  TTV_ErrorCode SendMessageOverSocket(const json::Value& root);
90  TTV_ErrorCode SendNullDataMessage(const std::string& type);
91 
92  TTV_ErrorCode PollSocket();
93 
94  void Update();
95 
96  uint32_t GetConnectionIndex() const { return mConnectionIndex; }
97 
98 private:
100  {
102 
103  std::string nonce;
104  InternalCallback callback;
106  };
107 
108  TTV_ErrorCode HandleIncomingMessage();
109  TTV_ErrorCode InitiatePing();
110  void SetConnectionState(PubSubState state, TTV_ErrorCode ec);
111  void Log(TTV_MessageLevel level, const char* format, ...);
112 
113  std::weak_ptr<User> mUser;
114  std::shared_ptr<IWebSocket> mSocket;
115  std::string mReadBuffer;
116  std::map<std::string, TopicSubscriptionState::Enum> mTopicStates;
117  std::map<std::string, OutstandingRequest> mOutstandingRequests;
125 };
Definition: pubsubclientconnection.h:99
std::weak_ptr< User > mUser
Definition: pubsubclientconnection.h:113
Enum
Definition: pubsubclientconnection.h:51
json::FastWriter mJsonWriter
Definition: pubsubclientconnection.h:119
Definition: pubsubclientconnection.h:46
std::shared_ptr< IWebSocket > mSocket
Definition: pubsubclientconnection.h:114
std::string nonce
Definition: pubsubclientconnection.h:103
TTV_MessageLevel
Definition: tracingtypes.h:14
uint32_t Timestamp
Definition: coretypes.h:27
std::map< std::string, TopicSubscriptionState::Enum > mTopicStates
Definition: pubsubclientconnection.h:116
PubSubState mState
Definition: pubsubclientconnection.h:122
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
std::map< std::string, OutstandingRequest > mOutstandingRequests
Definition: pubsubclientconnection.h:117
std::function< void(TTV_ErrorCode ec, const std::string &error, const json::Value &result)> InternalCallback
Definition: pubsubclientconnection.h:71
std::string mReadBuffer
Definition: pubsubclientconnection.h:115
EventSource< IListener > mListeners
Definition: pubsubclientconnection.h:123
Represents a JSON value.
Definition: value.h:114
Definition: timer.h:52
Unserialize a JSON document into a Value.
Definition: reader.h:18
Definition: eventsource.h:18
Definition: pubsubclientconnection.h:60
PubSubState GetState() const
Definition: pubsubclientconnection.h:76
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
PubSubState
Definition: coretypes.h:152
InternalCallback callback
Definition: pubsubclientconnection.h:104
uint32_t GetConnectionIndex() const
Definition: pubsubclientconnection.h:96
WaitForExpiry mPongTimer
Definition: pubsubclientconnection.h:121
json::Reader mJsonReader
Definition: pubsubclientconnection.h:118
uint32_t mConnectionIndex
Definition: pubsubclientconnection.h:124
WaitForExpiry mPingTimer
Definition: pubsubclientconnection.h:120
Timestamp requestTime
Used to timeout requests.
Definition: pubsubclientconnection.h:105
Outputs a Value in JSON format without formatting (not human friendly).
Definition: writer.h:31
Definition: pubsubclientconnection.h:49