AM Daemon ライブラリリファレンス
EMoney.h
[詳解]
1 /// @file
2 /// @brief 電子マネー処理を提供するMonostateクラス EMoney のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_EMONEY_H
7 #define AMDAEMON_EMONEY_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/EMoneyBrand.h"
11 #include "amdaemon/EMoneySound.h"
13 #include "amdaemon/EMoneyResult.h"
14 #include "amdaemon/EMoneyReport.h"
15 #include "amdaemon/EMoneyDef.h"
17 
18 #include <functional>
19 #include <vector>
20 #include <cstdint>
21 #include <cstddef>
22 
23 namespace amdaemon
24 {
25 /// @addtogroup g_emoney
26 /// @{
27 
28  /// @brief 電子マネー処理を提供するMonostateクラス。
29  ///
30  /// Core クラスのメンバ関数 Core#execute 呼び出しによって内容が更新される。
31  ///
32  /// @par プラットフォーム情報
33  /// - ALLSシリーズの電子マネー対応版SDKでのみ利用可能である。
34  /// - 上記以外の場合、常にサービスサーバ非生存かつ各種項目数 0 として扱われる。
35  ///
36  /// @ingroup g_common
37  class EMoney
38  {
39  public:
40  // 下記は暗黙の定義を用いる。
41  //EMoney() = default;
42  //‾EMoney() = default;
43  //EMoney(const EMoney&) = default;
44  //EMoney& operator=(const EMoney&) = default;
45 
46  /// @brief 電子マネー機能を利用可能であるか否かを取得する。
47  /// @retval true 利用可能である場合。
48  /// @retval false 機能が無効である場合。
49  bool isAvailable() const;
50 
51  /// @brief サウンドフック関数を設定する。
52  /// @param[in] hook フック関数。
53  /// @see EMoneySound
54  ///
55  /// この関数でフック関数(コールバック)を設定すると、
56  /// 電子マネー用のサウンドを処理すべきタイミングでこのフック関数が呼び出される。
57  ///
58  /// 電子マネー用のサウンドは必ず処理しなければならないため、
59  /// 必ずこの関数にフック関数を登録し、サウンド再生/停止処理を実施すること。
60  ///
61  /// フック関数の第1引数にはサウンド情報が渡される。
62  ///
63  /// - メンバ関数 EMoneySound#isStopRequired が false を返す場合、
64  /// メンバ関数 EMoneySound#getId や EMoneySound#getFilePath を基に、
65  /// 対応するサウンドの再生処理を開始すること。
66  /// - メンバ関数 EMoneySound#isStopRequired が true を返す場合、
67  /// 電子マネー関連サウンドを再生中であればそれを即座に停止すること。
68  ///
69  /// EMoneySound クラスはコピー可能であるため、必要に応じてコピーしてもよい。
70  ///
71  /// フック関数未設定である場合、設定されるまでフック処理が保留される。
72  ///
73  /// サウンド再生に関しては、 EMoneySound クラスの説明も参照すること。
74  void setSoundHook(std::function<void (const EMoneySound&)> hook);
75 
76  /// @brief サウンドフック関数を解除し、未設定状態に戻す。
77  /// @see #setSoundHook
78  ///
79  /// フック関数未設定である場合、設定されるまでフック関数呼び出しが保留される。
80  void resetSoundHook();
81 
82  /// @brief サービスサーバが生存しているか否かを取得する。
83  /// @retval true 生存している場合。
84  /// @retval false 生存が確認できないか、電子マネー機能が無効である場合。
85  ///
86  /// メンバ関数 #isAuthCompleted が false を返す場合、疎通確認を行えないため、
87  /// 実際のサービスサーバ生存状態に関わらずこの関数は false を返す。
88  bool isServiceAlive() const;
89 
90  /// @brief 端末認証を実施済みであるか否かを取得する。
91  /// @return true 実施済みである場合。
92  /// @return false 未実施であるか、電子マネー機能が無効である場合。
93  /// @see EMoneyOperation#authTerminal
94  bool isAuthCompleted() const;
95 
96  /// @brief 端末ID値を取得する。
97  /// @return 端末ID値。端末認証未実施の場合は nullptr 。
98  ///
99  /// 最大文字数は amdaemon::MaxEMoneyTerminalIdLength 。終端文字を含まない。
100  const wchar_t* getTerminalId() const;
101 
102  /// @brief 端末シリアル値を取得する。
103  /// @return 端末シリアル値。端末認証未実施の場合は nullptr 。
104  ///
105  /// 最大文字数は amdaemon::MaxEMoneyTerminalSerialLength 。終端文字を含まない。
106  const wchar_t* getTerminalSerial() const;
107 
108  /// @brief ブランドが有効であるか否かを取得する。
109  /// @param[in] brandId ブランドID。
110  /// @retval true 有効である場合。
111  /// @retval false 無効である場合。
112  ///
113  /// 無効なブランドに対して残高照会や支払といった操作を行うことはできない。
114  bool isBrandAvailable(EMoneyBrandId brandId) const;
115 
116  /// @brief 有効ブランド数を取得する。
117  /// @return
118  /// 有効ブランド数。
119  /// サービスサーバーの生存が確認できない場合や、端末認証未実施の場合は 0 。
120  std::size_t getAvailableBrandCount() const;
121 
122  /// @brief 有効ブランド情報を取得する。
123  /// @param[in] index 有効ブランドのインデックス。
124  /// @return 有効ブランド情報。
125  ///
126  /// @exception Exception
127  /// - 電子マネー機能が無効である場合。
128  /// - 引数 index に有効ブランド数以上の値を指定した場合。
129  /// 有効ブランド数はメンバ関数 #getAvailableBrandCount で取得できる。
130  ///
131  /// この関数で取得できるブランド情報は、表示優先順に並んでいる。
132  /// アプリでブランド選択画面を表示する際は、
133  /// この関数のインデックス順に従ってアイコン画像を並べること。
134  const EMoneyBrand& getAvailableBrand(std::size_t index) const;
135 
136  /// @brief 有効ブランド情報配列を取得する。
137  /// @return 有効ブランド情報配列。
138  ///
139  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
140  ///
141  /// - 有効ブランド数を知りたいだけならばメンバ関数
142  /// #getAvailableBrandCount を用いること。
143  /// - 特定の有効ブランド情報を取得したいだけならばメンバ関数
144  /// #getAvailableBrand を用いること。
145  std::vector<std::reference_wrapper<const EMoneyBrand>> getAvailableBrands() const
146  {
147  return
149  this->getAvailableBrandCount(),
150  [this](std::size_t i) -> const EMoneyBrand&
151  {
152  return this->getAvailableBrand(i);
153  });
154  }
155 
156  /// @brief 通信操作インスタンスを取得する。
157  /// @return 通信操作インスタンス。
159 
160  /// @copydoc getOperation()
161  const EMoneyOperation& getOperation() const;
162 
163  /// @brief 取引結果履歴の有効項目数を取得する。
164  /// @return
165  /// 取引結果履歴の有効項目数。最大値は amdaemon::MaxEMoneyDealResultCount 。
166  /// 電子マネー機能が無効である場合は 0 。
167  std::size_t getDealResultCount() const;
168 
169  /// @brief 取引結果履歴の項目を取得する。
170  /// @param[in] index 取引結果履歴インデックス。
171  /// @return 取引結果履歴項目。
172  ///
173  /// @exception Exception
174  /// - 電子マネー機能が無効である場合。
175  /// - 引数 index に有効項目数以上の値を指定した場合。
176  /// 有効項目数はメンバ関数 #getDealResultCount で取得できる。
177  ///
178  /// インデックスの小さい要素ほど取引日時が新しい。
179  const EMoneyResult& getDealResult(std::size_t index) const;
180 
181  /// @brief 取引結果履歴配列を取得する。
182  /// @return 取引結果履歴配列。
183  ///
184  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
185  ///
186  /// - 履歴の有効項目数を知りたいだけならばメンバ関数
187  /// #getDealResultCount を用いること。
188  /// - 特定の履歴項目を取得したいだけならばメンバ関数 #getDealResult を用いること。
189  std::vector<std::reference_wrapper<const EMoneyResult>> getDealResults() const
190  {
191  return
193  this->getDealResultCount(),
194  [this](std::size_t i) -> const EMoneyResult&
195  {
196  return this->getDealResult(i);
197  });
198  }
199 
200  /// @brief 締め処理中であるか否かを取得する。
201  /// @retval true 締め処理中である場合。
202  /// @retval false 締め処理中ではないか、電子マネー機能が無効である場合。
203  ///
204  /// 締め処理中である場合、 EMoneyOperation クラスの各種操作を開始することはできない。
205  /// ただしメンバ関数 EMoneyOperation#checkDisplay だけは開始可能である。
206  bool isReporting() const;
207 
208  /// @brief 締め処理結果履歴の有効項目数を取得する。
209  /// @return
210  /// 締め処理結果履歴の有効項目数。最大値は amdaemon::MaxEMoneyReportCount 。
211  /// 電子マネー機能が無効である場合は 0 。
212  std::size_t getReportCount() const;
213 
214  /// @brief 締め処理結果履歴の項目を取得する。
215  /// @param[in] index 締め処理結果履歴インデックス。
216  /// @return 締め処理結果履歴項目。
217  ///
218  /// @exception Exception
219  /// - 電子マネー機能が無効である場合。
220  /// - 引数 index に有効項目数以上の値を指定した場合。
221  /// 有効項目数はメンバ関数 #getReportCount で取得できる。
222  ///
223  /// インデックスの小さい要素ほど処理日時が新しい。
224  ///
225  /// 現状、締め処理対象ブランドは楽天Edyのみとなっている。
226  /// 集計期間中に対象ブランドでの支払いが一度も行われていない場合、支払件数や支払総額が
227  /// 0 となるが、正常な動作である。
228  const EMoneyReport& getReport(std::size_t index) const;
229 
230  /// @brief 締め処理結果履歴配列を取得する。
231  /// @return 締め処理結果履歴配列。
232  ///
233  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
234  ///
235  /// - 履歴の有効項目数を知りたいだけならばメンバ関数 #getReportCount を用いること。
236  /// - 特定の履歴項目を取得したいだけならばメンバ関数 #getReport を用いること。
237  std::vector<std::reference_wrapper<const EMoneyReport>> getReports() const
238  {
239  return
240  ::amdaemon::util::toContainer<decltype(this->getReports())>(
241  this->getReportCount(),
242  [this](std::size_t i) -> const EMoneyReport&
243  {
244  return this->getReport(i);
245  });
246  }
247  };
248 
249 /// @}
250 } // namespace amdaemon
251 
252 #endif // AMDAEMON_EMONEY_H
電子マネーに関する情報を定義するヘッダ。
std::size_t getReportCount() const
締め処理結果履歴の有効項目数を取得する。
電子マネーのブランド情報を提供するクラス。
Definition: EMoneyBrand.h:37
std::vector< std::reference_wrapper< const EMoneyResult > > getDealResults() const
取引結果履歴配列を取得する。
Definition: EMoney.h:189
電子マネーのブランド情報を提供するクラス EMoneyBrand のヘッダ。
bool isAuthCompleted() const
端末認証を実施済みであるか否かを取得する。
EMoneyBrandId
電子マネーブランドID列挙。
Definition: EMoneyBrandId.h:19
Daemonライブラリの環境定義を行うヘッダ。
const EMoneyReport & getReport(std::size_t index) const
締め処理結果履歴の項目を取得する。
電子マネー操作結果を提供するクラス EMoneyResult のヘッダ。
std::size_t getAvailableBrandCount() const
有効ブランド数を取得する。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
const EMoneyBrand & getAvailableBrand(std::size_t index) const
有効ブランド情報を取得する。
電子マネーのサウンド情報を提供するクラス。
Definition: EMoneySound.h:37
電子マネーの各種操作を行うクラス。
Definition: EMoneyOperation.h:83
DestContainer toContainer(SrcContainer &&src)
コンテナを別のコンテナ型に変換する。
Definition: container.h:133
電子マネー締め処理結果を提供するクラス。
Definition: EMoneyReport.h:32
void setSoundHook(std::function< void(const EMoneySound &)> hook)
サウンドフック関数を設定する。
const wchar_t * getTerminalId() const
端末ID値を取得する。
コンテナクラス関連の便利処理を提供するヘッダ。
bool isReporting() const
締め処理中であるか否かを取得する。
電子マネー処理を提供するMonostateクラス。
Definition: EMoney.h:37
std::size_t getDealResultCount() const
取引結果履歴の有効項目数を取得する。
bool isAvailable() const
電子マネー機能を利用可能であるか否かを取得する。
EMoneyOperation & getOperation()
通信操作インスタンスを取得する。
const wchar_t * getTerminalSerial() const
端末シリアル値を取得する。
電子マネー締め処理結果を提供するクラス EMoneyReport のヘッダ。
std::vector< std::reference_wrapper< const EMoneyReport > > getReports() const
締め処理結果履歴配列を取得する。
Definition: EMoney.h:237
void resetSoundHook()
サウンドフック関数を解除し、未設定状態に戻す。
電子マネー操作結果を提供するクラス。
Definition: EMoneyResult.h:52
const EMoneyResult & getDealResult(std::size_t index) const
取引結果履歴の項目を取得する。
bool isServiceAlive() const
サービスサーバが生存しているか否かを取得する。
電子マネーのサウンド情報を提供するクラス EMoneySound のヘッダ。
std::vector< std::reference_wrapper< const EMoneyBrand > > getAvailableBrands() const
有効ブランド情報配列を取得する。
Definition: EMoney.h:145
bool isBrandAvailable(EMoneyBrandId brandId) const
ブランドが有効であるか否かを取得する。
電子マネーの各種操作を行うクラス EMoneyOperation のヘッダ。