AM Daemon ライブラリリファレンス
AccountingUnit.h
[詳解]
1 /// @file
2 /// @brief プレイヤー単位のALL.Net課金処理を提供するクラス AccountingUnit のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_ALLNET_ACCOUNTINGUNIT_H
7 #define AMDAEMON_ALLNET_ACCOUNTINGUNIT_H
8 
9 #include "amdaemon/env.h"
11 
12 #include <cstdint>
13 #include <cstddef>
14 
15 // 内部クラスの前方宣言
16 namespace amdaemon { class InnerIndexHolder; }
17 
18 namespace amdaemon
19 {
20 namespace allnet
21 {
22 /// @addtogroup g_allnet
23 /// @{
24 
25  /// @brief プレイヤー単位のALL.Net課金処理を提供するクラス。
26  /// @see Accounting, Player
27  ///
28  /// このクラスのインスタンスをアプリ側で直接生成することはできない。
29  /// Accounting クラスのメンバ関数 Accounting#getPlayer から取得すること。
30  ///
31  /// @ingroup g_player
33  {
34  public:
35  /// @brief 種別コードの最大許容値を取得する。
36  /// @return 種別コードの最大許容値。固定値 654 。
37  static std::uint32_t getKindCodeLimit();
38 
39  /// @brief 状態コードの最大許容値を取得する。
40  /// @return 状態コードの最大許容値。固定値 99 。
41  static std::uint32_t getStatusCodeLimit();
42 
43  /// @brief 商品数の最大許容値を取得する。
44  /// @return 商品数の最大許容値。固定値 255 。
45  static std::uint32_t getItemCountLimit();
46 
47  /// @brief 数量値の最大許容値を取得する。
48  /// @return 数量値の最大許容値。固定値 7679 。
49  static std::uint32_t getQuantityLimit();
50 
51  /// @brief 数列値の最大文字数を取得する。
52  /// @return 数列値の最大文字数。少なくとも 127 以上の固定値。
53  static std::size_t getMaxGeneralIdLength();
54 
55  public:
56  /// @brief コンストラクタ。
57  /// @note アプリ側からは利用できない。
58  explicit AccountingUnit(::amdaemon::InnerIndexHolder);
59 
60  // 下記は暗黙の定義を用いる。
61  //‾AccountingUnit() = default;
62 
63  /// @brief 課金プレイを開始可能な状態であるか否かを取得する。
64  /// @retval true 開始可能である場合。
65  /// @retval false 開始不可能である場合。
66  /// @see Accounting#isPlayable
67  ///
68  /// Accounting#isPlayable と同じ値を返す。
69  ///
70  /// この関数が true を返す場合であっても、
71  /// メンバ関数 #beginPlay の呼び出しが必ず成功するとは限らない。
72  bool canBeginPlay() const;
73 
74  /// @brief 課金プレイを開始する。
75  /// @param[in] kindCode 種別コード。 0 以上 654 以下。
76  /// @param[in] statusCode 状態コード。 0 以上 99 以下。
77  /// @return 識別ハンドル値。開始できなかった場合は無効なハンドル値。
78  /// @see Sequence#beginPlay, Sequence#continuePlay, Sequence#endPlay
79  ///
80  /// @exception Exception
81  /// - 引数 kindCode に 654 より大きい値を指定した場合。
82  /// - 引数 statusCode に 99 より大きい値を指定した場合。
83  ///
84  /// プレイ開始、コンティニュー、プレイ終了と連動して課金プレイを開始したい場合は
85  /// Sequence クラスのプレイ状態変更関連メンバ関数を用いることを推奨する。
86  /// それ以外のタイミングで課金プレイを開始したい場合にこの関数を用いる。
87  ///
88  /// メンバ関数 #canBeginPlay が false を返す場合は何もせずに無効なハンドル値を返す。
89  ///
90  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
91  AccountingHandle beginPlay(std::uint32_t kindCode, std::uint32_t statusCode);
92 
93  /// @brief 課金プレイを終了する。
94  /// @param[in] handle
95  /// 識別ハンドル値。メンバ関数 beginPlay や continuePlay から受け取った値。
96  /// @param[in] kindCode 種別コード。 0 以上 654 以下。
97  /// @param[in] statusCode 状態コード。 0 以上 99 以下。
98  /// @param[in] itemCount 商品数。 0 以上 255 以下。 0 ならば課金しない。
99  /// @retval true 終了できた場合。
100  /// @retval false 終了できなかったか、開始していない場合。
101  /// @see Sequence#beginPlay, Sequence#continuePlay, Sequence#endPlay
102  ///
103  /// @exception Exception
104  /// - 引数 handle に無効なハンドル値を指定した場合。
105  /// - 引数 kindCode に 654 より大きい値を指定した場合。
106  /// - 引数 statusCode に 99 より大きい値を指定した場合。
107  /// - 引数 itemCount に 255 より大きい値を指定した場合。
108  ///
109  /// メンバ関数 #beginPlay で開始した課金プレイを終了させる場合に用いる。
110  /// Sequence クラスのプレイ状態変更関連メンバ関数を用いて開始した課金プレイを
111  /// この関数で終了させることはできない。
112  ///
113  /// 通常、引数 itemCount には課金するならば 1 、しないならば 0 を指定する。
114  /// ただしタイトルによっては 2 以上の値を指定する場合もある。
115  /// 詳しくはALL.Net技術情報サイトの「課金ログ定義ガイドライン」等を参照すること。
116  ///
117  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
118  bool endPlay(
119  AccountingHandle handle,
120  std::uint32_t kindCode,
121  std::uint32_t statusCode,
122  std::uint32_t itemCount);
123 
124  /// @brief 課金プレイを一旦終了し、新たに開始する。
125  /// @param[in] prevHandle
126  /// 終了用の識別ハンドル値。
127  /// メンバ関数 beginPlay や continuePlay から受け取った値。
128  /// @param[in] prevKindCode 終了用の種別コード。 0 以上 654 以下。
129  /// @param[in] prevStatusCode 終了用の状態コード。 0 以上 99 以下。
130  /// @param[in] prevItemCount 終了用の商品数。 0 以上 255 以下。 0 ならば課金しない。
131  /// @param[in] nextKindCode 新規開始用の種別コード。 0 以上 654 以下。
132  /// @param[in] nextStatusCode 新規開始用の状態コード。 0 以上 99 以下。
133  /// @return 新たな識別ハンドル値。開始できなかった場合は無効なハンドル値。
134  /// @see Sequence#continuePlay
135  ///
136  /// @exception Exception
137  /// - 引数 prevHandle に無効なハンドル値を指定した場合。
138  /// - 引数 prevKindCode に 654 より大きい値を指定した場合。
139  /// - 引数 prevStatusCode に 99 より大きい値を指定した場合。
140  /// - 引数 prevItemCount に 255 より大きい値を指定した場合。
141  /// - 引数 nextKindCode に 654 より大きい値を指定した場合。
142  /// - 引数 nextStatusCode に 99 より大きい値を指定した場合。
143  ///
144  /// コンティニューと連動して課金プレイを新たに開始したい場合は
145  /// Sequence クラスのメンバ関数 Sequence#continuePlay を用いることを推奨する。
146  /// それ以外のタイミングで課金プレイを新たに開始したい場合にこの関数を用いる。
147  ///
148  /// メンバ関数 #endPlay と #beginPlay を続けて呼び出すこととほぼ同義だが、
149  /// そちらの場合と異なり、課金プレイの終了直後に締め処理が走ってしまうことがない。
150  /// そのため安全に課金プレイを新規開始することができる。
151  ///
152  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
154  AccountingHandle prevHandle,
155  std::uint32_t prevKindCode,
156  std::uint32_t prevStatusCode,
157  std::uint32_t prevItemCount,
158  std::uint32_t nextKindCode,
159  std::uint32_t nextStatusCode);
160 
161  /// @brief 単発課金を行う。
162  /// @param[in] kindCode 種別コード。 0 以上 654 以下。
163  /// @param[in] statusCode 状態コード。 0 以上 99 以下。
164  /// @param[in] itemCount 商品数。 0 以上 255 以下。
165  /// @retval true 課金できた場合。
166  /// @retval false 課金できなかった場合。
167  ///
168  /// @exception Exception
169  /// - 引数 kindCode に 654 より大きい値を指定した場合。
170  /// - 引数 statusCode に 99 より大きい値を指定した場合。
171  /// - 引数 itemCount に 255 より大きい値を指定した場合。
172  ///
173  /// 課金プレイ中でなければ課金できない。
174  ///
175  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
176  bool accountItem(
177  std::uint32_t kindCode,
178  std::uint32_t statusCode,
179  std::uint32_t itemCount);
180 
181  /// @brief 数量値を保存する。
182  /// @param[in] kindCode 種別コード。 0 以上 654 以下。
183  /// @param[in] quantity 数量値。 0 以上 7679 以下。
184  /// @retval true 保存できた場合。
185  /// @retval false 保存できなかった場合。
186  ///
187  /// @exception Exception
188  /// - 引数 kindCode に 654 より大きい値を指定した場合。
189  /// - 引数 quantity に 7679 より大きい値を指定した場合。
190  ///
191  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
192  bool putQuantity(std::uint32_t kindCode, std::uint32_t quantity);
193 
194  /// @brief 数列値を保存する。
195  /// @param[in] kindCode 種別コード。 0 以上 654 以下。
196  /// @param[in] generalId 数列値。 '0' 〜 '9' で構成される文字列。
197  /// @retval true 保存できた場合。
198  /// @retval false 保存できなかった場合。
199  ///
200  /// @exception Exception
201  /// - 引数 kindCode に 654 より大きい値を指定した場合。
202  /// - 引数 generalId に nullptr を指定した場合。
203  /// - 引数 generalId に空文字列を指定した場合。
204  /// - 引数 generalId の文字数が最大文字数より多い場合。
205  /// 最大文字数は静的メンバ関数 #getMaxGeneralIdLength で取得できる。
206  /// - 引数 generalId に '0' 〜 '9' 以外の文字が含まれている場合。
207  ///
208  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
209  bool putGeneralId(std::uint32_t kindCode, const wchar_t* generalId);
210 
211  private:
212  std::size_t _playerIndex; ///< プレイヤーインデックス。
213 
214  private:
215  // コピー禁止
216  AccountingUnit(const AccountingUnit&); // 宣言のみ
217  AccountingUnit& operator=(const AccountingUnit&); // 宣言のみ
218  };
219 
220 /// @}
221 } // namespace allnet
222 } // namespace amdaemon
223 
224 #endif // AMDAEMON_ALLNET_ACCOUNTINGUNIT_H
bool endPlay(AccountingHandle handle, std::uint32_t kindCode, std::uint32_t statusCode, std::uint32_t itemCount)
課金プレイを終了する。
static std::uint32_t getQuantityLimit()
数量値の最大許容値を取得する。
bool canBeginPlay() const
課金プレイを開始可能な状態であるか否かを取得する。
bool putGeneralId(std::uint32_t kindCode, const wchar_t *generalId)
数列値を保存する。
ALL.Net課金プレイを識別するためのハンドル構造体 AccountingHandle のヘッダ。
Daemonライブラリの環境定義を行うヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
AccountingHandle continuePlay(AccountingHandle prevHandle, std::uint32_t prevKindCode, std::uint32_t prevStatusCode, std::uint32_t prevItemCount, std::uint32_t nextKindCode, std::uint32_t nextStatusCode)
課金プレイを一旦終了し、新たに開始する。
AccountingUnit(::amdaemon::InnerIndexHolder)
コンストラクタ。
AccountingHandle beginPlay(std::uint32_t kindCode, std::uint32_t statusCode)
課金プレイを開始する。
ALL.Net課金プレイを識別するためのハンドル構造体。
Definition: AccountingHandle.h:27
bool accountItem(std::uint32_t kindCode, std::uint32_t statusCode, std::uint32_t itemCount)
単発課金を行う。
static std::uint32_t getStatusCodeLimit()
状態コードの最大許容値を取得する。
static std::uint32_t getItemCountLimit()
商品数の最大許容値を取得する。
static std::size_t getMaxGeneralIdLength()
数列値の最大文字数を取得する。
static std::uint32_t getKindCodeLimit()
種別コードの最大許容値を取得する。
プレイヤー単位のALL.Net課金処理を提供するクラス。
Definition: AccountingUnit.h:32
bool putQuantity(std::uint32_t kindCode, std::uint32_t quantity)
数量値を保存する。