use std::vec;
use bytes::Bytes;
use tokio::sync::{mpsc, oneshot};
use tokio_util::sync::CancellationToken;
use tonic::Status;
pub struct ClientEvent {
pub payload: Payload,
pub resp: oneshot::Sender<ClientEventResponse>,
pub close_listener: CancellationToken,
pub incoming_events: IncomingEventSender,
}
#[derive(Debug)]
pub enum ClientEventResponse {
Registered {
status: Option<Status>,
entrypoint: Vec<String>,
},
}
impl ClientEventResponse {
pub fn registered(entrypoint: Vec<String>) -> Self {
Self::Registered {
status: None,
entrypoint,
}
}
pub fn registered_failed(status: Status) -> Self {
Self::Registered {
status: Some(status),
entrypoint: vec![],
}
}
}
#[derive(Debug, Clone)]
#[allow(clippy::enum_variant_names)]
pub enum Payload {
RegisterTcp {
port: u16,
},
RegisterUdp {
port: u16,
},
RegisterHttp {
port: u16,
subdomain: Bytes,
domain: Bytes,
random_subdomain: bool,
},
}
pub type IncomingEventSender = mpsc::Sender<UserIncoming>;
pub enum UserIncoming {
Add(crate::bridge::IdDataSenderBridge),
Remove(Bytes),
}