mirror of
https://github.com/MercuryWorkshop/epoxy-tls.git
synced 2025-05-13 06:20:02 -04:00
remove websocket support
This commit is contained in:
parent
9d1a6f452c
commit
df33f81340
5 changed files with 116 additions and 296 deletions
|
@ -26,9 +26,9 @@ use send_wrapper::SendWrapper;
|
|||
use stream_provider::{StreamProvider, StreamProviderService};
|
||||
use thiserror::Error;
|
||||
use utils::{
|
||||
asyncread_to_readablestream_stream, convert_body, entries_of_object, from_entries,
|
||||
is_null_body, is_redirect, object_get, object_set, object_truthy, IncomingBody, UriExt,
|
||||
WasmExecutor, WispTransportRead, WispTransportWrite,
|
||||
asyncread_to_readablestream_stream, bind_ws_connect, convert_body, entries_of_object,
|
||||
from_entries, is_null_body, is_redirect, object_get, object_set, object_truthy, IncomingBody,
|
||||
UriExt, WasmExecutor, WispTransportRead, WispTransportWrite,
|
||||
};
|
||||
use wasm_bindgen::prelude::*;
|
||||
use wasm_bindgen_futures::JsFuture;
|
||||
|
@ -274,6 +274,53 @@ impl EpoxyHandlers {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_stream_provider(
|
||||
func: Function,
|
||||
options: &EpoxyClientOptions,
|
||||
) -> Result<StreamProvider, EpoxyError> {
|
||||
let wisp_transport = SendWrapper::new(func);
|
||||
StreamProvider::new(
|
||||
Box::new(move || {
|
||||
let wisp_transport = wisp_transport.clone();
|
||||
Box::pin(SendWrapper::new(async move {
|
||||
let transport = wisp_transport
|
||||
.call0(&JsValue::NULL)
|
||||
.map_err(EpoxyError::wisp_transport)?;
|
||||
|
||||
let transport = match transport.dyn_into::<Promise>() {
|
||||
Ok(transport) => {
|
||||
let fut = JsFuture::from(transport);
|
||||
fut.await.map_err(EpoxyError::wisp_transport)?
|
||||
}
|
||||
Err(transport) => transport,
|
||||
}
|
||||
.into();
|
||||
|
||||
let read = WispTransportRead {
|
||||
inner: SendWrapper::new(
|
||||
wasm_streams::ReadableStream::from_raw(
|
||||
object_get(&transport, "read").into(),
|
||||
)
|
||||
.into_stream(),
|
||||
),
|
||||
};
|
||||
let write: WritableStream = object_get(&transport, "write").into();
|
||||
let write = WispTransportWrite {
|
||||
inner: SendWrapper::new(
|
||||
write.get_writer().map_err(EpoxyError::wisp_transport)?,
|
||||
),
|
||||
};
|
||||
|
||||
Ok((
|
||||
Box::new(read) as Box<dyn WebSocketRead + Send>,
|
||||
Box::new(write) as Box<dyn WebSocketWrite + Send>,
|
||||
))
|
||||
}))
|
||||
}),
|
||||
&options,
|
||||
)
|
||||
}
|
||||
|
||||
#[wasm_bindgen(inspectable)]
|
||||
pub struct EpoxyClient {
|
||||
stream_provider: Arc<StreamProvider>,
|
||||
|
@ -295,68 +342,13 @@ impl EpoxyClient {
|
|||
if wisp_uri.scheme_str() != Some("wss") && wisp_uri.scheme_str() != Some("ws") {
|
||||
return Err(EpoxyError::InvalidUrlScheme);
|
||||
}
|
||||
|
||||
let ws_protocols = options.websocket_protocols.clone();
|
||||
Arc::new(StreamProvider::new(
|
||||
Box::new(move || {
|
||||
let wisp_url = wisp_url.clone();
|
||||
let ws_protocols = ws_protocols.clone();
|
||||
|
||||
Box::pin(async move {
|
||||
let (write, read) = WebSocketWrapper::connect(&wisp_url, &ws_protocols)?;
|
||||
if !write.wait_for_open().await {
|
||||
return Err(EpoxyError::WebSocketConnectFailed);
|
||||
}
|
||||
Ok((
|
||||
Box::new(read) as Box<dyn WebSocketRead + Send>,
|
||||
Box::new(write) as Box<dyn WebSocketWrite + Send>,
|
||||
))
|
||||
})
|
||||
}),
|
||||
Arc::new(get_stream_provider(
|
||||
bind_ws_connect(wisp_url, ws_protocols),
|
||||
&options,
|
||||
)?)
|
||||
} else if let Ok(wisp_transport) = wisp_url.dyn_into::<Function>() {
|
||||
let wisp_transport = SendWrapper::new(wisp_transport);
|
||||
Arc::new(StreamProvider::new(
|
||||
Box::new(move || {
|
||||
let wisp_transport = wisp_transport.clone();
|
||||
Box::pin(SendWrapper::new(async move {
|
||||
let transport = wisp_transport
|
||||
.call0(&JsValue::NULL)
|
||||
.map_err(EpoxyError::wisp_transport)?;
|
||||
|
||||
let transport = match transport.dyn_into::<Promise>() {
|
||||
Ok(transport) => {
|
||||
let fut = JsFuture::from(transport);
|
||||
fut.await.map_err(EpoxyError::wisp_transport)?
|
||||
}
|
||||
Err(transport) => transport,
|
||||
}
|
||||
.into();
|
||||
|
||||
let read = WispTransportRead {
|
||||
inner: SendWrapper::new(
|
||||
wasm_streams::ReadableStream::from_raw(
|
||||
object_get(&transport, "read").into(),
|
||||
)
|
||||
.into_stream(),
|
||||
),
|
||||
};
|
||||
let write: WritableStream = object_get(&transport, "write").into();
|
||||
let write = WispTransportWrite {
|
||||
inner: SendWrapper::new(
|
||||
write.get_writer().map_err(EpoxyError::wisp_transport)?,
|
||||
),
|
||||
};
|
||||
|
||||
Ok((
|
||||
Box::new(read) as Box<dyn WebSocketRead + Send>,
|
||||
Box::new(write) as Box<dyn WebSocketWrite + Send>,
|
||||
))
|
||||
}))
|
||||
}),
|
||||
&options,
|
||||
)?)
|
||||
Arc::new(get_stream_provider(wisp_transport, &options)?)
|
||||
} else {
|
||||
return Err(EpoxyError::InvalidWispTransport);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue