add wasm impl for RawMessage
This commit is contained in:
parent
2887794b0e
commit
f3ee3a8d8a
|
@ -3,6 +3,8 @@
|
||||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
// This example showcase how to properly use gateway observers.
|
// This example showcase how to properly use gateway observers.
|
||||||
|
// (This assumes you have a manually created gateway, if you created
|
||||||
|
// a ChorusUser by e.g. logging in, you can access the gateway with user.gateway)
|
||||||
//
|
//
|
||||||
// To properly run it, you will need to change the token below.
|
// To properly run it, you will need to change the token below.
|
||||||
|
|
||||||
|
@ -12,7 +14,7 @@ const TOKEN: &str = "";
|
||||||
const GATEWAY_URL: &str = "wss://gateway.old.server.spacebar.chat/";
|
const GATEWAY_URL: &str = "wss://gateway.old.server.spacebar.chat/";
|
||||||
|
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use chorus::gateway::Gateway;
|
use chorus::gateway::{Gateway, GatewayOptions};
|
||||||
use chorus::{
|
use chorus::{
|
||||||
self,
|
self,
|
||||||
gateway::Observer,
|
gateway::Observer,
|
||||||
|
@ -47,8 +49,14 @@ impl Observer<GatewayReady> for ExampleObserver {
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let gateway_websocket_url = GATEWAY_URL.to_string();
|
let gateway_websocket_url = GATEWAY_URL.to_string();
|
||||||
|
|
||||||
|
// These options specify the encoding format, compression, etc
|
||||||
|
//
|
||||||
|
// For most cases the defaults should work, though some implementations
|
||||||
|
// might only support some formats or not support compression
|
||||||
|
let options = GatewayOptions::default();
|
||||||
|
|
||||||
// Initiate the gateway connection
|
// Initiate the gateway connection
|
||||||
let gateway = Gateway::spawn(gateway_websocket_url).await.unwrap();
|
let gateway = Gateway::spawn(gateway_websocket_url, options).await.unwrap();
|
||||||
|
|
||||||
// Create an instance of our observer
|
// Create an instance of our observer
|
||||||
let observer = ExampleObserver {};
|
let observer = ExampleObserver {};
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
// This example showcases how to initiate a gateway connection manually
|
// This example showcases how to initiate a gateway connection manually
|
||||||
// (e. g. not through ChorusUser)
|
// (e. g. not through ChorusUser or Instance)
|
||||||
//
|
//
|
||||||
// To properly run it, you will need to modify the token below.
|
// To properly run it, you will need to modify the token below.
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ const GATEWAY_URL: &str = "wss://gateway.old.server.spacebar.chat/";
|
||||||
|
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use chorus::gateway::Gateway;
|
use chorus::gateway::{Gateway, GatewayOptions};
|
||||||
use chorus::{self, types::GatewayIdentifyPayload};
|
use chorus::{self, types::GatewayIdentifyPayload};
|
||||||
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
@ -26,9 +26,15 @@ use wasmtimer::tokio::sleep;
|
||||||
#[tokio::main(flavor = "current_thread")]
|
#[tokio::main(flavor = "current_thread")]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let gateway_websocket_url = GATEWAY_URL.to_string();
|
let gateway_websocket_url = GATEWAY_URL.to_string();
|
||||||
|
|
||||||
|
// These options specify the encoding format, compression, etc
|
||||||
|
//
|
||||||
|
// For most cases the defaults should work, though some implementations
|
||||||
|
// might only support some formats or not support compression
|
||||||
|
let options = GatewayOptions::default();
|
||||||
|
|
||||||
// Initiate the gateway connection, starting a listener in one thread and a heartbeat handler in another
|
// Initiate the gateway connection, starting a listener in one thread and a heartbeat handler in another
|
||||||
let gateway = Gateway::spawn(gateway_websocket_url).await.unwrap();
|
let gateway = Gateway::spawn(gateway_websocket_url, options).await.unwrap();
|
||||||
|
|
||||||
// At this point, we are connected to the server and are sending heartbeats, however we still haven't authenticated
|
// At this point, we are connected to the server and are sending heartbeats, however we still haven't authenticated
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,15 @@ impl GatewayOptions {
|
||||||
|
|
||||||
let already_has_parameters = url.contains("?") && url.contains("=");
|
let already_has_parameters = url.contains("?") && url.contains("=");
|
||||||
|
|
||||||
|
if !already_has_parameters {
|
||||||
|
// Insure it ends in a /, so we don't get a 400 error
|
||||||
|
if !url.ends_with('/') {
|
||||||
|
url.push('/');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lets hope that if it already has parameters the person knew to add '/'
|
||||||
|
}
|
||||||
|
|
||||||
for index in 0..parameters.len() {
|
for index in 0..parameters.len() {
|
||||||
if index == 0 && !already_has_parameters {
|
if index == 0 && !already_has_parameters {
|
||||||
url = format!("{}?{}", url, parameters[index]);
|
url = format!("{}?{}", url, parameters[index]);
|
||||||
|
|
|
@ -23,3 +23,21 @@ impl From<WsMessage> for VoiceGatewayMessage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<RawGatewayMessage> for WsMessage {
|
||||||
|
fn from(message: RawGatewayMessage) -> Self {
|
||||||
|
match message {
|
||||||
|
RawGatewayMessage::Text(text) => tungstenite::Message::Text(text),
|
||||||
|
RawGatewayMessage::Bytes(bytes) => tungstenite::Message::Binary(bytes),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<WsMessage> for RawGatewayMessage {
|
||||||
|
fn from(value: WsMessage) -> Self {
|
||||||
|
match value {
|
||||||
|
WsMessage::Binary(bytes) => RawGatewayMessage::Bytes(bytes),
|
||||||
|
WsMessage::Text(text) => RawGatewayMessage::Text(text),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use chorus::gateway::Gateway;
|
use chorus::gateway::{Gateway, GatewayOptions};
|
||||||
use chorus::types::IntoShared;
|
use chorus::types::IntoShared;
|
||||||
use chorus::{
|
use chorus::{
|
||||||
instance::{ChorusUser, Instance},
|
instance::{ChorusUser, Instance},
|
||||||
|
@ -50,7 +50,7 @@ impl TestBundle {
|
||||||
limits: self.user.limits.clone(),
|
limits: self.user.limits.clone(),
|
||||||
settings: self.user.settings.clone(),
|
settings: self.user.settings.clone(),
|
||||||
object: self.user.object.clone(),
|
object: self.user.object.clone(),
|
||||||
gateway: Gateway::spawn(self.instance.urls.wss.clone())
|
gateway: Gateway::spawn(self.instance.urls.wss.clone(), GatewayOptions::default())
|
||||||
.await
|
.await
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ pub(crate) async fn setup() -> TestBundle {
|
||||||
let urls = UrlBundle::new(
|
let urls = UrlBundle::new(
|
||||||
"http://localhost:3001/api".to_string(),
|
"http://localhost:3001/api".to_string(),
|
||||||
"http://localhost:3001/api".to_string(),
|
"http://localhost:3001/api".to_string(),
|
||||||
"ws://localhost:3001".to_string(),
|
"ws://localhost:3001/".to_string(),
|
||||||
"http://localhost:3001".to_string(),
|
"http://localhost:3001".to_string(),
|
||||||
);
|
);
|
||||||
TestBundle {
|
TestBundle {
|
||||||
|
|
|
@ -30,7 +30,7 @@ use wasmtimer::tokio::sleep;
|
||||||
async fn test_gateway_establish() {
|
async fn test_gateway_establish() {
|
||||||
let bundle = common::setup().await;
|
let bundle = common::setup().await;
|
||||||
|
|
||||||
let _: GatewayHandle = Gateway::spawn(bundle.urls.wss.clone()).await.unwrap();
|
let _: GatewayHandle = Gateway::spawn(bundle.urls.wss.clone(), GatewayOptions::default()).await.unwrap();
|
||||||
common::teardown(bundle).await
|
common::teardown(bundle).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ impl Observer<GatewayReady> for GatewayReadyObserver {
|
||||||
async fn test_gateway_authenticate() {
|
async fn test_gateway_authenticate() {
|
||||||
let bundle = common::setup().await;
|
let bundle = common::setup().await;
|
||||||
|
|
||||||
let gateway: GatewayHandle = Gateway::spawn(bundle.urls.wss.clone()).await.unwrap();
|
let gateway: GatewayHandle = Gateway::spawn(bundle.urls.wss.clone(), GatewayOptions::default()).await.unwrap();
|
||||||
|
|
||||||
let (ready_send, mut ready_receive) = tokio::sync::mpsc::channel(1);
|
let (ready_send, mut ready_receive) = tokio::sync::mpsc::channel(1);
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ async fn test_gateway_authenticate() {
|
||||||
println!("Timed out waiting for event, failing..");
|
println!("Timed out waiting for event, failing..");
|
||||||
assert!(false);
|
assert!(false);
|
||||||
}
|
}
|
||||||
// Sucess, we have received it
|
// Success, we have received it
|
||||||
Some(_) = ready_receive.recv() => {}
|
Some(_) = ready_receive.recv() => {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue