AM Daemon ライブラリリファレンス
NetworkTestInfo.h
[詳解]
1 /// @file
2 /// @brief ネットワークセルフテスト情報を提供するクラス NetworkTestInfo のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_NETWORKTESTINFO_H
7 #define AMDAEMON_NETWORKTESTINFO_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/ErrorInfo.h"
13 #include "amdaemon/TestResult.h"
15 
16 #include <vector>
17 #include <cstdint>
18 #include <cstddef>
19 
20 namespace amdaemon
21 {
22 /// @addtogroup g_network
23 /// @{
24 
25  // 内部クラスの前方宣言
26  class InnerIndexHolder;
27 
28  /// @brief ネットワークセルフテスト情報を提供するクラス。
29  /// @see Network
30  ///
31  /// このクラスのインスタンスをアプリ側で直接生成することはできない。
32  /// Network クラスのメンバ関数
33  /// Network#getPowerOnTestInfo や Network#getTestInfo から取得すること。
34  ///
35  /// AM Daemon がサポートするのは全タイトル共通で利用可能なテスト項目のみであり、
36  /// タイトル固有のテスト項目はタイトル側で実装する必要がある。
37  ///
38  /// @par ネットワークセルフテスト項目について
39  /// - テスト項目は @ref NetworkTestItem 列挙により定義される。
40  /// - 列挙値の定義順に沿って順番にテスト処理が行われる。
41  /// - メンバ関数 #isAvailableItem が false を返す項目はテスト不可能であるため、
42  /// アプリでは項目自体が存在しないものとして扱うこと。(画面表示しない等)
43  /// - 各項目がテスト可能であるか否かは、
44  /// Daemonプロセスの設定ファイルの記述内容により一意に定まる。
45  /// - テスト可能な項目の一覧はメンバ関数 #getAvailableItems で取得できる。
46  /// - テスト実施中は、各テスト項目について項目名とその状態を横に並べて表示すること。
47  /// - 関数 toString(NetworkTestItem) によって項目名を取得できる。
48  /// - メンバ関数 #getStatusText によって状態表示用文字列を取得できる。
49  ///
50  /// @par パワーオンセルフテスト
51  /// - Daemonプロセスは、起動時およびゲームテストモードから抜けたタイミングで
52  /// パワーオンセルフテストを自動的に開始する。
53  /// - パワーオンセルフテストが完了するか、ゲームテストモードに入るまで、
54  /// メンバ関数 #isRunning は true を返し続ける。
55  /// - テスト項目処理が失敗した場合は次のように処理される。
56  /// - リトライによる復旧が可能である場合、Daemonプロセス側でリトライ処理が行われる。
57  /// リトライするのは失敗したテスト項目からであり、
58  /// 既に成功済みのテスト項目はリトライされず正常完了状態のままとなる。
59  /// - リトライによる復旧が不可能である場合、以降の項目はすべて "N/A" となり、
60  /// パワーオンセルフテストは完了となる。
61  /// - リトライ処理の関係上、メンバ関数 #isBusy が true を返す状態であっても
62  /// メンバ関数 #getResult が TestResult::Bad を返す場合がある。
63  /// - ゲームテストモードに入った場合は処理が中断される。
64  ///
65  /// @par ネットワークテスト
66  /// - ゲームテストモード中であれば、 Network クラスのメンバ関数
67  /// Network#startTest によってネットワークテストを開始することができる。
68  /// - 開始可能な状態であるか否かは Network クラスのメンバ関数
69  /// Network#canStartTest で取得できる。
70  /// - テスト項目処理が失敗した場合、それ以降の項目はすべて "N/A" となる。
71  /// パワーオンセルフテストとは異なり、リトライ処理は行われない。
72  /// - テストの実施中に再度テスト開始要求を行った場合、強制的にリスタートされる。
73  /// - ゲームテストモードを抜けた場合は処理が中断される。
74  ///
75  /// @par ネットワークエラー情報
76  /// - いずれかのテスト項目に失敗した場合、内部にネットワークエラー情報が設定される。
77  /// メンバ関数 #getErrorInfo で情報を取得することができる。
78  /// - ただしテスト項目 NetworkTestItem::Hops については設定されない。
79  /// - 失敗したテスト項目がゲーム進行不能レベルのものであるか否かはアプリ依存である。
80  /// もしゲーム進行不能レベルである場合、何らかのエラー表示を行うことになるが、
81  /// その際にこのネットワークエラー情報を用いることができる。
82  /// - パワーオンセルフテストにおいて、失敗したテスト項目がリトライ処理によって
83  /// 成功した場合、ネットワークエラー情報はリセットされる。
85  {
86  public:
87  /// @brief テスト項目のビジー状態表示用文字列を取得する。
88  /// @param[in] blink
89  /// 文字列 "CHECK" と空文字列を一定時間毎に交互に返させる場合は true (既定値)。
90  /// 文字列 "CHECK" のみを返させる場合は false 。
91  /// @return ビジー状態表示用文字列。 "CHECK" または空文字列。
92  ///
93  /// タイトル固有テスト項目の処理中に表示する文字列として利用できる。
94  static const wchar_t* getBusyStatusText(bool blink = true);
95 
96  public:
97  /// @brief コンストラクタ。
98  /// @note アプリ側からは利用できない。
99  explicit NetworkTestInfo(InnerIndexHolder);
100 
101  // 下記は暗黙の定義を用いる。
102  //‾NetworkTestInfo() = default;
103 
104  /// @brief テストを実施中であるか否かを取得する。
105  /// @retval true 実施中である場合。
106  /// @retval false 実施中ではない場合。
107  bool isRunning() const;
108 
109  /// @brief テストを完了済みであるか否かを取得する。
110  /// @retval true 完了済みである場合。
111  /// @retval false 未完了であるか、処理が中断された場合。
112  ///
113  /// テストが完了すると、テスト自体の成否は問わず true を返すようになる。
114  /// 即ち、ゲームテストモード状態の切替により処理が中断されてさえいなければ、
115  /// メンバ関数 #isRunning の戻り値とは逆の値を返す。
116  /// 処理が中断された場合にはどちらの関数も false を返す。
117  ///
118  /// この関数が true を返す場合でも、テストがすべて成功しているとは限らない。
119  /// いずれかの項目で失敗した場合、メンバ関数 #getErrorInfo にエラー情報が設定される。
120  bool isCompleted() const;
121 
122  /// @brief テスト項目をテスト可能であるか否かを取得する。
123  /// @param[in] item テスト項目。
124  /// @retval true テスト可能である場合。
125  /// @retval false テスト不可能である場合。
126  ///
127  /// @exception Exception
128  /// 引数 item に不正な値を指定した場合。
129  ///
130  /// 現在のネットワーク状態は考慮せず、単にテスト可能であるか否かを返す。
131  /// Daemonプロセスの設定ファイルの記述内容により戻り値は一意に定まる。
132  ///
133  /// 例えばALL.NetおよびAimeを利用しないタイトルでは
134  /// ALL.NetサーバやAimeサーバとの疎通チェックを行うことはできないため、
135  /// @ref #isAvailableItem "isAvailableItem"(NetworkTestItem::Aime) は常に
136  /// false を返す。
137  ///
138  /// 一方、ALL.NetおよびAimeを利用するタイトルであれば、
139  /// たとえ前提となるALL.Netサーバとの疎通チェックに失敗していようがいまいが
140  /// @ref #isAvailableItem "isAvailableItem"(NetworkTestItem::Aime) は常に
141  /// true を返す。
142  ///
143  /// この関数が false を返すテスト項目について、
144  /// アプリでは項目自体が存在しないものとして扱うこと。(画面表示しない等)
145  bool isAvailableItem(NetworkTestItem item) const;
146 
147  /// @brief テスト可能なテスト項目数を取得する。
148  /// @return テスト可能なテスト項目数。
149  std::size_t getAvailableItemCount() const;
150 
151  /// @brief テスト可能なテスト項目を取得する。
152  /// @param[in] index 項目インデックス。
153  /// @return テスト可能なテスト項目。
154  ///
155  /// @exception Exception
156  /// 引数 index にテスト可能なテスト項目数以上の値を指定した場合。
157  /// 項目数はメンバ関数 #getAvailableItemCount で取得できる。
158  NetworkTestItem getAvailableItem(std::size_t index) const;
159 
160  /// @brief テスト可能なテスト項目配列を取得する。
161  /// @return テスト可能なテスト項目配列。
162  ///
163  /// アプリではこの関数が返すテスト項目のみを表示すること。
164  std::vector<NetworkTestItem> getAvailableItems() const
165  {
166  return
167  ::amdaemon::util::toContainer<decltype(getAvailableItems())>(
169  [this](std::size_t i) { return getAvailableItem(i); });
170  }
171 
172  /// @brief テスト項目の実施状態を取得する。
173  /// @param[in] item テスト項目。
174  /// @return 実施状態。未実施の場合は NetworkTestState::None 。
175  ///
176  /// @exception Exception
177  /// 引数 item に不正な値を指定した場合。
178  ///
179  /// メンバ関数 #isAvailableItem が false を返すテスト項目の場合、
180  /// この関数の戻り値は未定義となる。
182 
183  /// @brief テスト項目を処理中であるか否かを取得する。
184  /// @param[in] item テスト項目。
185  /// @retval true 処理中である場合。
186  /// @retval false 処理中ではない場合。
187  ///
188  /// @exception Exception
189  /// 引数 item に不正な値を指定した場合。
190  ///
191  /// 条件式 (getState(item) == NetworkTestState::Busy) の結果を返す。
192  ///
193  /// メンバ関数 #isAvailableItem が false を返すテスト項目の場合、
194  /// この関数の戻り値は未定義となる。
195  bool isBusy(NetworkTestItem item) const
196  {
197  return (getState(item) == NetworkTestState::Busy);
198  }
199 
200  /// @brief テスト項目が処理完了済みであるか否かを取得する。
201  /// @param[in] item テスト項目。
202  /// @retval true 処理完了済みである場合。
203  /// @retval false 処理完了済みではない場合。
204  ///
205  /// @exception Exception
206  /// 引数 item に不正な値を指定した場合。
207  ///
208  /// 条件式 (getState(item) == NetworkTestState::Done) の結果を返す。
209  ///
210  /// メンバ関数 #isAvailableItem が false を返すテスト項目の場合、
211  /// この関数の戻り値は未定義となる。
212  bool isDone(NetworkTestItem item) const
213  {
214  return (getState(item) == NetworkTestState::Done);
215  }
216 
217  /// @brief テスト項目の処理結果を取得する。
218  /// @param[in] item テスト項目。
219  /// @return 処理結果。処理未完了である場合は TestResult::None 。
220  ///
221  /// @exception Exception
222  /// 引数 item に不正な値を指定した場合。
223  ///
224  /// テストが開始されるとすべての値が TestResult::None に初期化される。
225  /// その後はメンバ関数 #getState の戻り値により下記のようになる。
226  ///
227  /// @par 実施状態が NetworkTestState::None である場合
228  /// - TestResult::None が返る。
229  ///
230  /// @par 実施状態が NetworkTestState::Busy である場合
231  /// - パワーオンセルフテストでは TestResult::None または TestResult::Bad が返る。
232  /// - TestResult::None が返ってきた場合は初回の処理中である。
233  /// - TestResult::Bad が返ってきた場合はリトライ処理中である。
234  /// - ネットワークテストでは常に TestResult::None が返る。
235  ///
236  /// @par 実施状態が NetworkTestState::Done である場合、
237  /// - TestResult::None 以外のいずれかの値が返る。
238  ///
239  /// ただし、メンバ関数 #isAvailableItem が false を返すテスト項目の場合、
240  /// この関数の戻り値は未定義となる。
242 
243  /// @brief ホップ数を取得する。
244  /// @return ホップ数。未取得の場合は 0 。
245  ///
246  /// テストが開始されると 0 に初期化される。
247  /// その後、 @ref #isDone "isDone"(NetworkTestItem::Hops) が true を返し、
248  /// かつ @ref #getResult "getResult"(NetworkTestItem::Hops) が
249  /// TestResult::Good を返すと、この値が取得できるようになる。
250  std::uint32_t getHops() const;
251 
252  /// @brief テスト項目の状態表示用文字列を取得する。
253  /// @param[in] item テスト項目。
254  /// @param[in] blinkBusy
255  /// テスト項目実施中に文字列
256  /// "CHECK" と空文字列を一定時間毎に交互に返させる場合は true (既定値)。
257  /// 文字列 "CHECK" のみを返させる場合は false 。
258  /// @return 状態表示用文字列。
259  ///
260  /// @exception Exception
261  /// 引数 item に不正な値を指定した場合。
262  ///
263  /// 指定したテスト項目について、下記の値を返す。
264  ///
265  /// - テスト項目未実施の場合、空文字列を返す。
266  /// - テスト項目実施中の場合(メンバ関数 #isBusy が true を返す)、下記のようになる。
267  /// - 引数 blinkBusy が true (既定値)の場合、
268  /// 文字列 "CHECK" と空文字列を約 0.5 秒おきに切り替えて返す。
269  /// - 引数 blinkBusy が false の場合、常に文字列 "CHECK" を返す。
270  /// - テスト項目実施済みの場合(メンバ関数 #isDone が true を返す)、下記のようになる。
271  /// - 引数 item が NetworkTestItem::Hops で、
272  /// かつメンバ関数 #getResult の戻り値が TestResult::Good である場合、
273  /// メンバ関数 #getHops で取得したホップ数を文字列化した値を返す。
274  /// - 上記以外の場合、メンバ関数 #getResult で取得した
275  /// TestResult 値を関数 toString(TestResult) で文字列化した値を返す。
276  ///
277  /// 関数 toString(NetworkTestItem) で取得した項目名と並べて表示することを想定している。
278  ///
279  /// 表示内容は ALL.Net Programmer's Manual を基にしているが、
280  /// テスト結果が "BAD" だった場合のエラー表示についてはこの関数では対応しない。
281  /// エラー情報はメンバ関数 #getErrorInfo より取得すること。
282  const wchar_t* getStatusText(NetworkTestItem item, bool blinkBusy = true) const;
283 
284  /// @brief ネットワークエラー情報インスタンスを取得する。
285  /// @return ネットワークエラー情報インスタンス。
286  ///
287  /// いずれかのテスト項目に失敗した場合、エラー情報が設定される。
288  /// ただしテスト項目 NetworkTestItem::Hops については設定されない。
289  ///
290  /// 失敗したテスト項目がゲーム進行不能レベルのものである場合、
291  /// アプリはこのエラー情報を表示して進行不能であることを示すことができる。
292  ///
293  /// - パワーオンセルフテストでは、リトライ処理によりテスト項目が成功した場合、
294  /// 自動的にエラー情報がクリアされる。
295  /// - ネットワークテストでは、再度テストを開始するまでクリアされない。
296  const ErrorInfo& getErrorInfo() const;
297 
298  private:
299  bool _powerOn; ///< パワーオンセルフテスト用ならば true 。
300 
301  private:
302  // コピー禁止
303  NetworkTestInfo(const NetworkTestInfo&); // 宣言のみ
304  NetworkTestInfo& operator=(const NetworkTestInfo&); // 宣言のみ
305  };
306 
307 /// @}
308 } // namespace amdaemon
309 
310 #endif // AMDAEMON_NETWORKTESTINFO_H
NetworkTestState
ネットワークセルフテスト状態列挙。
Definition: NetworkTestState.h:17
std::uint32_t getHops() const
ホップ数を取得する。
テスト結果列挙 TestResult のヘッダ。
bool isDone(NetworkTestItem item) const
テスト項目が処理完了済みであるか否かを取得する。
Definition: NetworkTestInfo.h:212
std::size_t getAvailableItemCount() const
テスト可能なテスト項目数を取得する。
ボードがビジー状態。
NetworkTestItem getAvailableItem(std::size_t index) const
テスト可能なテスト項目を取得する。
Daemonライブラリの環境定義を行うヘッダ。
ネットワークセルフテスト項目列挙 NetworkTestItem のヘッダ。
NetworkTestInfo(InnerIndexHolder)
コンストラクタ。
std::vector< NetworkTestItem > getAvailableItems() const
テスト可能なテスト項目配列を取得する。
Definition: NetworkTestInfo.h:164
NetworkTestState getState(NetworkTestItem item) const
テスト項目の実施状態を取得する。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
NetworkTestItem
ネットワークセルフテスト項目列挙。
Definition: NetworkTestItem.h:25
完了済み。結果取得可能。
bool isRunning() const
テストを実施中であるか否かを取得する。
TestResult
テスト結果列挙。
Definition: TestResult.h:21
bool isBusy(NetworkTestItem item) const
テスト項目を処理中であるか否かを取得する。
Definition: NetworkTestInfo.h:195
static const wchar_t * getBusyStatusText(bool blink=true)
テスト項目のビジー状態表示用文字列を取得する。
bool isCompleted() const
テストを完了済みであるか否かを取得する。
ネットワークセルフテスト情報を提供するクラス。
Definition: NetworkTestInfo.h:84
コンテナクラス関連の便利処理を提供するヘッダ。
エラー情報を保持する抽象クラス。
Definition: ErrorInfo.h:24
bool isAvailableItem(NetworkTestItem item) const
テスト項目をテスト可能であるか否かを取得する。
const ErrorInfo & getErrorInfo() const
ネットワークエラー情報インスタンスを取得する。
ネットワークセルフテスト状態列挙 NetworkTestState のヘッダ。
TestResult getResult(NetworkTestItem item) const
テスト項目の処理結果を取得する。
エラー情報を保持する抽象クラス ErrorInfo のヘッダ。
const wchar_t * getStatusText(NetworkTestItem item, bool blinkBusy=true) const
テスト項目の状態表示用文字列を取得する。