use std::{sync::Arc, time::Duration};
use crate::{connection::connection_info::ConnectionInfo, sync_helpers::*};
use maybe_async::*;
use crate::{
connection::{netbios_client::NetBiosClient, transformer::Transformer},
msg_handler::{IncomingMessage, OutgoingMessage, SendMessageResult},
session::SessionInfo,
};
#[maybe_async(AFIT)]
#[allow(async_fn_in_trait)]
pub trait Worker: Sized + std::fmt::Debug {
async fn start(netbios_client: NetBiosClient, timeout: Duration) -> crate::Result<Arc<Self>>;
async fn stop(&self) -> crate::Result<()>;
async fn set_timeout(&self, timeout: Duration) -> 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: &ConnectionInfo) {
self.transformer().negotiated(neg).await.unwrap();
}
#[maybe_async]
async fn session_started(&self, session: Arc<Mutex<SessionInfo>>) -> 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
}
}