rsiot::components

Module cmp_websocket_server

Source
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