AM Daemon ライブラリリファレンス
Accounting.h
[詳解]
1 /// @file
2 /// @brief ALL.Net課金処理を提供するMonostateクラス Accounting のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_ALLNET_ACCOUNTING_H
7 #define AMDAEMON_ALLNET_ACCOUNTING_H
8 
9 #include "amdaemon/env.h"
14 #include "amdaemon/util/TimeSpan.h"
15 #include "amdaemon/util/DateTime.h"
17 
18 #include <functional>
19 #include <vector>
20 #include <cstddef>
21 
22 namespace amdaemon
23 {
24 namespace allnet
25 {
26 /// @addtogroup g_allnet
27 /// @{
28 
29  /// @brief ALL.Net課金処理を提供するMonostateクラス。
30  ///
31  /// Core クラスのメンバ関数 Core#execute 呼び出しによって内容が更新される。
32  ///
33  /// @ingroup g_common
34  class Accounting
35  {
36  public:
37  // 下記は暗黙の定義を用いる。
38  //Accounting() = default;
39  //‾Accounting() = default;
40  //Accounting(const Accounting&) = default;
41  //Accounting& operator=(const Accounting&) = default;
42 
43  /// @brief ALL.Net課金機能を利用可能であるか否かを取得する。
44  /// @retval true 利用可能である場合。
45  /// @retval false 機能が無効である場合。
46  ///
47  /// 条件式 (getMode() != AccountingMode::None) の結果を返す。
48  ///
49  /// Daemonプロセスの設定ファイルでALL.Net課金設定を有効にしている場合であっても、
50  /// キーチップのALL.Net課金フラグが無効である場合は false を返す。
51  bool isAvailable() const;
52 
53  /// @brief 課金モードを取得する。
54  /// @return 課金モード。課金機能が無効である場合は AccountingMode::None 。
55  ///
56  /// 通常はDaemonプロセスの設定ファイルで指定した課金モードを返す。
57  /// ただしキーチップのALL.Net課金フラグが無効である場合は AccountingMode::None を返す。
58  AccountingMode getMode() const;
59 
60  /// @brief 課金プレイ可能な状態であるか否かを取得する。
61  /// @retval true 課金プレイ可能な状態である場合。
62  /// @retval false 課金プレイ不可能な状態である場合。
63  ///
64  /// 下記のいずれかであれば false を返す。
65  ///
66  /// - 課金機能が無効である場合。
67  /// - 初回締め処理が完了していない場合。
68  /// - 初回/定時締め処理中である場合。
69  /// - 課金モードB1であり、かつALL.Net認証に成功していない場合。
70  /// - ALL.Net関連の進行停止エラーが発生している場合。
71  bool isPlayable() const;
72 
73  /// @brief 初回/定時締め処理中であるか否かを取得する。
74  /// @retval true 初回/定時締め処理中である場合。
75  /// @retval false 初回/定時締め処理中ではないか、課金機能が無効である場合。
76  ///
77  /// 条件式 getSpanUntilReport().isZero() の結果を返す。
78  bool isReporting() const
79  {
80  return this->getSpanUntilReport().isZero();
81  }
82 
83  /// @brief 次回の定時締め処理までの残り時間を取得する。
84  /// @return 次回の定時締め処理までの残り時間。
85  ///
86  /// 初回/定時締め処理中ならば util::TimeSpan::zero() を返す。
87  ///
88  /// 課金機能が無効である場合等、現在の状態では初回/定時締め処理を行えない場合は
89  /// util::TimeSpan::max() を返す。
90  const ::amdaemon::util::TimeSpan& getSpanUntilReport() const;
91 
92  /// @brief 課金プレイ回数集計アイテムを取得する。
93  /// @param[in] month 集計月種別。
94  /// @return 課金プレイ回数集計アイテム。
95  ///
96  /// @exception Exception
97  /// 引数 month に不正な値を指定した場合。
98  ///
99  /// まだ課金サーバに情報が登録されていない場合等には無効な情報を返す。
100  /// 取得した値のメンバ関数 AccountingPlayCountItem#valid によって
101  /// 情報が有効であるか否かを調べることができる。
102  ///
103  /// 稼働開始から2カ月以下の場合であっても、
104  /// 今月の情報が有効であるならば先月および先々月の情報も有効となる。
105  /// その際、先月および先々月の課金プレイ回数は 0 となっている。
106  /// アプリ側では、取得した情報をそのまま表示してしまって構わない。
108  AccountingPlayCountMonth month) const;
109 
110  /// @brief 直近の初回/定時締め処理成功日時を取得する。
111  /// @return
112  /// 直近の初回/定時締め処理成功日時。
113  /// 情報が存在しない場合や課金機能が無効である場合は util::DateTime::min() 。
114  const ::amdaemon::util::DateTime& getReportTime() const;
115 
116  /// @brief 直近の日中締め処理成功日時を取得する。
117  /// @return
118  /// 直近の日中締め処理成功日時。
119  /// 情報が存在しない場合や課金機能が無効である場合は util::DateTime::min() 。
120  const ::amdaemon::util::DateTime& getBackgroundReportTime() const;
121 
122  /// @brief ログフル状態であるか否かを取得する。
123  /// @retval true ログフル状態である場合。
124  /// @retval false ログフル状態ではないか、課金機能が無効である場合。
125  bool isLogFull() const;
126 
127  /// @brief ニアフル警告チェックを行うか否かを取得する。
128  /// @retval true チェックを行う場合。
129  /// @retval false チェックを行わないか、課金機能が無効である場合。
130  bool isNearFullEnabled() const;
131 
132  /// @brief ニアフル警告チェックを行うか否かを設定する。
133  /// @param[in] enabled 行うならば true 。行わないならば false 。
134  /// @retval true 設定変更できた場合。
135  /// @retval false 設定変更できなかったか、課金機能が無効である場合。
136  ///
137  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
138  bool setNearFullEnabled(bool enabled);
139 
140  /// @brief 課金処理対象となるプレイヤー数を取得する。
141  /// @return 課金処理対象となるプレイヤー数。課金機能が無効ならば 0 。
142  /// @see Core#getPlayerCount
143  ///
144  /// 課金機能が有効ならば、 Core#getPlayerCount と同じ値を返す。
145  std::size_t getPlayerCount() const;
146 
147  /// @brief プレイヤーの課金処理インスタンスを取得する。
148  /// @param[in] playerIndex プレイヤーインデックス。
149  /// @return プレイヤーの課金処理インスタンス。
150  /// @see Player
151  ///
152  /// @exception Exception
153  /// - 課金機能が無効である場合。
154  /// - 引数 playerIndex にプレイヤー数以上の値を指定した場合。
155  /// プレイヤー数はメンバ関数 #getPlayerCount で取得できる。
156  AccountingUnit& getPlayer(std::size_t playerIndex);
157 
158  /// @copydoc getPlayer
159  const AccountingUnit& getPlayer(std::size_t playerIndex) const;
160 
161  /// @brief プレイヤーの課金処理インスタンス配列を取得する。
162  /// @return プレイヤーの課金処理インスタンス配列。
163  ///
164  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
165  ///
166  /// - プレイヤー数を知りたいだけならばメンバ関数 #getPlayerCount を用いること。
167  /// - 特定プレイヤーの課金処理インスタンスを取得したいだけならばメンバ関数
168  /// #getPlayer を用いること。
169  std::vector<std::reference_wrapper<AccountingUnit>> getPlayers()
170  {
171  return
172  ::amdaemon::util::toContainer<decltype(this->getPlayers())>(
173  this->getPlayerCount(),
174  [this](std::size_t i) -> AccountingUnit& { return this->getPlayer(i); });
175  }
176 
177  /// @copydoc getPlayers
178  std::vector<std::reference_wrapper<const AccountingUnit>>
179  getPlayers() const
180  {
181  return
182  ::amdaemon::util::toContainer<decltype(this->getPlayers())>(
183  this->getPlayerCount(),
184  [this](std::size_t i) -> const AccountingUnit&
185  {
186  return this->getPlayer(i);
187  });
188  }
189  };
190 
191 /// @}
192 } // namespace allnet
193 } // namespace amdaemon
194 
195 #endif // AMDAEMON_ALLNET_ACCOUNTING_H
std::vector< std::reference_wrapper< const AccountingUnit > > getPlayers() const
プレイヤーの課金処理インスタンス配列を取得する。
Definition: Accounting.h:179
bool isLogFull() const
ログフル状態であるか否かを取得する。
const ::amdaemon::util::TimeSpan & getSpanUntilReport() const
次回の定時締め処理までの残り時間を取得する。
ALL.Net課金プレイ回数集計アイテム構造体。
Definition: AccountingPlayCountItem.h:26
bool isNearFullEnabled() const
ニアフル警告チェックを行うか否かを取得する。
AccountingUnit & getPlayer(std::size_t playerIndex)
プレイヤーの課金処理インスタンスを取得する。
Daemonライブラリの環境定義を行うヘッダ。
ALL.Net課金モード列挙 AccountingMode のヘッダ。
AccountingPlayCountMonth
ALL.Net課金プレイ回数集計月種別列挙。
Definition: AccountingPlayCountMonth.h:19
bool isPlayable() const
課金プレイ可能な状態であるか否かを取得する。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
const AccountingPlayCountItem & getPlayCountItem(AccountingPlayCountMonth month) const
課金プレイ回数集計アイテムを取得する。
ALL.Net課金プレイ回数集計アイテム構造体 AccountingPlayCountItem のヘッダ。
プレイヤー単位のALL.Net課金処理を提供するクラス AccountingUnit のヘッダ。
std::vector< std::reference_wrapper< AccountingUnit > > getPlayers()
プレイヤーの課金処理インスタンス配列を取得する。
Definition: Accounting.h:169
DestContainer toContainer(SrcContainer &&src)
コンテナを別のコンテナ型に変換する。
Definition: container.h:133
コンテナクラス関連の便利処理を提供するヘッダ。
const ::amdaemon::util::DateTime & getBackgroundReportTime() const
直近の日中締め処理成功日時を取得する。
AccountingMode getMode() const
課金モードを取得する。
マイクロ秒精度の日付時刻を表す構造体 DateTime のヘッダ。
const ::amdaemon::util::DateTime & getReportTime() const
直近の初回/定時締め処理成功日時を取得する。
bool isReporting() const
初回/定時締め処理中であるか否かを取得する。
Definition: Accounting.h:78
bool isAvailable() const
ALL.Net課金機能を利用可能であるか否かを取得する。
std::size_t getPlayerCount() const
課金処理対象となるプレイヤー数を取得する。
ALL.Net課金処理を提供するMonostateクラス。
Definition: Accounting.h:34
bool isZero() const
ゼロ値であるか否かを取得する。
Definition: TimeSpan.h:442
マイクロ秒精度の時間間隔を表す構造体 TimeSpan のヘッダ。
プレイヤー単位のALL.Net課金処理を提供するクラス。
Definition: AccountingUnit.h:32
ALL.Net課金プレイ回数集計月種別列挙 AccountingPlayCountMonth のヘッダ。
bool setNearFullEnabled(bool enabled)
ニアフル警告チェックを行うか否かを設定する。
AccountingMode
ALL.Net課金モード列挙。
Definition: AccountingMode.h:19