Twitch SDK (Internal)
chatreplay.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 
12 #include "twitchsdk/core/timer.h"
16 
17 #include <memory>
18 #include <atomic>
19 
20 namespace ttv
21 {
22  class ChannelRepository;
23  class TaskRunner;
24  class UserRepository;
25  class SettingRepository;
26  class PagedRequestFetcher;
27 
28  namespace chat
29  {
30  class ChatReplay;
31  class BitsConfigRepository;
32  }
33 }
34 
35 
37 {
38 public:
39  using DisposerFunc = std::function<void()>;
40 
41 public:
42  ChatReplay(const std::shared_ptr<User>& user);
43 
44  void SetDisposer(DisposerFunc&& func) { mDisposerFunc = func; }
45 
46  // Call these setters + SetTaskRunner before Initialize()
47  void SetVodId(const std::string& vodId);
48  void SetTokenizationOptions(const TokenizationOptions& tokenizationOptions) { mTokenizationOptions = tokenizationOptions; }
49  void AddListener(const std::shared_ptr<IChatReplayListener>& listener) { mListeners.AddListener(listener); }
50  void SetChannelRepository(const std::shared_ptr<ChannelRepository>& repository) { mChannelRepository = repository; }
51  void SetBitsConfigRepository(const std::shared_ptr<BitsConfigRepository>& repository) { mBitsConfigRepository = repository; }
52 
53  std::string GetVodId() const { return mVodId; }
54 
55  // Component Overrides
56  virtual TTV_ErrorCode Initialize() override;
57  virtual void Update() override;
58  virtual TTV_ErrorCode Shutdown() override;
59  virtual void CompleteShutdown() override;
60  virtual std::string GetLoggerName() const override;
61 
62  // IChatReplay Implementation
63  virtual TTV_ErrorCode Dispose() override;
64  virtual TTV_ErrorCode Play() override;
65  virtual TTV_ErrorCode Pause() override;
66  virtual TTV_ErrorCode Seek(Timestamp timestamp) override;
67  virtual TTV_ErrorCode NudgePlayhead(uint64_t timestampMilliseconds) override;
68  virtual TTV_ErrorCode GetCurrentTime(Timestamp& timestamp) const override;
69  virtual TTV_ErrorCode DeleteMessage(const std::string& messageId) override;
70  virtual TTV_ErrorCode GetChannelId(UserId& result) const override;
71  virtual TTV_ErrorCode GetReplayState(ChatReplayState& result) const override;
72 
73 private:
75  {
76  uint64_t baseTimestamp;
77  std::vector<ReplayMessage> messages;
78  };
82  void Advance();
83  void SetReplayState(ChatReplayState state);
84 
85  std::string mVodId;
86  std::shared_ptr<User> mUser;
88  std::vector<ReplayMessageBatch> mFetchedLists;
89  std::shared_ptr<ChannelRepository> mChannelRepository;
90  std::shared_ptr<BitsConfigRepository> mBitsConfigRepository;
91  std::shared_ptr<PagedRequestFetcher> mChatReplayMessagesFetcher;
92  std::shared_ptr<BitsConfiguration> mBitsConfiguration;
93 
97 
99 
101 
102  uint64_t mLastUpdateTimeMilliseconds; // last system update time
103  uint64_t mPlayheadTimeMilliseconds; // current time in vod
106 
107  uint32_t mSeekCount;
111 
117 };
virtual void CompleteShutdown() override
void AddListener(const std::shared_ptr< IChatReplayListener > &listener)
Definition: chatreplay.h:49
std::shared_ptr< PagedRequestFetcher > mChatReplayMessagesFetcher
Definition: chatreplay.h:91
Definition: timer.h:134
uint32_t UserId
Definition: coretypes.h:22
ChatReplayState
Definition: chattypes.h:547
std::vector< ReplayMessage > messages
Definition: chatreplay.h:77
bool mBitsConfigFetchInFlight
Definition: chatreplay.h:113
std::string GetVodId() const
Definition: chatreplay.h:53
virtual TTV_ErrorCode Pause() override
std::shared_ptr< BitsConfigRepository > mBitsConfigRepository
Definition: chatreplay.h:90
void SetDisposer(DisposerFunc &&func)
Definition: chatreplay.h:44
uint64_t mPlayheadTimeMilliseconds
Definition: chatreplay.h:103
RetryTimer mFetchBitsConfigRetryTimer
Definition: chatreplay.h:95
void SetReplayState(ChatReplayState state)
std::vector< ReplayMessageBatch > mFetchedLists
Definition: chatreplay.h:88
bool mHasFetchedBitsConfig
Definition: chatreplay.h:115
DisposerFunc mDisposerFunc
Definition: chatreplay.h:98
UserId mUserId
Definition: chatreplay.h:108
uint32_t Timestamp
Definition: coretypes.h:27
std::shared_ptr< BitsConfiguration > mBitsConfiguration
Definition: chatreplay.h:92
std::shared_ptr< User > mUser
Definition: chatreplay.h:86
void SetBitsConfigRepository(const std::shared_ptr< BitsConfigRepository > &repository)
Definition: chatreplay.h:51
void SetVodId(const std::string &vodId)
Timestamp mVodRecordedAtSeconds
Definition: chatreplay.h:105
ChannelId mChannelId
Definition: chatreplay.h:109
EventSource< IChatReplayListener > mListeners
Definition: chatreplay.h:87
virtual TTV_ErrorCode Initialize() override
virtual std::string GetLoggerName() const override
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
TTV_ErrorCode FetchChatReplayMessagesAtMillisecond(uint64_t timestamp)
WaitForExpiry mFetchMessagesRetryTimer
Definition: chatreplay.h:96
uint64_t mLastLoadedTimeMilliseconds
Definition: chatreplay.h:104
Definition: timer.h:52
uint32_t mSeekCount
Definition: chatreplay.h:107
bool mHasNoMessages
Definition: chatreplay.h:116
Definition: eventsource.h:18
uint64_t mLastUpdateTimeMilliseconds
Definition: chatreplay.h:102
void SetTokenizationOptions(const TokenizationOptions &tokenizationOptions)
Definition: chatreplay.h:48
virtual TTV_ErrorCode Dispose() override
virtual TTV_ErrorCode Shutdown() override
std::string mVodId
Definition: chatreplay.h:85
Definition: component.h:50
std::function< void()> DisposerFunc
Definition: chatreplay.h:39
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
TTV_ErrorCode FetchBitsConfig()
RetryTimer mFetchVodRetryTimer
Definition: chatreplay.h:94
ChatReplayState mReplayState
Definition: chatreplay.h:110
TTV_ErrorCode FetchVod()
Definition: ichatreplay.h:31
virtual TTV_ErrorCode NudgePlayhead(uint64_t timestampMilliseconds) override
virtual TTV_ErrorCode GetCurrentTime(Timestamp &timestamp) const override
virtual TTV_ErrorCode GetReplayState(ChatReplayState &result) const override
void SetChannelRepository(const std::shared_ptr< ChannelRepository > &repository)
Definition: chatreplay.h:50
bool mHasFetchedVod
Definition: chatreplay.h:114
ChatReplay(const std::shared_ptr< User > &user)
virtual TTV_ErrorCode Play() override
uint64_t baseTimestamp
Definition: chatreplay.h:76
uint32_t ChannelId
Definition: coretypes.h:23
TokenizationOptions mTokenizationOptions
Definition: chatreplay.h:100
Definition: chattypes.h:41
Definition: chatreplay.h:36
virtual TTV_ErrorCode Seek(Timestamp timestamp) override
virtual TTV_ErrorCode DeleteMessage(const std::string &messageId) override
virtual void Update() override
bool mVodFetchInFlight
Definition: chatreplay.h:112
virtual TTV_ErrorCode GetChannelId(UserId &result) const override
std::shared_ptr< ChannelRepository > mChannelRepository
Definition: chatreplay.h:89