mirror of
https://github.com/safing/portmaster
synced 2025-04-08 13:09:11 +00:00
45 lines
1.4 KiB
Rust
45 lines
1.4 KiB
Rust
use super::PortmasterExt;
|
|
use crate::portapi::client::connect;
|
|
use log::{debug, error, info, warn};
|
|
use tauri::{AppHandle, Runtime};
|
|
use tokio::time::{sleep, Duration};
|
|
|
|
/// Starts a backround thread (via tauri::async_runtime) that connects to the Portmaster
|
|
/// Websocket database API.
|
|
pub fn start_websocket_thread<R: Runtime>(app: AppHandle<R>) {
|
|
let app = app.clone();
|
|
|
|
tauri::async_runtime::spawn(async move {
|
|
loop {
|
|
debug!("Trying to connect to websocket endpoint");
|
|
|
|
let api = connect("ws://127.0.0.1:817/api/database/v1").await;
|
|
|
|
match api {
|
|
Ok(cli) => {
|
|
let portmaster = app.portmaster();
|
|
|
|
info!("Successfully connected to portmaster");
|
|
|
|
portmaster.on_connect(cli.clone());
|
|
|
|
while !cli.is_closed() {
|
|
let _ = sleep(Duration::from_secs(1)).await;
|
|
}
|
|
|
|
portmaster.on_disconnect();
|
|
|
|
warn!("lost connection to portmaster, retrying ....")
|
|
}
|
|
Err(err) => {
|
|
error!("failed to create portapi client: {}", err);
|
|
|
|
app.portmaster().on_disconnect();
|
|
|
|
// sleep and retry
|
|
sleep(Duration::from_secs(2)).await;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|