共有ブラウザ枠へのブツ作成時に起きやすNo.11239
こみやんま さん 23/04/20 13:21
 
■概要
 
 共有ブラウザに対してデーモンを起動すると、デーモンの終了がやや厄介となる。

「共有ブラウザ用」に色々と作成していて問題があるなぁと思ったのですが、

特に「個別ブラウザ」ではなく「共有ブラウザ枠」なのですが、
「デーモンの終了を誰が担当するのか?」というところで少し難儀なんじゃないかな
ぁと思いました。

例えば、共有のブラウザ枠に対して、
@DaemonLauncher.mac を起動
APHPサーバーあるいはBlazorのサーバーが起動
Bhttp:// で共有ブラウザにアクセス、
C「複数のファイル」を「開いたり閉じたり」と「生存プロセスが移ろいゆく」
   (⇒ 即ち、jsmodeもプロセスへの常駐dllも状況を継続できていない (強引に継続
できるが本筋ではない))
D「共有ブラウザだけが」閉じられた、あるいは、「最後の秀丸エディタが終了」し
た。
Eさぁ、デーモンの役割は終わったので、デーモンを終了しよう...
 ⇒ あれ? 誰がどこで何を判定して終了する?

といったことが起きやすいと思いました。

個別ブラウザなら、dllからプロセス起動すれば、終了できますし、
runProcessでも良いでしょうが、
共有ブラウザは、そうはいかなく、厄介だなぁと思いました。



[ ]
RE:11239 共有ブラウザ枠へのブツ作成時にNo.11240
western さん 23/04/20 15:07
 
LSPサーバは起動して最初の接続のハンドシェイク(initialize)で
開発環境 (秀丸エディタの場合は個別ウィンドウ) のプロセスID
hidemaru.getCurrentProcessInfo().processID を送信、登録し
そのプロセスが消失すると、LSPサーバも自己判断で
シャットダウンするという挙動となっています

オンデマンドで起動するデーモンとしては同じ立ち位置なので
こういう仕組み(プロトコル)が必要なのだと思います

自分はLSPサーバと通信する別デーモンを立ち上げて、
秀丸エディタ側は状態管理は何も考えずに WebSocket で
エディタの状態だけJSON-RCPさせるというロジックで
「接続中のWebSocket数」を死活監視としています

通信に使わなくとも WebSocket サーバをついでに立ち上げて、
何もしないコネクションをその用途で繋げるというやり方です


秀丸エディタは自動起動マクロで「閉じる直前」にマクロをフック出来るので
マクロ側で後始末させるなら、そこで Dispose() 判定させるのが
ロジカルなのだと思います

自分は何でもロガー&ビューワの役割も持たせてるので、
その辺は横着してPCの起動終了と連動させていますがw

[ ]
RE:11240 共有ブラウザ枠へのブツ作成時にNo.11241
こみやんま さん 23/04/20 15:32
 
今は「サーバーアプリ側」で、秀丸のプロセスを監視し、
「常駐秀丸以外が終了」していたら「サーバーアプリ側が自己終了」と組んでいます
が、
「そうじゃねぇだろうw」って感じなんですよねー。

秀丸が「不正終了」したとしてもサーバーアプリ側はやはり終了しておく必要はある
ので
「最終安全弁」として実装は必要ではあるんですが、本筋はここではないだろうって
いう。

秀丸のプロセスが「1以下」で、(常駐秀丸含めても良い)

非タブモード
HideamruClass32
 └ Hm32BrowserCommonPane

タブモード
HideamruClass32
 └ HideamruClass32
     └ Hm32BrowserCommonPane

を満たす ウィンドウハンドル が存在するか? っていうやむをえない判定方法はど
うか?
と思いましたが、
Hm32BrowserCommonPane は一度開くと、その後閉じても
Hm32BrowserCommonPane ウィンドウは実は有効っぽい(インスタンスは破棄していない?)
のでこの判定はやめたって感じです。

さらに執拗に判定していけばいけるっちゃいけますが...
そもそも上の構造の Hm32BrowserCommonPane の部分はネスト関係が将来も同じ構造
が担保されているとは言い難いし...


あと、「そのマクロや機能と直接関係ないタイミング」で
自動起動マクロに監視目的や後片付け目的の記述が必要なのは、
個人用では全く問題ないのですが、
配布系だとかなり敬遠というかほぼ使用しない印象なんですよねぇ〜

[ ]
RE:11241 共有ブラウザ枠へのブツ作成時にNo.11244
秀丸担当 さん 23/04/20 17:22
 
共通ブラウザ枠の場合、何かしら終わらせるタイミングを掴むのは難しいと思います。
普通のブラウザがくっついているだけみたいなものなので、
自動起動マクロのファイルを閉じる直前で一応それなりの判断ができます。
最後がファイルを閉じるコマンド(Ctrl+F4)で新規状態にするのだとしたら、残るこ
ともありますが…
browserpanecommandでshow状態が得られたらいいです。これは追加しておこうと思い
ます。

[ ]