diff --git a/Cargo.lock b/Cargo.lock index aa28ad4..25ee3f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 4 +version = 3 [[package]] name = "addr2line" diff --git a/src/imp/desktop.rs b/src/imp/desktop.rs index 33eab49..a78dcbe 100644 --- a/src/imp/desktop.rs +++ b/src/imp/desktop.rs @@ -1,6 +1,7 @@ use crate::app::Command; use anyhow::Result; use dioxus::hooks::{UnboundedReceiver, UnboundedSender}; +use futures::io::{AsyncRead, AsyncWrite}; use mumble_protocol::control::{ClientControlCodec, ControlPacket}; use mumble_protocol::Serverbound; use std::net::ToSocketAddrs; @@ -15,11 +16,17 @@ use tokio_rustls::rustls::DigitallySignedStruct; use tokio_rustls::TlsConnector; use tokio_util::compat::{TokioAsyncReadCompatExt as _, TokioAsyncWriteCompatExt as _}; -pub use tokio::task::spawn_local as spawn; +pub use tokio::task::spawn; pub use tokio::time::sleep; pub struct Error(anyhow::Error); +pub trait ImpRead: AsyncRead + Unpin + Send + 'static {} +impl ImpRead for T {} + +pub trait ImpWrite: AsyncWrite + Unpin + Send + 'static {} +impl ImpWrite for T {} + impl From for Error { fn from(value: anyhow::Error) -> Self { Error(value) @@ -135,9 +142,6 @@ pub async fn network_connect( username: String, event_rx: &mut UnboundedReceiver, ) -> Result<(), Error> { - let localset = LocalSet::new(); - let _guard = localset.enter(); - let config = ClientConfig::builder() .dangerous() .with_custom_certificate_verifier(Arc::new(NoCertificateVerification)) diff --git a/src/imp/web.rs b/src/imp/web.rs index d3d12e6..c15c057 100644 --- a/src/imp/web.rs +++ b/src/imp/web.rs @@ -1,6 +1,8 @@ use crate::app::Command; use crate::bail; use dioxus::prelude::*; +use futures::AsyncRead; +use futures::AsyncWrite; use futures_channel::mpsc::UnboundedSender; use gloo_timers::future::TimeoutFuture; use mumble_protocol::control::ClientControlCodec; @@ -43,6 +45,12 @@ use web_sys::WorkletOptions; pub use wasm_bindgen_futures::spawn_local as spawn; +pub trait ImpRead: AsyncRead + Unpin + 'static {} +impl ImpRead for T {} + +pub trait ImpWrite: AsyncWrite + Unpin + 'static {} +impl ImpWrite for T {} + pub async fn sleep(d: Duration) { TimeoutFuture::new(d.as_millis() as u32).await } diff --git a/src/lib.rs b/src/lib.rs index 0df7800..15eea61 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,14 +5,10 @@ use app::STATE; use asynchronous_codec::FramedRead; use asynchronous_codec::FramedWrite; use dioxus::prelude::*; -use futures::io::AsyncRead; -use futures::io::AsyncWrite; use futures::select; use futures::FutureExt as _; -use futures::Sink; use futures::SinkExt as _; -use futures::Stream; -use futures::StreamExt; +use futures::StreamExt as _; use futures_channel::mpsc::UnboundedSender; pub use imp::spawn; pub use imp::Error; @@ -24,9 +20,6 @@ use mumble_protocol::Clientbound; use mumble_protocol::Serverbound; use std::collections::hash_map::Entry; use std::collections::HashMap; -use std::future::Future; -use std::io; -use std::pin::Pin; use std::time::Duration; pub mod app; @@ -68,16 +61,12 @@ pub async fn network_entrypoint(mut event_rx: UnboundedReceiver) { } } -pub async fn network_loop( +pub async fn network_loop( username: String, event_rx: &mut UnboundedReceiver, mut reader: FramedRead>, mut writer: FramedWrite>, -) -> Result<(), Error> -where - R: AsyncRead + Unpin + 'static, - W: AsyncWrite + Unpin + 'static, -{ +) -> Result<(), Error> { let (mut send_chan, mut writer_recv_chan) = futures_channel::mpsc::unbounded(); spawn(async move { while let Some(msg) = writer_recv_chan.next().await {