TauriとLeptosで作るデスクトップアプリ(4)イベントを送受信する
はじめに
TauriとLeptosでデスクトップアプリを作っていきます。今回は、LeptosフロントエンドとTauriバックエンドの間でイベントを送受信します。
関連記事
環境
- Windows 11 Home
- Rust 1.81
- Tauri 2.0.1
- Leptos 0.7.0-rc0
依存パッケージを追加する
イベントリスナーを扱うために、./apps/src-ui/Cargo.toml
の[dependencies]
にfutures
を追加します。
フロントエンドからイベントを送信する
Leptosフロントエンドクレート./apps/src-ui
内のcomponents
モジュールにevent_frontend
サブモジュールを作ります。
emit_frontend_event
クロージャでイベントを送信します。このときcount
の値を取得し、引数に渡します。イベントの名前はfrontend
としました。
このイベントは、Leptosフロントエンドからフロントエンド自身とTauriバックエンドに送信されます。フロントエンドでは、別スレッドでイベントリスナーを実行します。while let
ループでイベントを待ちます。イベントを受信すると、count
の値をインクリメントします。これによって、イベント送信の総数が記録されます。
Tauriバックエンドでイベントを受信するために、./apps/src-tauri
内のlib
モジュールを更新します。
ここでは、単にイベントを受信したことを標準出力に表示します。
バックエンドからイベントを送信する
次に、TauriバックエンドからLeptosフロントエンドにイベントを送信します。Leptosフロントエンドクレート./apps/src-ui
内のcomponents
モジュールにevent_backend
サブモジュールを作ります。
trigger_backend_event
クロージャが、バックエンドからイベントを送信するトリガーとなります。イベントの受信側は、先ほど作成したevent_frontend
と同様に、別スレッドでイベントリスナーを実行します。イベントのペイロードがNone
であれば、イベントの受信を終了します。イベント受信中には、重ねてイベントをトリガーしないように、disabled
フラグを立てます。
Tauriバックエンドでイベントを送信するには、./apps/src-tauri
内のcommands
モジュールを更新します。
1ミリ秒おきに1000回イベントを送信します。最後にNone
を送信して、イベントが終了したことを通知します。
動作確認
今回作成したコンポーネントを./apps/src-ui
内のapps
モジュールに配置したのち、cargo tauri dev
でアプリケーションを起動します。
期待どおりの動作が確認できました。
サンプルコード
今回作成したプロジェクトは以下からダウンロード可能です。
Discussion