Skip to main content

rsiot/components/cmp_websocket_server/
component.rs

1use async_trait::async_trait;
2
3use crate::{
4    executor::{Component, ComponentError, IComponentProcess, MsgBusLinker},
5    message::MsgDataBound,
6};
7
8use super::{
9    config::{Config, WebsocketMessage},
10    fn_process::fn_process,
11};
12
13/// Название компонента
14pub const COMPONENT_NAME: &str = "cmp_websocket_server";
15
16#[cfg_attr(not(feature = "single-thread"), async_trait)]
17#[cfg_attr(feature = "single-thread", async_trait(?Send))]
18impl<TMessage, TServerToClient, TClientToServer>
19    IComponentProcess<Config<TMessage, TServerToClient, TClientToServer>, TMessage>
20    for Component<Config<TMessage, TServerToClient, TClientToServer>, TMessage>
21where
22    TMessage: MsgDataBound + 'static,
23    TServerToClient: 'static + WebsocketMessage,
24    TClientToServer: 'static + WebsocketMessage,
25{
26    async fn process(
27        &self,
28        config: Config<TMessage, TServerToClient, TClientToServer>,
29        msgbus_linker: MsgBusLinker<TMessage>,
30    ) -> Result<(), ComponentError> {
31        fn_process(msgbus_linker.init(COMPONENT_NAME), config).await?;
32        Ok(())
33    }
34}
35
36/// Компонент cmp_websocker_server
37pub type Cmp<TMessage, TServerToClient, TClientToServer> =
38    Component<Config<TMessage, TServerToClient, TClientToServer>, TMessage>;