-
Notifications
You must be signed in to change notification settings - Fork 2
ExitCode Spec
本書は JVLinkToSQLite のコマンドライン/実行フローで返される終了コード(プロセス終了コード)の意味をまとめた草稿です。終了コードは以下の層に分かれます:
- 0: 正常終了(
ReturnCodeRanges.Success/ReturnCodes.Success) - JV-Link ネイティブの戻り値(JVLink の各 API が返す値。多くは負の値)
- 本プロジェクト固有の例外用コード(
ReturnCodeRanges.UnkownException等) - コマンドライン/プログラム共通の制御用コード(
ReturnCodes列挙)
以下、詳細を示します。ソースの該当箇所は主に ReturnCodeRanges.cs、ReturnCodes.cs、JVLinkWrappers\JVOpenResult.cs、JVLinkWrappers\JVReadResult.cs、Operators\JVLinkServiceOperationResult.cs、JVLinkToSQLite\MainOptionsHandler.cs、OptionsHandler<T>.cs です。
JVLinkToSQLite\ReturnCodes.cs に定義される CLI レベルのコード(数値はソースから計算):
-
Success= 0- 正常終了。
OptionsHandler<T>.Main/ 多くの成功ルートで返されます。
- 正常終了。
-
OptionNotParsed= -3001- コマンドラインが未解析(
-m none等でヘルプ表示)した場合に返されます。(MainOptionsHandler.TryProcessByUninvocableOption)
- コマンドラインが未解析(
-
Warning= -3002- 警告。たとえば
CreateDefaultSettingで上書き確認で拒否した場合に返す実装があります。
- 警告。たとえば
-
Error= -3003- 汎用エラー。
OptionsHandler<T>.Mainの catch ブロック等で使用されます。
- 汎用エラー。
数値の由来:
ReturnCodeRangesにてレンジを分けており、上記はUrasandesuJVLinkToSQLiteEndよりさらに下位の値として定義されています(詳細は次節)。
Urasandesu.JVLinkToSQLite\ReturnCodeRanges.cs により終了コードのレンジが決められています。
-
ReturnCodeRanges.Success= 0 -
JVLinkEnd= -1000- 以降(0 より下、-1 .. -999)は主に JV-Link ライブラリが返す値(
JVOpen/JVRead等)。
- 以降(0 より下、-1 .. -999)は主に JV-Link ライブラリが返す値(
-
UrasandesuJVLinkToSQLiteStart= -2000- ラッパー側(当プロジェクト)で使う範囲の上限。
-
UnkownException= -2001- ラッパーがキャッチした未知の例外を示す値(
JVLinkServiceOperationResult.Exceptionが使用)。
- ラッパーがキャッチした未知の例外を示す値(
-
UrasandesuJVLinkToSQLiteEnd= -3000- プロジェクト固有レンジの下限(さらに下に CLI 固有コードが続く)。
JVOpenResult / JVReadResult に記載されている代表的なコードと意味(抜粋):
-
JVOpen関連(JVOpenResult.SetReturnCodeCore)-
0: 正常 -
-1: 該当データ無し(取得対象なし) -
-2: セットアップダイアログでキャンセル -
-111~-116: パラメータ不正(dataspec, fromtime, key, option 等) -
-201:JVInitが行われていない -
-202: 前回の Open が閉じられていない(オープン中) -
-301~-305: 認証/利用キー関連エラー -
-401,-411~-413,-421,-431: サーバー/内部エラー -
-501,-504: スタートキット無効やメンテナンス等 - (その他、
SetUnknownReturnCodeを呼んで「不明な戻り値」と扱う場合あり)
-
-
JVRead関連(JVReadResult.SetReturnCodeCore)-
> 0: バッファにセットしたデータサイズ(成功) -
0: 全ファイル読み込み終了(EOF) -
-1: ファイル切り替わり(EOF ではない、バッファにデータは返らない) -
-3: ファイルダウンロード中(少し待つべき) -
-201,-202,-203:JVInit/JVOpen未実行やオープン状態等 -
-402,-403: ダウンロードしたファイルが異常(サイズ/内容) -
-502,-503: ダウンロード失敗 / ファイルが見つからない
-
(注)上記は JVOpenResult.cs / JVReadResult.cs 内の SetReturnCodeCore 実装から抜粋しています。各コードに対して DebugMessage と DebugCauseAndTreatment が設定されます。
- CLI の実行メイン(
OptionsHandler<T>.Main→MainOptionsHandler)では、各モード実行後に int を返し、その値がプロセス終了コードになります。 -
MainOptionsHandler.ExecuteCore/WatchEventCore:- 各
settingDetailの処理結果集合(oprAgg.OperateAll())でAreAllSucceededが false の場合、retCode = rsltAgg.FirstReturnCodeとして最初の失敗コードを採用します。 - したがって、JV-Link の戻り値(例:
-502等)やラッパーが生成するUnkownException(-2001)がそのまま返る可能性があります。
- 各
- 例外ハンドル:
-
OptionsHandler<T>.Mainの try/catch で捕まった例外は(int)ReturnCodes.Error(-3003)を返します。 -
JVLinkServiceOperationResult.ExceptionはReturnCodeRanges.UnkownException(-2001)を返す用途で使われます(内部処理で Exception が発生したケースの集約結果)。
-
- オプション未解析やヘルプ表示:
-
MainOptionsHandler.TryProcessByUninvocableOptionでヘルプ表示した場合はOptionNotParsed(-3001)を返します。
-
- ユーザー操作(上書き確認で拒否):
-
CreateDefaultSettingの上書き確認でユーザーが「y」以外を入力した場合はWarning(-3002)を返します。
-
- 概要:終了コードの階層(成功 / JV-Link / ラッパー / CLI)
- 数値一覧(表形式で
値/定数名/意味/発生箇所を列挙) - よくあるケース(例: データ無し =
-1、ダウンロード失敗 =-502、オプション未解析 =-3001) - トラブルシューティング(
DebugMessage/DebugCauseAndTreatmentを参照する方法) - 参考:主要ソースの参照箇所(ファイル名と関数)
Urasandesu.JVLinkToSQLite\ReturnCodeRanges.csJVLinkToSQLite\ReturnCodes.csUrasandesu.JVLinkToSQLite\JVLinkWrappers\JVOpenResult.csUrasandesu.JVLinkToSQLite\JVLinkWrappers\JVReadResult.csUrasandesu.JVLinkToSQLite\Operators\JVLinkServiceOperationResult.csJVLinkToSQLite\MainOptionsHandler.cs-
JVLinkToSQLite\OptionsHandler\(generic)
必要なら上記をそのまま docs/EXIT_CODES.md(あるいは README の節)として整形します。
どの程度の詳細(全コードを網羅した表、あるいは代表的なコードだけ)で仕上げたいか指示をください。
- JVLinkToSQLite とは
- 簡単な使い方
- 動作設定の仕様
-
テーブルの仕様
- NL_TK_TOKUUMA テーブル
- NL_TK_TokuUmaInfo テーブル
- NL_RA_RACE テーブル
- NL_SE_RACE_UMA テーブル
- NL_HR_PAY テーブル
- NL_H1_HYOSU_ZENKAKE テーブル
- NL_H1_HyoTansyo テーブル
- NL_H1_HyoFukusyo テーブル
- NL_H1_HyoWakuren テーブル
- NL_H1_HyoUmaren テーブル
- NL_H1_HyoWide テーブル
- NL_H1_HyoUmatan テーブル
- NL_H1_HyoSanrenpuku テーブル
- NL_H6_HYOSU_SANRENTAN テーブル
- NL_H6_HyoSanrentan テーブル
- NL_O1_ODDS_TANFUKUWAKU テーブル
- NL_O2_ODDS_UMAREN テーブル
- NL_O3_ODDS_WIDE テーブル
- NL_O4_ODDS_UMATAN テーブル
- NL_O5_ODDS_SANREN テーブル
- NL_O5_OddsSanrenInfo テーブル
- NL_O6_ODDS_SANRENTAN テーブル
- NL_O6_OddsSanrentanInfo テーブル
- NL_WF_INFO テーブル
- NL_JG_JOGAIBA テーブル
- NL_UM_UMA テーブル
- NL_KS_KISYU テーブル
- NL_CH_CHOKYOSI テーブル
- NL_BR_BREEDER テーブル
- NL_BN_BANUSI テーブル
- NL_RC_RECORD テーブル
- NL_HN_HANSYOKU テーブル
- NL_SK_SANKU テーブル
- NL_BT_KEITO テーブル
- NL_DM_INFO テーブル
- NL_TM_INFO テーブル
- NL_CK_CHAKU テーブル
- NL_CK_KisyuChaku テーブル
- NL_CK_ChokyoChaku テーブル
- NL_CK_BanusiChaku テーブル
- NL_CK_BreederChaku テーブル
- NL_HC_HANRO テーブル
- NL_YS_SCHEDULE テーブル
- NL_HS_SALE テーブル
- NL_HY_BAMEIORIGIN テーブル
- NL_CS_COURSE テーブル
- NL_WC_WOOD テーブル
- RT_RA_RACE テーブル
- RT_SE_RACE_UMA テーブル
- RT_HR_PAY テーブル
- RT_O1_ODDS_TANFUKUWAKU テーブル
- RT_O2_ODDS_UMAREN テーブル
- RT_O3_ODDS_WIDE テーブル
- RT_O4_ODDS_UMATAN テーブル
- RT_O5_ODDS_SANREN テーブル
- RT_O5_OddsSanrenInfo テーブル
- RT_O6_ODDS_SANRENTAN テーブル
- RT_O6_OddsSanrentanInfo テーブル
- RT_H1_HYOSU_ZENKAKE テーブル
- RT_H1_HyoTansyo テーブル
- RT_H1_HyoFukusyo テーブル
- RT_H1_HyoWakuren テーブル
- RT_H1_HyoUmaren テーブル
- RT_H1_HyoWide テーブル
- RT_H1_HyoUmatan テーブル
- RT_H1_HyoSanrenpuku テーブル
- RT_H6_HYOSU_SANRENTAN テーブル
- RT_H6_HyoSanrentan テーブル
- RT_WH_BATAIJYU テーブル
- RT_WE_WEATHER テーブル
- RT_AV_INFO テーブル
- RT_JC_INFO テーブル
- RT_TC_INFO テーブル
- RT_CC_INFO テーブル
- RT_DM_INFO テーブル
- RT_TM_INFO テーブル
- RT_WF_INFO テーブル
- SY_PROC_FILES テーブル
- JVLinkToSQLite を使った競馬ソフトの開発
- 終了コードの仕様