AM Daemon ライブラリリファレンス
Aime.h
[詳解]
1 /// @file
2 /// @brief Aime関連処理を提供するMonostateクラス Aime のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_AIME_H
7 #define AMDAEMON_AIME_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/AimeUnit.h"
11 #include "amdaemon/AimeLogStatus.h"
12 #include "amdaemon/AimeId.h"
15 #include "amdaemon/AimeDef.h"
16 #include "amdaemon/RequestState.h"
18 
19 #include <functional>
20 #include <vector>
21 #include <cstddef>
22 
23 namespace amdaemon
24 {
25 /// @addtogroup g_aime
26 /// @{
27 
28  /// @brief Aime関連処理を提供するMonostateクラス。
29  ///
30  /// Core クラスのメンバ関数 Core#execute 呼び出しによって内容が更新される。
31  ///
32  /// @par ライブラリ利用アプリで実装すべきこと(Aime利用タイトルのみ)
33  /// - メンバ関数 #isFirmUpdating の戻り値が true の間はポーリング処理等を行えない。
34  /// 必要に応じてファームウェア更新処理中であることを示す画面表示を行うこと。
35  /// - メンバ関数 #getFirmUpdateProgress で更新処理の進捗率を取得できる。
36  /// - 戻り値が false になった後は、稼働中に再度 true になることはない。
37  ///
38  /// @par UID値読み取り手順
39  /// AimeUnit クラスの説明を参照すること。
40  ///
41  /// @ingroup g_common
42  class Aime
43  {
44  public:
45  // 下記は暗黙の定義を用いる。
46  //Aime() = default;
47  //Aime(const Aime&) = default;
48  //‾Aime() = default;
49  //Aime& operator=(const Aime&) = default;
50 
51  /// @brief Aime機能を利用可能であるか否かを取得する。
52  /// @retval true 利用可能である場合。
53  /// @retval false 機能が無効である場合。
54  ///
55  /// 条件式 (getUnitCount() > 0) の結果を返す。
56  bool isAvailable() const;
57 
58  /// @brief ファームウェア更新の実処理中であるか否かを取得する。
59  /// @retval true ファームウェア更新の実処理中である場合。
60  /// @retval false ファームウェア更新の実処理中ではない場合。
61  ///
62  /// Daemonプロセスによるファームウェア更新処理中であれば true を返す。
63  bool isFirmUpdating() const;
64 
65  /// @brief ファームウェア更新の進捗率を取得する。
66  /// @return ファームウェア更新の進捗率を表すパーセント値。
67  /// @see isFirmUpdating
68  ///
69  /// ファームウェア更新処理中ではない場合、この関数は不定値を返す。
70  /// Aimeリーダーユニットが複数接続されている場合、全体での進捗率を返す。
71  float getFirmUpdateProgress() const;
72 
73  /// @brief AimeDBサーバが生存しているか否かを取得する。
74  /// @retval true 生存している場合。
75  /// @retval false 生存が確認できない場合。
76  bool isDBAlive() const;
77 
78  /// @brief Aimeリーダーユニット数を取得する。
79  /// @return Aimeリーダーユニット数。
80  std::size_t getUnitCount() const;
81 
82  /// @brief Aimeリーダーユニットインスタンスを取得する。
83  /// @param[in] unitIndex ユニットインデックス。
84  /// @return Aimeリーダーユニットインスタンス。
85  ///
86  /// @exception Exception
87  /// 引数 unitIndex にユニット数以上の値を指定した場合。
88  /// ユニット数はメンバ関数 #getUnitCount で取得できる。
89  AimeUnit& getUnit(std::size_t unitIndex);
90 
91  /// @copydoc getUnit
92  const AimeUnit& getUnit(std::size_t unitIndex) const;
93 
94  /// @brief Aimeリーダーユニットインスタンス配列を取得する。
95  /// @return Aimeリーダーユニットインスタンス配列。
96  ///
97  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
98  ///
99  /// - ユニット数を知りたいだけならばメンバ関数 #getUnitCount を用いること。
100  /// - 特定ユニットを取得したいだけならばメンバ関数 #getUnit を用いること。
101  std::vector<std::reference_wrapper<AimeUnit>> getUnits()
102  {
103  return
104  ::amdaemon::util::toContainer<decltype(this->getUnits())>(
105  this->getUnitCount(),
106  [this](std::size_t i) -> AimeUnit& { return this->getUnit(i); });
107  }
108 
109  /// @copydoc getUnits
110  std::vector<std::reference_wrapper<const AimeUnit>> getUnits() const
111  {
112  return
113  ::amdaemon::util::toContainer<decltype(this->getUnits())>(
114  this->getUnitCount(),
115  [this](std::size_t i) -> const AimeUnit& { return this->getUnit(i); });
116  }
117 
118  /// @brief ログ送信開始を要求する。
119  /// @param[in] aimeId ログ送信対象のUID値。
120  /// @param[in] status ログステータス。
121  /// @return 要求状態値。
122  /// @see Sequence#beginPlay
123  ///
124  /// @exception Exception
125  /// - 引数 aimeId に無効なUID値を指定した場合。
126  /// - 引数 status に不正な値を指定した場合。
127  ///
128  /// プレイ開始、コンティニュー、プレイ終了と連動してログ送信を行いたい場合は
129  /// Sequence クラスのメンバ関数
130  /// Sequence#beginPlay でAimeのUID値を紐付けすることを推奨する。
131  /// それ以外のタイミングでログ送信を行いたい場合にこの関数を用いる。
132  ///
133  /// ビデオゲームでクレジットを消費してゲームを開始またはコンティニューした場合、
134  /// この関数ではなくメンバ関数
135  /// #sendLog(const AimeId&, AimeLogStatus, std::size_t, std::size_t)
136  /// を用いることを推奨する。
137  ///
138  /// この関数を連続して複数回呼び出した場合、要求は内部キューに蓄えられ、
139  /// 先に呼び出したものから逐次処理される。
140  RequestState sendLog(const AimeId& aimeId, AimeLogStatus status);
141 
142  /// @brief ログ送信開始を要求する。
143  /// @param[in] aimeId ログ送信対象のUID値。
144  /// @param[in] status ログステータス。
145  /// @param[in] gameCostIndex
146  /// 付随情報として送信する消費ゲームコストのゲームコスト設定インデックス。
147  /// 通常、 CreditUnit#payGameCost で引数 gameCostIndex に指定した値を用いる。
148  /// @param[in] gameCostCount
149  /// 付随情報として送信する消費ゲームコストのゲームコスト減算回数。
150  /// 通常、 CreditUnit#payGameCost で引数 count に指定した値を用いる。
151  /// @return 要求状態値。
152  /// @see Sequence#beginPlay
153  ///
154  /// @exception Exception
155  /// - 引数 aimeId に無効なUID値を指定した場合。
156  /// - 引数 status に不正な値を指定した場合。
157  /// - 引数 gameCostIndex に CreditConfig::MaxGameCostCount 以上の値を指定した場合。
158  /// - 引数 gameCostCount に 0 以下もしくは 99 より大きい値を指定した場合。
159  ///
160  /// プレイ開始、コンティニュー、プレイ終了と連動してログ送信を行いたい場合は
161  /// Sequence クラスのメンバ関数
162  /// Sequence#beginPlay でAimeのUID値を紐付けすることを推奨する。
163  /// それ以外のタイミングでログ送信を行いたい場合にこの関数を用いる。
164  ///
165  /// ビデオゲームでクレジットを消費してゲームを開始またはコンティニューした場合、
166  /// こちらのオーバロードを用いること。
167  ///
168  /// この関数を連続して複数回呼び出した場合、要求は内部キューに蓄えられ、
169  /// 先に呼び出したものから逐次処理される。
171  const AimeId& aimeId,
172  AimeLogStatus status,
173  std::size_t gameCostIndex,
174  std::size_t gameCostCount = 1);
175 
176  public:
177  // キャンペーン関連
178 
179  /// @brief キャンペーン情報の有効数を取得する。
180  /// @return キャンペーン情報の有効数。 0 以上 AimeCampaignCountLimit 以下。
181  std::size_t getCampaignInfoCount() const;
182 
183  /// @brief キャンペーン情報を取得する。
184  /// @param[in] index インデックス。
185  /// @return キャンペーン情報。
186  ///
187  /// @exception Exception
188  /// 引数 index に有効数以上の値を指定した場合。
189  /// 有効数はメンバ関数 #getCampaignInfoCount で取得できる。
190  ///
191  /// この情報はDaemonプロセスがバックグラウンドで定期的に更新する。
192  /// 更新タイミング次第では、終了済みのキャンペーン情報が返る可能性がある。
193  /// アプリ側で取得した情報の各種日時を確認して判断すること。
194  const AimeCampaignInfo& getCampaignInfo(std::size_t index) const;
195 
196  /// @brief キャンペーン情報配列を取得する。
197  /// @return キャンペーン情報配列。
198  ///
199  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
200  ///
201  /// - 有効数を知りたいだけならばメンバ関数 #getCampaignInfoCount を用いること。
202  /// - 特定の情報を取得したいだけならばメンバ関数 #getCampaignInfo を用いること。
203  std::vector<std::reference_wrapper<const AimeCampaignInfo>> getCampaignInfos() const
204  {
205  return
207  this->getCampaignInfoCount(),
208  [this](std::size_t i) -> const AimeCampaignInfo&
209  {
210  return this->getCampaignInfo(i);
211  });
212  }
213 
214  /// @brief UID値に紐付くキャンペーン進捗状況の受信を要求する。
215  /// @param[in] aimeId キャンペーン進捗状況受信対象のUID値。
216  /// @return 要求状態値。引数や状態が不正な場合は無効値。
217  ///
218  /// @exception Exception
219  /// 引数 aimeId に無効なUID値を指定した場合。
220  ///
221  /// この関数はUID値に紐付くキャンペーン進捗状況の受信要求のみを行う。
222  /// 実際の処理は、 Core クラスのメンバ関数 Core#execute 呼び出しによって行われる。
223  ///
224  /// この関数の戻り値である RequestState クラスのメンバ関数 RequestState#isDone が
225  /// true を返すようになれば処理完了済みであり、その際にメンバ関数
226  /// RequestState#isSucceeded が true を返すのであれば処理成功を表す。
227  ///
228  /// 処理成功後は、メンバ関数 #getCampaignProgressCount および #getCampaignProgress
229  /// によって受信した内容を参照できる。
230  ///
231  /// キャンペーン進捗状況は基本的にログ送信の内容に基づいて更新されるため、
232  /// ログ送信後にこの関数を呼び出して最新の進捗状況を得ることが望ましい。
233  ///
234  /// この関数を連続して複数回呼び出した場合、要求は内部キューに蓄えられ、
235  /// 先に呼び出したものから逐次処理される。
237 
238  /// @brief 直近で受信完了したキャンペーン進捗状況の有効数を取得する。
239  /// @param[in] aimeId 対象UID値。
240  /// @return キャンペーン進捗状況の有効数。 0 以上 AimeCampaignCountLimit 以下。
241  ///
242  /// @exception Exception
243  /// 引数 aimeId に無効なUID値を指定した場合。
244  ///
245  /// 対象UID値についてメンバ関数 #requestCampaignProgress を呼び出すと、
246  /// その時点でライブラリ内のデータが初期化され、この関数は 0 を返すようになる。
247  /// その後、受信が正常に完了すると再び有効な値を返すようになる。
248  ///
249  /// 当ライブラリ内では直近 8 ユーザ分だけ情報を保持している。
250  /// 保持限界を超える進捗状況の受信を行った場合、古い受信データから順に破棄され、
251  /// この関数は 0 を返すようになる。
252  std::size_t getCampaignProgressCount(const AimeId& aimeId) const;
253 
254  /// @brief 直近で受信完了したキャンペーン進捗状況を取得する。
255  /// @param[in] aimeId 対象UID値。
256  /// @param[in] index インデックス。
257  /// @return キャンペーン進捗状況。
258  ///
259  /// @exception Exception
260  /// - 引数 aimeId に無効なUID値を指定した場合。
261  /// - 引数 index に有効数以上の値を指定した場合。
262  /// 有効数はメンバ関数 #getCampaignProgressCount で取得できる。
263  ///
264  /// 当ライブラリ内では直近 8 ユーザ分だけ情報を保持している。
265  /// 保持限界を超える進捗状況の受信を行った場合、古い受信データから順に破棄され、
266  /// この関数から取得した参照は無効となる。
267  ///
268  /// 情報を長期間に渡って参照したい場合、参照の保持ではなく値のコピーを行うこと。
270  const AimeId& aimeId,
271  std::size_t index) const;
272 
273  /// @brief 直近で受信完了したキャンペーン進捗状況配列を取得する。
274  /// @param[in] aimeId 対象UID値。
275  /// @return キャンペーン進捗状況配列。
276  ///
277  /// @exception Exception
278  /// 引数 aimeId に無効なUID値を指定した場合。
279  ///
280  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
281  ///
282  /// - 有効数を知りたいだけならばメンバ関数 #getCampaignProgressCount を用いること。
283  /// - 特定の進捗状況を取得したいだけならばメンバ関数 #getCampaignProgress を用いること。
284  std::vector<std::reference_wrapper<const AimeCampaignProgress>>
285  getCampaignProgresses(const AimeId& aimeId) const
286  {
287  return
289  this->getCampaignProgressCount(aimeId),
290  [aimeId, this](std::size_t i) -> const AimeCampaignProgress&
291  {
292  return this->getCampaignProgress(aimeId, i);
293  });
294  }
295  };
296 
297 /// @}
298 } // namespace amdaemon
299 
300 #endif // AMDAEMON_AIME_H
std::vector< std::reference_wrapper< const AimeCampaignInfo > > getCampaignInfos() const
キャンペーン情報配列を取得する。
Definition: Aime.h:203
const AimeCampaignInfo & getCampaignInfo(std::size_t index) const
キャンペーン情報を取得する。
RequestState sendLog(const AimeId &aimeId, AimeLogStatus status)
ログ送信開始を要求する。
AimeのUID値を保持する構造体。
Definition: AimeId.h:27
Aime関連の情報を定義するヘッダ。
std::vector< std::reference_wrapper< AimeUnit > > getUnits()
Aimeリーダーユニットインスタンス配列を取得する。
Definition: Aime.h:101
Aimeキャンペーンの進捗状況を保持する構造体。
Definition: AimeCampaignProgress.h:22
Aimeキャンペーンの進捗状況を保持する構造体 AimeCampaignProgress のヘッダ。
Daemonプロセスへの処理要求状態を保持するクラス。
Definition: RequestState.h:37
std::vector< std::reference_wrapper< const AimeCampaignProgress > > getCampaignProgresses(const AimeId &aimeId) const
直近で受信完了したキャンペーン進捗状況配列を取得する。
Definition: Aime.h:285
AimeのUID値を保持する構造体 AimeId のヘッダ。
Daemonライブラリの環境定義を行うヘッダ。
bool isFirmUpdating() const
ファームウェア更新の実処理中であるか否かを取得する。
AimeLogStatus
Aimeログステータス列挙。
Definition: AimeLogStatus.h:17
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
Daemonプロセスへの処理要求状態を保持するクラス RequestState のヘッダ。
RequestState requestCampaignProgress(const AimeId &aimeId)
UID値に紐付くキャンペーン進捗状況の受信を要求する。
float getFirmUpdateProgress() const
ファームウェア更新の進捗率を取得する。
DestContainer toContainer(SrcContainer &&src)
コンテナを別のコンテナ型に変換する。
Definition: container.h:133
Aimeログステータス列挙 AimeLogStatus のヘッダ。
std::size_t getUnitCount() const
Aimeリーダーユニット数を取得する。
コンテナクラス関連の便利処理を提供するヘッダ。
bool isAvailable() const
Aime機能を利用可能であるか否かを取得する。
Aime関連処理を提供するMonostateクラス。
Definition: Aime.h:42
Aimeリーダー単体の処理を提供するクラス AimeUnit のヘッダ。
std::vector< std::reference_wrapper< const AimeUnit > > getUnits() const
Aimeリーダーユニットインスタンス配列を取得する。
Definition: Aime.h:110
std::size_t getCampaignProgressCount(const AimeId &aimeId) const
直近で受信完了したキャンペーン進捗状況の有効数を取得する。
std::size_t getCampaignInfoCount() const
キャンペーン情報の有効数を取得する。
bool isDBAlive() const
AimeDBサーバが生存しているか否かを取得する。
const AimeCampaignProgress & getCampaignProgress(const AimeId &aimeId, std::size_t index) const
直近で受信完了したキャンペーン進捗状況を取得する。
Aimeキャンペーン情報を保持する構造体。
Definition: AimeCampaignInfo.h:23
Aimeキャンペーン情報を保持する構造体 AimeCampaignInfo のヘッダ。
AimeUnit & getUnit(std::size_t unitIndex)
Aimeリーダーユニットインスタンスを取得する。
Aimeリーダー単体の処理を提供するクラス。
Definition: AimeUnit.h:103