Open7
denops-inspector実装メモ
取り敢えずやりたい事と形が朧気ながら見えてきた一方で、出来ない・分からない事も出てきたのでボチボチ整理
設計図概略
メインスレッド→スレッド作成、全スレッド終了時終了(crate1,2)
スレッド1→ユーザーとのio(crate3)
↓
mpsc
↓
スレッド2→denopsとやり取りするWSクライアント(crate3,cfg(target=wasm32) or not)のwriter
(スレ1)
↓↑
mpsc
↓↑
スレッド3→スレ2と同じクライアントのreader
多分スレ1もfutureだけで上手く出来なかったらwasmかどうかで分ける必要がある
wasmコンパイル時はcrate2を使い必要なAPIとwasmでの具象実装を生やす。これによりdenopsからの呼び出しが出来る
一方crate1ではtokioランタイムでの実装を提供しバイナリとして提供、実行可能にする
crate3では共通部分として
- wsで呼ぶcommandのstruct(serde-compatible,Send)、レスポンスも同様
- スレッド1の実装
- スレッド2のtraitやstruct(共通部分)
- 生やすべきAPI
の規定を行う
後はWSのクライアントの起動前のhttpクライアントも合わせて実装がいる
wasmはfetchをjs からwasm-bindgenで頂く、rust単体側は多分reqwest辺り
今の所困っているのがmpscやWSでやり取りするものの中身、Stringにすると脳死で解決するがダサ過ぎる
スレ3からスレ1にMessageを渡し、スレ1でアウトプット
スレ1からの送信はシャットダウン信号
・開始処理
- get and choose the target process
- create channels and ws connections
- create threads and make them running