Twitch SDK (Internal)
module.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 
15 
16 namespace ttv
17 {
18  class IModule;
19  class IModuleListener;
20 
21  class ModuleBase;
22  class ComponentContainer;
23 
28  void ShutdownModulesSync(const std::vector<std::shared_ptr<ttv::IModule>>& modules);
29 }
30 
31 
38 {
39 public:
40  enum class State
41  {
46  };
47 
48  using InitializeCallback = std::function<void(TTV_ErrorCode ec)>;
49  using ShutdownCallback = std::function<void(TTV_ErrorCode ec)>;
50 
51 public:
52  virtual ~IModule();
53 
57  virtual State GetState() const = 0;
61  virtual std::string GetModuleName() const = 0;
67  virtual TTV_ErrorCode Initialize(const InitializeCallback& callback) = 0;
71  virtual TTV_ErrorCode Update() = 0;
78  virtual TTV_ErrorCode Shutdown(const ShutdownCallback& callback) = 0;
79 };
80 
81 
86 {
87 public:
88  ModuleBase();
89  virtual ~ModuleBase();
90 
91  // IModule implementation
92  virtual State GetState() const override;
93  virtual TTV_ErrorCode Initialize(const InitializeCallback& callback) override;
94  virtual TTV_ErrorCode Update() override;
95  virtual TTV_ErrorCode Shutdown(const ShutdownCallback& callback) override;
96 
97 protected:
98  void NotifyStateChange();
100  {
101  mInitializeCallbacks.Push(callback);
102  }
103 
105  {
106  mShutdownCallbacks.Push(callback);
107  }
108 
109  virtual bool CheckShutdown();
110  virtual void CompleteShutdown();
111 
115  template <typename T>
116  void Invoke(std::function<void(std::shared_ptr<T>)> callback)
117  {
118  mListeners.Invoke([callback](std::shared_ptr<IModuleListener> listener)
119  {
120  callback(std::static_pointer_cast<T>(listener));
121  });
122  }
123 
127  std::shared_ptr<ComponentContainer> GetComponentContainer() { return mComponentContainer; }
128 
129 protected:
136 
137 private:
141  std::shared_ptr<ComponentContainer> mComponentContainer;
142 
145 };
146 
147 
154 {
155 public:
159  virtual void ModuleStateChanged(IModule* source, IModule::State state, TTV_ErrorCode ec) = 0;
160 };
virtual TTV_ErrorCode Update()=0
CallbackQueue< ShutdownCallback > mShutdownCallbacks
Definition: module.h:144
Definition: module.h:37
std::function< void(TTV_ErrorCode ec)> InitializeCallback
Definition: module.h:48
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
State mState
Definition: module.h:134
EventSource< IModuleListener > mListeners
Definition: module.h:133
Definition: module.h:153
std::shared_ptr< ComponentContainer > GetComponentContainer()
Definition: module.h:127
void RegisterInitializeCallback(const InitializeCallback &callback)
Definition: module.h:99
void ShutdownModulesSync(const std::vector< std::shared_ptr< ttv::IModule >> &modules)
Definition: eventsource.h:18
State
Definition: module.h:40
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
virtual std::string GetModuleName() const =0
std::function< void(TTV_ErrorCode ec)> ShutdownCallback
Definition: module.h:49
CallbackQueue< InitializeCallback > mInitializeCallbacks
Definition: module.h:143
State mLastReportedState
Definition: module.h:135
virtual ~IModule()
std::shared_ptr< ComponentContainer > mComponentContainer
Definition: module.h:141
virtual TTV_ErrorCode Initialize(const InitializeCallback &callback)=0
Definition: module.h:85
void RegisterShutdownCallback(const ShutdownCallback &callback)
Definition: module.h:104
virtual TTV_ErrorCode Shutdown(const ShutdownCallback &callback)=0
virtual State GetState() const =0
void Invoke(std::function< void(std::shared_ptr< T >)> callback)
Definition: module.h:116