use std::sync::Arc;
use crate::sync_helpers::*;
use maybe_async::*;
use crate::{
connection::{
negotiation_state::NegotiateState, netbios_client::NetBiosClient, transformer::Transformer,
},
msg_handler::{IncomingMessage, OutgoingMessage, SendMessageResult},
session::SessionState,
};
#[maybe_async(AFIT)]
#[allow(async_fn_in_trait)]
pub trait Worker: Sized + std::fmt::Debug {
async fn start(netbios_client: NetBiosClient) -> crate::Result<Arc<Self>>;
async fn stop(&self) -> crate::Result<()>;
async fn send(self: &Self, msg: OutgoingMessage) -> crate::Result<SendMessageResult>;
async fn receive(self: &Self, msg_id: u64) -> crate::Result<IncomingMessage>;
fn transformer(&self) -> &Transformer;
#[maybe_async]
async fn negotaite_complete(&self, neg_state: &NegotiateState) {
self.transformer().negotiated(neg_state).await.unwrap();
}
#[maybe_async]
async fn session_started(&self, session: Arc<Mutex<SessionState>>) -> crate::Result<()> {
self.transformer().session_started(session).await
}
#[maybe_async]
async fn session_ended(&self, session_id: u64) -> crate::Result<()> {
self.transformer().session_ended(session_id).await
}
}