今までのネットワークコントローラはC#.NETで作成した「クライアントアプリケーション」のexeファイルを各利用者に配り、IPアドレスや設定を伝えて操作していましたが、これをHTTPサーバとWebブラウザの「Webアプリ」として新実装したものになります。
仕組みはごく単純なもので、HTMLのFormから列車IDと速度や命令をPOSTして、それを
PythonのHTTPサーバ(cgi-bin)で受け取り、ログの代わりに命令ファイルを既存の「VRMNXファイル連携システム」に渡すようにしています。
exe版と比べると極めてタイムラグの小さいUDPからHTTP(TCP)のPOST処理になったため、操作のタイムラグが体感で数倍遅延する感じがしますが、exeのダウンロードや設定が不要で、フルスクリーンでリモートレイアウトを見ながら手元で操作できる点が最大の特徴です。
工夫した点としては、HTTPサーバのURLをスマホで打つのが面倒なので、それぞれの列車に対応したリモコンのURLをQRコードで読み込んでもらうようにしたこと、Pythonの簡易HTTPサーバは単一セッションしか扱えないようだったので、操作可能な列車分のサーバをポート別に複数起動させて同時運転できるようにしたことでしょうか。
地味にPythonの実装コードよりもデザインレイアウトのスタイルシートの調整に時間がかかりました。(汗)
久しぶりにHTMLとCSSを書いたのですがたった数年でHTML5(という呼称)が時代遅れ(!)とか書かれていたり、Web界隈はホントに流れが早いですね・・・。
今は「基礎実装版」あるいは「概念実証機」というか、とりあえず最低限スマホで動くようにしたものです。
ゆくゆくはnginxなど真っ当なWebサーバのエンジン上でセキュリティも完備して実装し、レイアウト制御盤や、JavaScript+Ajaxでの非同期(非遷移)制御、サーバ側の情報同期など、色々やってみたいことがあります。
特にHTTPでは未だUDPの扱いが限定的のため、WebTransportやQUICあたりの技術も勉強しながら、よりリアルタイムで便利な制御を目指したいと思います。
相変わらず仕事忙しいのでもうちょい先になりそうですが、落ち着いたらコードをgithubにアップ予定です。