mirror of
https://gitlab.freedesktop.org/dabrain34/GstPipelineStudio.git
synced 2024-05-12 13:22:57 +00:00
71 lines
2.2 KiB
Rust
71 lines
2.2 KiB
Rust
use crate::app::GPSApp;
|
|
use crate::logger;
|
|
use crate::settings::Settings;
|
|
use crate::GPS_INFO;
|
|
use async_tungstenite::gio::connect_async;
|
|
use futures::StreamExt;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
///https://gitlab.freedesktop.org/thiblahute/gst-plugins-rs/-/blob/tracerserver
|
|
//https://blog.devgenius.io/getting-started-with-websockets-and-json-data-in-rust-84434ddbfc21
|
|
///GST_TRACERS=wsserver gst-launch-1.0 videotestsrc ! autovideosink
|
|
|
|
#[derive(Debug, Serialize, Deserialize, Default)]
|
|
struct WSMessage {
|
|
#[serde(rename = "type")]
|
|
msg_type: String,
|
|
#[serde(rename = "object-id")]
|
|
#[serde(default)]
|
|
object_id: u64,
|
|
#[serde(rename = "src-id")]
|
|
#[serde(default)]
|
|
src_id: u64,
|
|
#[serde(rename = "sink-id")]
|
|
#[serde(default)]
|
|
sink_id: u64,
|
|
#[serde(rename = "pad-id")]
|
|
#[serde(default)]
|
|
pad_id: u64,
|
|
#[serde(rename = "object-name")]
|
|
#[serde(default)]
|
|
object_name: Option<String>,
|
|
#[serde(rename = "object-gtype")]
|
|
#[serde(default)]
|
|
object_gtype: Option<String>,
|
|
#[serde(rename = "element-factory")]
|
|
#[serde(default)]
|
|
element_factory: Option<String>,
|
|
#[serde(rename = "property-name")]
|
|
#[serde(default)]
|
|
property_name: Option<String>,
|
|
#[serde(rename = "property-value")]
|
|
#[serde(default)]
|
|
property_value: Option<String>,
|
|
}
|
|
|
|
pub async fn run(app: &GPSApp) {
|
|
let connect_addr = Settings::websocket_description();
|
|
|
|
if let Ok((ws_stream, _)) = connect_async(connect_addr).await {
|
|
GPS_INFO!("WebSocket handshake has been successfully completed");
|
|
|
|
let (_write, mut read) = ws_stream.split();
|
|
app.clear_graph();
|
|
while let Some(message) = read.next().await {
|
|
//GPS_INFO!("{message:?}");
|
|
|
|
let ws_msg: WSMessage =
|
|
serde_json::from_str(message.unwrap().into_text().unwrap().as_str()).unwrap();
|
|
GPS_INFO!("{ws_msg:?}");
|
|
if ws_msg.msg_type == "new-object" {
|
|
GPS_INFO!("{ws_msg:?}");
|
|
if let Some(factory_name) = ws_msg.element_factory {
|
|
if factory_name != "pipeline" {
|
|
app.add_new_element(factory_name.as_str());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|