use log::debug;
use videocall_transport::websocket::WebSocketTask;
use videocall_transport::webtransport::WebTransportTask;
use videocall_types::protos::packet_wrapper::PacketWrapper;
use super::webmedia::{ConnectOptions, WebMedia};
#[derive(Debug)]
#[allow(clippy::large_enum_variant)]
pub(super) enum Task {
WebSocket(WebSocketTask),
WebTransport(WebTransportTask),
}
impl Task {
pub fn connect(webtransport: bool, options: ConnectOptions) -> anyhow::Result<Self> {
if webtransport {
debug!("Task::connect trying WebTransport");
WebTransportTask::connect(options).map(Task::WebTransport)
} else {
debug!("Task::connect trying WebSocket");
WebSocketTask::connect(options).map(Task::WebSocket)
}
}
pub fn send_packet(&self, packet: PacketWrapper) {
match self {
Task::WebSocket(ws) => ws.send_packet(packet),
Task::WebTransport(wt) => wt.send_packet(packet),
}
}
pub fn send_packet_datagram(&self, packet: PacketWrapper) {
match self {
Task::WebSocket(ws) => ws.send_packet(packet),
Task::WebTransport(wt) => wt.send_packet_datagram(packet),
}
}
}