Expand description
Компонент для подключения через websocket server.
Перенаправляет поток входящих сообщений подключенным вебсокет-клиентам.
При подключении клиенту отправляются все актуальные сообщения из кеша, далее только новые. Используется библиотека tokio-tungstenite.
§Пример
§Файл shared::ws_client_server/client_to_server.rs
use crate::components_config::websocket_general::WebsocketMessage;
use serde::{Deserialize, Serialize};
use strum::IntoStaticStr;
#[derive(Clone, Debug, IntoStaticStr, Deserialize, Serialize)]
pub enum ClientToServer {
ClientCounter(u8),
}
impl WebsocketMessage for ClientToServer {}
§Файл shared::ws_client_server/server_to_client.rs
use crate::components_config::websocket_general::WebsocketMessage;
use serde::{Deserialize, Serialize};
use strum::IntoStaticStr;
#[derive(Clone, Debug, IntoStaticStr, Deserialize, Serialize)]
pub enum ServerToClient {
ServerCounter(u32),
}
impl WebsocketMessage for ServerToClient {}
§Файл cmp_websocket_server/mod.rs
use crate::{components::cmp_websocket_server, message::Message, serde_utils::SerdeAlgKind};
use super::{client_to_server::*, messages::*, server_to_client::*};
pub fn new() -> crate::executor::Component<
cmp_websocket_server::Config<Msg, ServerToClient, ClientToServer>,
Msg,
> {
let config = cmp_websocket_server::Config {
serde_alg: SerdeAlgKind::Json,
port: 8011,
fn_server_to_client: |msg: &Message<Msg>| {
let msg = msg.get_custom_data()?;
let s2c = match msg {
Msg::ServerCounter(counter) => ServerToClient::ServerCounter(counter),
_ => return None,
};
Some(s2c)
},
fn_client_to_server: |c2s: ClientToServer| {
let msg = match c2s {
ClientToServer::ClientCounter(counter) => {
Message::new_custom(Msg::CounterFromClient(counter))
}
_ => return vec![],
};
vec![msg]
},
};
cmp_websocket_server::Cmp::new(config)
}
Structs§
- Конфигурация Websocket-сервера
Enums§
Type Aliases§
- Компонент cmp_websocker_server