-
Notifications
You must be signed in to change notification settings - Fork 21
v1.5.2 と v1.6.3 における CSA サーバーへの接続エラーに関する改善
v1.5.2 及び v1.6.3 では CSA サーバーへの接続が失敗した場合のエラー処理が改善されました。 (v1.7.0-alpha.4 以降にも同じ修正が含まれる予定です。)
以下、その内容を解説します。
CSA サーバーへの接続を試みた際、ソケットの作成に失敗すると
A JavaScript error occured in the main process
Uncaught Exception:
(以下略)
という内容とともにメッセージボックスが表示されます。
この状態が発生すると、自動再ログインを有効にしていてもメインプロセスの処理がブロックされるため、 OK ボタンを押してメッセージボックスを閉じるまでサーバーへの接続が再試行されません。
つまり、連続対局中に人が離席している状態でこの事象が発生すると、人が戻ってきて操作をするまで次の対局を開始できません。
当該メッセージボックスは出現せず、 Electron 将棋の通常のエラーメッセージのみが表示され、サーバーへの接続が自動で再試行されます。
CSA サーバーが落ちている等でソケットの作成に失敗すると uncaughtException イベントが発生し、デフォルト動作ではメッセージボックスを表示するようです。 これは Electron フレームワークの仕様だと思われます。 https://github.com/electron/electron/blob/v23.2.2/lib/browser/init.ts#L22-L38
今回の修正では Electron 将棋側で uncaughtException イベントをハンドリングして、 Electron 将棋のエラーメッセージ及びエラーログの処理に流すようにしました。 https://github.com/sunfish-shogi/shogihome/pull/456/files
その他、調査時のメモは https://github.com/sunfish-shogi/shogihome/issues/328 を参照してください。
v1.5.2 と v1.6.3 のパッチバージョンアップデート自体は同じ内容ですが、再接続時の動作には v1.5 と v1.6 の間でもともと違いがあります。
v1.6 ではサーバーへの接続やログインを再試行する際に 10 秒のインターバルを設けています。また、インターバル中にキャンセルができるようになっています。
v1.5.x ではインターバルが無いため、 v1.5.2 でメッセージボックスが出なくなったことにより、サーバーに到達できない状態が継続すると高頻度で再試行を行います。