AM Daemon ライブラリリファレンス
Error.h
[詳解]
1 /// @file
2 /// @brief アプリで表示すべきエラーの情報を提供するMonostateクラス Error のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_ERROR_H
7 #define AMDAEMON_ERROR_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/ErrorInfo.h"
11 #include "amdaemon/ErrorLog.h"
12 
13 #include <cstdint>
14 
15 namespace amdaemon
16 {
17 /// @addtogroup g_error
18 /// @{
19 
20  /// @brief アプリで表示すべきエラーの情報を提供するMonostateクラス。
21  ///
22  /// Core クラスのメンバ関数 Core#execute 呼び出しによって内容が更新される。
23  /// 一部の関数は処理完了まで呼び出し元スレッドをブロックする。
24  ///
25  /// @par ライブラリ利用アプリで実装すべきこと
26  /// - メンバ関数 #isOccurred の戻り値を毎フレームチェックし、
27  /// true が返ってきた場合はアプリ側でエラー表示を行うこと。
28  /// - アプリ独自のエラーが発生した場合、メンバ関数 #set でエラーを通知すること。
29  /// - オペレータがエラーリセット操作(PushSwitch2の押下等)を行った場合、
30  /// メンバ関数 #reset でエラーリセットを行うこと。
31  ///
32  /// @par 利用可能タイミングについて
33  /// - エラー発生情報は Core クラスのメンバ関数 Core#isReady が
34  /// false を返す場合でも参照することができる。
35  /// - エラー操作(#set, #reset)やエラーログ情報(#getLog)については
36  /// Core クラスのメンバ関数 Core#isReady が true を返すまで利用できない。
37  ///
38  /// @par エラー発生時の挙動
39  /// - 発生したエラーに関連するモジュールは更新されなくなる。
40  /// 関連しないモジュールは引き続き更新される。
41  /// - 例えばネットワーク周りのエラー発生時、 Network クラス等は更新されないが、
42  /// Jvs クラス等は引き続き更新され、スイッチ入力を得ることもできる。
43  /// - 全プレイヤーのゲームプレイ状態は強制的に解除される。
44  /// - Sequence クラスのメンバ関数 Sequence#isPlayingAny が false を返す状態となる。
45  /// - その時点でのプレイは無かったことになり、ブックキーピングに記録されない。
46  /// - ゲームテストモード中に新たなエラーは発生しない。
47  ///
48  /// @par エラーリセットについて
49  /// - メンバ関数 #getResetType の返すエラーリセット種別によってリセット方法が異なる。
50  /// 詳しくは @ref ErrorResetType 列挙の説明を参照すること。
51  /// - エラーの根本原因を解消していない場合、リセットしても即座に再発する場合がある。
52  /// - ゲームテストモードを開始してもリセットされないエラーの場合、
53  /// ゲームテストモード中であっても Error クラスはエラー情報を返し続ける。
54  /// - アプリでエラー画面表示処理を実装する際には、
55  /// ゲームテストモード中には表示しないような組み方をする必要がある。
56  ///
57  /// @ingroup g_common
58  class Error
59  {
60  // 下記は暗黙の定義を用いる。
61  //Error() = default;
62  //‾Error() = default;
63  //Error(const Error&) = default;
64  //Error& operator=(const Error&) = default;
65 
66  public:
67  // エラー発生情報
68 
69  /// @brief エラー情報インスタンスを取得する。
70  /// @return エラー情報インスタンス。
71  /// @note Core#isReady が false を返す状態でも利用可能。
72  const ErrorInfo& getInfo() const;
73 
74  /// @brief エラーが発生しているか否かを取得する。
75  /// @retval true エラーが発生している場合。
76  /// @retval false エラーが発生していない場合。
77  /// @note Core#isReady が false を返す状態でも利用可能。
78  ///
79  /// getInfo().isOccurred() を返す。
80  bool isOccurred() const
81  {
82  return getInfo().isOccurred();
83  }
84 
85  /// @brief エラー番号を取得する。
86  /// @return エラー番号。エラーが発生していなければ 0 。
87  /// @note Core#isReady が false を返す状態でも利用可能。
88  ///
89  /// getInfo().getNumber() を返す。
90  std::uint32_t getNumber() const
91  {
92  return getInfo().getNumber();
93  }
94 
95  /// @brief サブエラー番号(枝番)を取得する。
96  /// @return サブエラー番号(枝番)。枝番が無いならば 0 。
97  /// @note Core#isReady が false を返す状態でも利用可能。
98  ///
99  /// getInfo().getSubNumber() を返す。
100  std::uint32_t getSubNumber() const
101  {
102  return getInfo().getSubNumber();
103  }
104 
105  /// @brief エラーメッセージを取得する。
106  /// @return エラーメッセージ。エラーが発生していなければ不定値。
107  /// @note Core#isReady が false を返す状態でも利用可能。
108  ///
109  /// getInfo().getMessage() を返す。
110  const wchar_t* getMessage() const
111  {
112  return getInfo().getMessage();
113  }
114 
115  /// @brief エラーリセット種別を取得する。
116  /// @return エラーリセット種別。エラーが発生していなければ不定値。
117  /// @note Core#isReady が false を返す状態でも利用可能。
118  ///
119  /// getInfo().getResetType() を返す。
121  {
122  return getInfo().getResetType();
123  }
124 
125  /// @brief エラーをリセット可能か否かを取得する。
126  /// @retval true リセット可能である場合。
127  /// @retval false リセット不可能であるか、エラー発生中ではない場合。
128  /// @note Core#isReady が false を返す状態でも利用可能。
129  ///
130  /// エラーが発生しており、かつメンバ関数 #getResetType の戻り値が
131  /// ErrorResetType::Any または ErrorResetType::Operation の場合に true を返す。
132  ///
133  /// この関数が false を返す場合、メンバ関数 #reset は必ず失敗する。
134  bool canReset() const;
135 
136  /// @brief エラー発生日時を取得する。
137  /// @return エラー発生日時。エラーが発生していなければ不定値。
138  /// @note Core#isReady が false を返す状態でも利用可能。
139  ///
140  /// getInfo().getTime() を返す。
141  const ::amdaemon::util::DateTime& getTime() const
142  {
143  return getInfo().getTime();
144  }
145 
146  public:
147  // エラー操作
148 
149  /// @brief アプリからエラーを設定する。
150  /// @param[in] number エラー番号。 1 以上 amdaemon::ErrorNumberLimit 以下。
151  /// @param[in] subNumber
152  /// 枝番。 1 以上 amdaemon::ErrorSubNumberLimit 以下。枝番無しならば 0 。
153  /// @retval true エラーを設定できた場合。
154  /// @retval false エラーを設定できなかったか、既にエラー発生中である場合。
155  ///
156  /// @exception Exception
157  /// - 引数 number に 0 もしくは
158  /// amdaemon::ErrorNumberLimit より大きい値を指定した場合。
159  /// - 引数 subNumber に amdaemon::ErrorSubNumberLimit より大きい値を指定した場合。
160  ///
161  /// 主にアプリ固有のエラーを発生させる場合に用いる。
162  ///
163  /// 指定するエラー番号はエラーリソースDLLで定義されていなければならない。
164  /// 未定義のエラー番号を渡した場合は ERROR 4103 が代わりに発生する。
165  /// その場合もこの関数自体はエラーが設定できたものとして true を返す。
166  ///
167  /// リソースの言語(日本語、英語等)は Core クラスでの言語設定に準ずる。
168  /// 現在の言語名はメンバ関数 Core#getLanguage で取得できる。
169  ///
170  /// 既にエラーが発生している場合は何もせずに false を返す。
171  ///
172  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
173  bool set(std::uint32_t number, std::uint32_t subNumber = 0);
174 
175  /// @brief エラーをリセットする。
176  /// @retval true リセットできた場合。
177  /// @retval false リセットできなかったか、エラー発生中ではない場合。
178  ///
179  /// 所定のエラーリセット操作が行われた場合にこの関数を呼び出すこと。
180  /// 操作内容はタイトル依存だが、例えば物理リセットキーを回した時などが該当する。
181  ///
182  /// メンバ関数 #canReset が false を返す場合、この関数は何も行わずに false を返す。
183  /// 即ちこの関数は、メンバ関数 #getResetType の戻り値が
184  /// ErrorResetType::Any または ErrorResetType::Operation の場合のみ成功する。
185  ///
186  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
187  bool reset();
188 
189  public:
190  // エラーログ
191 
192  /// @brief エラーログ情報を取得する。
193  /// @return エラーログ情報。
194  const ErrorLog& getLog() const;
195 
196  /// @brief エラーログ情報のクリア処理を要求する。
197  /// @retval true 成功した場合。
198  /// @retval false 失敗した場合。
199  ///
200  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
201  bool clearLog();
202  };
203 
204 /// @}
205 } // namespace amdaemon
206 
207 #endif // AMDAEMON_ERROR_H
bool clearLog()
エラーログ情報のクリア処理を要求する。
アプリで表示すべきエラーの情報を提供するMonostateクラス。
Definition: Error.h:58
std::uint32_t getNumber() const
エラー番号を取得する。
Definition: Error.h:90
std::uint32_t getSubNumber() const
サブエラー番号(枝番)を取得する。
Definition: Error.h:100
Daemonライブラリの環境定義を行うヘッダ。
virtual std::uint32_t getSubNumber() const =0
サブエラー番号(枝番)を取得する。
virtual bool isOccurred() const
エラーが発生しているか否かを取得する。
Definition: ErrorInfo.h:38
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
virtual ErrorResetType getResetType() const =0
エラーリセット種別を取得する。
bool canReset() const
エラーをリセット可能か否かを取得する。
bool isOccurred() const
エラーが発生しているか否かを取得する。
Definition: Error.h:80
const ErrorLog & getLog() const
エラーログ情報を取得する。
ErrorResetType
エラーのリセット種別列挙。
Definition: ErrorResetType.h:37
const ErrorInfo & getInfo() const
エラー情報インスタンスを取得する。
エラー情報を保持する抽象クラス。
Definition: ErrorInfo.h:24
virtual const wchar_t * getMessage() const =0
エラーメッセージを取得する。
エラーログ情報を提供するクラス。
Definition: ErrorLog.h:30
const wchar_t * getMessage() const
エラーメッセージを取得する。
Definition: Error.h:110
const ::amdaemon::util::DateTime & getTime() const
エラー発生日時を取得する。
Definition: Error.h:141
エラーログ情報を提供するクラス ErrorLog のヘッダ。
bool reset()
エラーをリセットする。
エラー情報を保持する抽象クラス ErrorInfo のヘッダ。
ErrorResetType getResetType() const
エラーリセット種別を取得する。
Definition: Error.h:120
virtual std::uint32_t getNumber() const =0
エラー番号を取得する。
virtual const ::amdaemon::util::DateTime & getTime() const =0
エラー発生日時を取得する。