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