Open7

denops-inspector実装メモ

kkiyama117kkiyama117

取り敢えずやりたい事と形が朧気ながら見えてきた一方で、出来ない・分からない事も出てきたのでボチボチ整理

kkiyama117kkiyama117

設計図概略

メインスレッド→スレッド作成、全スレッド終了時終了(crate1,2)

スレッド1→ユーザーとのio(crate3)

mpsc

スレッド2→denopsとやり取りするWSクライアント(crate3,cfg(target=wasm32) or not)のwriter

(スレ1)
↓↑
mpsc
↓↑
スレッド3→スレ2と同じクライアントのreader

多分スレ1もfutureだけで上手く出来なかったらwasmかどうかで分ける必要がある

kkiyama117kkiyama117

wasmコンパイル時はcrate2を使い必要なAPIとwasmでの具象実装を生やす。これによりdenopsからの呼び出しが出来る
一方crate1ではtokioランタイムでの実装を提供しバイナリとして提供、実行可能にする
crate3では共通部分として

  • wsで呼ぶcommandのstruct(serde-compatible,Send)、レスポンスも同様
  • スレッド1の実装
  • スレッド2のtraitやstruct(共通部分)
  • 生やすべきAPI
    の規定を行う
kkiyama117kkiyama117

後はWSのクライアントの起動前のhttpクライアントも合わせて実装がいる
wasmはfetchをjs からwasm-bindgenで頂く、rust単体側は多分reqwest辺り

kkiyama117kkiyama117

今の所困っているのがmpscやWSでやり取りするものの中身、Stringにすると脳死で解決するがダサ過ぎる

kkiyama117kkiyama117

スレ3からスレ1にMessageを渡し、スレ1でアウトプット
スレ1からの送信はシャットダウン信号

kkiyama117kkiyama117

・開始処理

  1. get and choose the target process
  2. create channels and ws connections
  3. create threads and make them running