use std::{net::SocketAddr, sync::Arc};
use crate::{
app::{AsyncFunc, ClientsStructType, ReactorEventSender, event_api::event_api::ReactorEvent},
handler::HandlerContext,
};
use super::{input_dto::IHandlerCombinedTrait, router_handler::IHandlerMethod};
pub(crate) struct MsgSelect {
pub(crate) addr: SocketAddr,
pub(crate) handler_context: HandlerContext,
}
impl MsgSelect {
pub(crate) fn new(addr: SocketAddr, handler_context: HandlerContext) -> Self {
Self {
addr,
handler_context,
}
}
}
impl IHandlerCombinedTrait for MsgSelect {
async fn execute(
&mut self,
clients: ClientsStructType,
handler_method: Arc<AsyncFunc>,
reactor_event_sender: ReactorEventSender,
) {
self.handler(handler_method, reactor_event_sender, clients)
.await;
}
}
impl IHandlerMethod for MsgSelect {
async fn handler(
&mut self,
handler_method: Arc<AsyncFunc>,
reactor_event_sender: ReactorEventSender,
clients: ClientsStructType,
) {
let task_body = (
handler_method.clone(),
self.handler_context.clone(),
clients,
);
reactor_event_sender.push(ReactorEvent::crate_excute_task_event(task_body));
}
}