Twitch SDK (Internal)
presence.h
Go to the documentation of this file.
1 
2 /********************************************************************************************
3 * Twitch Broadcasting SDK
4 *
5 * This software is supplied under the terms of a license agreement with Twitch Interactive, Inc. and
6 * may not be copied or used except in accordance with the terms of that agreement
7 * Copyright (c) 2012-2016 Twitch Interactive, Inc.
8 *********************************************************************************************/
9 
10 #pragma once
11 
16 #include "twitchsdk/core/timer.h"
20 
21 #include <map>
22 #include <vector>
23 #include <memory>
24 
25 namespace ttv
26 {
27  class TaskRunner;
28  class Task;
29  class PubSubClient;
30 
31  namespace social
32  {
33  class Presence;
34  class PresenceListenerProxy;
35  }
36 }
37 
38 
43 {
44 public:
45  using PostPresenceCallback = std::function<void(TTV_ErrorCode ec)>;
46  using FetchPresenceSettingsCallback = std::function<void(TTV_ErrorCode ec, const PresenceSettings& settings)>;
47  using SetPresenceSettingsCallback = std::function<void(TTV_ErrorCode ec)>;
48 
49  class IListener
50  {
51  public:
52  virtual void OnSettingsChanged(Presence* source, const PresenceSettings& settings) = 0;
53  };
54 
55 public:
56  Presence(std::shared_ptr<User> user);
57  virtual ~Presence();
58 
59  void SetUserRepository(std::shared_ptr<UserRepository> repository) { mUserRepository = repository; }
60 
61  std::shared_ptr<User> GetUser() { return mUser.lock(); }
62 
63  void AddListener(std::shared_ptr<IListener> listener);
64  void RemoveListener(std::shared_ptr<IListener> listener);
65 
66  virtual TTV_ErrorCode Initialize() override;
68 
70 
72  TTV_ErrorCode AddPlayingActivity(GameId gameId, const std::string& gameDisplayContext, PresenceActivityToken& activityToken);
74 
77 
80 
81  static std::string GetComponentName() { return "ttv::social::Presence"; }
82 
83  // Component overrides
84  virtual void Update() override;
85  virtual TTV_ErrorCode Shutdown() override;
86 
87  // UserComponent overrides
88  virtual std::string GetLoggerName() const override;
89 
90 protected:
91  virtual bool CheckShutdown() override;
92  virtual void CompleteShutdown() override;
93 
94 private:
96  {
97  public:
99 
100  // PubSubClient::ITopicListener implementation
101  virtual void OnTopicSubscribeStateChanged(PubSubClient* source, const std::string& topic, PubSubClient::SubscribeState::Enum state, TTV_ErrorCode ec) override;
102  virtual void OnTopicMessageReceived(PubSubClient* source, const std::string& topic, const json::Value& msg) override;
103  virtual void OnTopicListenerRemoved(PubSubClient* source, const std::string& topic, TTV_ErrorCode ec) override;
104 
105  private:
107  };
108 
109  // PubSubClient::ITopicListener implementation
110  void OnTopicSubscribeStateChanged(const std::string& topic, PubSubClient::SubscribeState::Enum state, TTV_ErrorCode ec);
111  void OnTopicMessageReceived(const std::string& topic, const json::Value& msg);
112  void OnTopicListenerRemoved(const std::string& topic, TTV_ErrorCode ec);
113 
114  // UserComponent overrides
115  virtual void OnUserInfoFetchComplete(TTV_ErrorCode ec) override;
116 
119  void SetSettings(const PresenceSettings& settings);
120  void PresenceChanged();
121 
122  uint32_t InsertActivity(std::unique_ptr<PresenceActivity>&& activity);
123 
124  std::shared_ptr<UserRepository> mUserRepository;
125 
126  std::shared_ptr<PubSubClient> mPubSub;
127  std::shared_ptr<PubSubTopicListener> mPubSubTopicListener;
128  std::shared_ptr<PubSubTopicListenerHelper> mPubSubTopicListenerHelper;
129 
130  std::shared_ptr<Task> mSocialSettingsTask;
131  std::shared_ptr<Task> mSocialPostPresenceTask;
136  std::map<PresenceActivityToken, std::unique_ptr<PresenceActivity>> mActivities;
137  std::string mSessionGuid;
138  std::string mPresenceTopic;
140  std::unique_ptr<PresenceSettings> mSettings;
144 };
145 
146 
151 {
152 public:
153  typedef std::function<void(Presence* source, const PresenceSettings& settings)> OnSettingsChangedFunc;
154 
155 public:
156  virtual void OnSettingsChanged(Presence* source, const PresenceSettings& settings) override
157  {
158  if (mOnSettingsChangedFunc != nullptr)
159  {
160  mOnSettingsChangedFunc(source, settings);
161  }
162  }
163 
164 public:
165  OnSettingsChangedFunc mOnSettingsChangedFunc;
166 };
void OnTopicListenerRemoved(const std::string &topic, TTV_ErrorCode ec)
void OnTopicMessageReceived(const std::string &topic, const json::Value &msg)
virtual void OnUserInfoFetchComplete(TTV_ErrorCode ec) override
Definition: presence.h:42
virtual void OnSettingsChanged(Presence *source, const PresenceSettings &settings) override
Definition: presence.h:156
void SetSettings(const PresenceSettings &settings)
TTV_ErrorCode AddPlayingActivity(GameId gameId, const std::string &gameDisplayContext, PresenceActivityToken &activityToken)
static std::string GetComponentName()
Definition: presence.h:81
virtual TTV_ErrorCode Initialize() override
bool mEnableAutomaticPosting
Definition: presence.h:143
std::function< void(TTV_ErrorCode ec)> PostPresenceCallback
Definition: presence.h:45
TTV_ErrorCode PostPresence(const PostPresenceCallback &callback)
std::shared_ptr< Task > mSocialPostPresenceTask
Definition: presence.h:131
OnSettingsChangedFunc mOnSettingsChangedFunc
Definition: presence.h:165
PresenceActivityToken mActivityTokenCounter
Definition: presence.h:139
TTV_ErrorCode FetchSettings(const FetchPresenceSettingsCallback &callback)
uint32_t GameId
Definition: coretypes.h:24
Definition: presence.h:150
Presence(std::shared_ptr< User > user)
TTV_ErrorCode AddWatchingActivity(ChannelId channelId, PresenceActivityToken &activityToken)
Enum
Definition: pubsubclient.h:91
TTV_ErrorCode UpdateSettings()
std::unique_ptr< PresenceSettings > mSettings
Definition: presence.h:140
Definition: socialtypes.h:62
EventSource< IListener > mListeners
Definition: presence.h:132
virtual void Update() override
Presence * mOwner
Definition: presence.h:106
WaitForExpiry mPresencePostTimer
Definition: presence.h:133
PresenceSessionAvailability mAvailability
Definition: presence.h:142
TTV_ErrorCode SetAutomaticPresencePostingEnabled(bool enabled)
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
std::function< void(TTV_ErrorCode ec)> SetPresenceSettingsCallback
Definition: presence.h:47
void OnTopicSubscribeStateChanged(const std::string &topic, PubSubClient::SubscribeState::Enum state, TTV_ErrorCode ec)
void AddListener(std::shared_ptr< IListener > listener)
CallbackQueue< FetchPresenceSettingsCallback > mFetchSettingsCallbacks
Definition: presence.h:141
std::shared_ptr< PubSubClient > mPubSub
Definition: presence.h:126
std::shared_ptr< User > GetUser()
Definition: presence.h:61
Represents a JSON value.
Definition: value.h:114
Definition: timer.h:52
Definition: pubsubclient.h:86
TTV_ErrorCode SetPresenceSettings(const PresenceSettings &settings, const SetPresenceSettingsCallback &callback)
Definition: eventsource.h:18
uint32_t PresenceActivityToken
Definition: socialtypes.h:98
TTV_ErrorCode SetSessionAvailability(PresenceSessionAvailability availability)
TTV_ErrorCode GetAutomaticPresencePostingEnabled(bool &enabled)
std::map< PresenceActivityToken, std::unique_ptr< PresenceActivity > > mActivities
Definition: presence.h:136
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
TTV_ErrorCode SubscribeTopics()
Definition: component.h:87
virtual std::string GetLoggerName() const override
virtual void CompleteShutdown() override
void SetUserRepository(std::shared_ptr< UserRepository > repository)
Definition: presence.h:59
Definition: pubsubclient.h:117
void RemoveListener(std::shared_ptr< IListener > listener)
WaitForExpiry mSettingsFetchTimer
Definition: presence.h:134
std::string mPresenceTopic
Definition: presence.h:138
std::function< void(Presence *source, const PresenceSettings &settings)> OnSettingsChangedFunc
Definition: presence.h:153
std::shared_ptr< UserRepository > mUserRepository
Definition: presence.h:124
virtual void OnSettingsChanged(Presence *source, const PresenceSettings &settings)=0
PresenceSessionAvailability
Definition: socialtypes.h:49
TTV_ErrorCode RemoveActivity(PresenceActivityToken activityToken)
std::shared_ptr< Task > mSocialSettingsTask
Definition: presence.h:130
uint32_t ChannelId
Definition: coretypes.h:23
std::function< void(TTV_ErrorCode ec, const PresenceSettings &settings)> FetchPresenceSettingsCallback
Definition: presence.h:46
virtual TTV_ErrorCode Shutdown() override
virtual bool CheckShutdown() override
std::shared_ptr< PubSubTopicListener > mPubSubTopicListener
Definition: presence.h:127
std::string mSessionGuid
Definition: presence.h:137
uint32_t InsertActivity(std::unique_ptr< PresenceActivity > &&activity)
Definition: presence.h:49
std::weak_ptr< User > mUser
Definition: component.h:119
std::shared_ptr< PubSubTopicListenerHelper > mPubSubTopicListenerHelper
Definition: presence.h:128
uint64_t mPostIntervalMilliseconds
Definition: presence.h:135