use std::{
pin::Pin,
sync::Arc,
time::Duration,
};
use anyhow::Result;
use tokio_tungstenite::tungstenite::protocol::WebSocketConfig;
use crate::{
core::{
packet::codecs::WsIoPacketCodec,
types::{
ArcAsyncUnaryResultHandler,
BoxAsyncUnaryResultHandler,
},
},
session::WsIoClientSession,
};
type InitHandler = Box<
dyn for<'a> Fn(
Arc<WsIoClientSession>,
Option<&'a [u8]>,
&'a WsIoPacketCodec,
) -> Pin<Box<dyn Future<Output = Result<Option<Vec<u8>>>> + Send + 'a>>
+ Send
+ Sync
+ 'static,
>;
pub(crate) struct WsIoClientConfig {
pub(crate) init_handler: Option<InitHandler>,
pub(crate) init_handler_timeout: Duration,
pub(crate) init_packet_timeout: Duration,
pub(crate) on_session_close_handler: Option<BoxAsyncUnaryResultHandler<WsIoClientSession>>,
pub(crate) on_session_close_handler_timeout: Duration,
pub(crate) on_session_ready_handler: Option<ArcAsyncUnaryResultHandler<WsIoClientSession>>,
pub(crate) packet_codec: WsIoPacketCodec,
pub(crate) ping_interval: Duration,
pub(crate) ready_packet_timeout: Duration,
pub(crate) reconnect_delay: Duration,
pub(crate) websocket_config: WebSocketConfig,
}