Give websocket a send and receive channel
This commit is contained in:
parent
6a99129fe7
commit
47c38c5541
|
@ -310,15 +310,25 @@ impl<'a> WebSocketConnection {
|
||||||
));
|
));
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
let (mut channel_write, mut channel_read): (
|
let (mut send_channel_write, mut send_channel_read): (
|
||||||
Sender<tokio_tungstenite::tungstenite::Message>,
|
Sender<tokio_tungstenite::tungstenite::Message>,
|
||||||
Receiver<tokio_tungstenite::tungstenite::Message>,
|
Receiver<tokio_tungstenite::tungstenite::Message>,
|
||||||
) = channel(32);
|
) = channel(32);
|
||||||
|
|
||||||
let shared_channel_write = Arc::new(Mutex::new(channel_write));
|
let (mut receive_channel_write, mut receive_channel_read): (
|
||||||
let clone_shared_channel_write = shared_channel_write.clone();
|
Sender<tokio_tungstenite::tungstenite::Message>,
|
||||||
let shared_channel_read = Arc::new(Mutex::new(channel_read));
|
Receiver<tokio_tungstenite::tungstenite::Message>,
|
||||||
let clone_shared_channel_read = shared_channel_read.clone();
|
) = channel(32);
|
||||||
|
|
||||||
|
let shared_send_channel_write = Arc::new(Mutex::new(send_channel_write));
|
||||||
|
let shared_send_channel_read = Arc::new(Mutex::new(send_channel_read));
|
||||||
|
|
||||||
|
let clone_shared_send_channel_write = shared_send_channel_write.clone();
|
||||||
|
|
||||||
|
let shared_receive_channel_read = Arc::new(Mutex::new(receive_channel_read));
|
||||||
|
let shared_receive_channel_write = Arc::new(Mutex::new(receive_channel_write));
|
||||||
|
|
||||||
|
let clone_shared_receive_channel_read = shared_receive_channel_read.clone();
|
||||||
|
|
||||||
task::spawn(async move {
|
task::spawn(async move {
|
||||||
let (mut ws_stream, _) = match connect_async_tls_with_config(
|
let (mut ws_stream, _) = match connect_async_tls_with_config(
|
||||||
|
@ -336,14 +346,14 @@ impl<'a> WebSocketConnection {
|
||||||
))*/
|
))*/
|
||||||
};
|
};
|
||||||
|
|
||||||
let (mut write_tx, mut write_rx) = ws_stream.split();
|
let (mut ws_tx, mut ws_rx) = ws_stream.split();
|
||||||
|
|
||||||
while let Some(msg) = shared_channel_read.lock().await.recv().await {
|
while let Some(msg) = shared_send_channel_read.lock().await.recv().await {
|
||||||
write_tx.send(msg).await.unwrap();
|
ws_tx.send(msg).await.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
let event = while let Some(msg) = write_rx.next().await {
|
let event = while let Some(msg) = ws_rx.next().await {
|
||||||
shared_channel_write
|
shared_receive_channel_write
|
||||||
.lock()
|
.lock()
|
||||||
.await
|
.await
|
||||||
.send(msg.unwrap())
|
.send(msg.unwrap())
|
||||||
|
@ -353,8 +363,8 @@ impl<'a> WebSocketConnection {
|
||||||
});
|
});
|
||||||
|
|
||||||
WebSocketConnection {
|
WebSocketConnection {
|
||||||
tx: clone_shared_channel_write,
|
tx: clone_shared_send_channel_write,
|
||||||
rx: clone_shared_channel_read,
|
rx: clone_shared_receive_channel_read,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -513,8 +523,18 @@ mod example {
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_gateway() {
|
async fn test_gateway() {
|
||||||
let gateway = Gateway::new("ws://localhost:3001/".to_string())
|
let mut gateway = Gateway::new("wss://localhost:3001/".to_string())
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
let mut test_indetify = GatewayIdentifyPayload::default();
|
||||||
|
test_indetify.intents = 1000;
|
||||||
|
test_indetify.token = "haaaaeeuuuggghh".to_string();
|
||||||
|
test_indetify.properties = GatewayIdentifyConnectionProps { os: "Linux".to_string(), browser: "Very Poggers Discord Client".to_string(), device: "Some device idfk".to_string()};
|
||||||
|
gateway.send_identify(test_indetify).await;
|
||||||
|
|
||||||
|
loop {
|
||||||
|
gateway.update_events().await;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue