M crates/client/src/lib.rs => crates/client/src/lib.rs +2 -1
@@ 2,7 2,8 @@ use crate::components::PlayerResources;
use bevy_ecs::{event::Events, world::World};
use components::{Camera, Chat, Part, Player, RecvPacket, SendPacket, Texture, Transform};
use nalgebra::{Rotation2, Scale3, Translation3};
-use networking::ws::Ws;
+use platform::websocket::Ws;
+use crate::networking::websocket::Websocket;
use platform::assets::Assets;
use rendering::assets::AssetLoader;
use rendering::App;
M crates/client/src/native/mod.rs => crates/client/src/native/mod.rs +1 -0
@@ 1,4 1,5 @@
pub mod assets;
+pub mod websocket;
/// --- IMPORTANT: THIS IS A DUAL TARGET CRATE ---
/// THIS WILL ONLY EXECUTE ON NATIVE
R crates/client/src/networking/ws_native.rs => crates/client/src/native/websocket.rs +8 -10
@@ 7,13 7,11 @@ use bevy_ecs::system::Resource;
use crossbeam::channel::{unbounded, Receiver, Sender};
use starkingdoms_common::packet::{MsgFromError, Packet};
use tungstenite::{connect, stream::MaybeTlsStream, Message, WebSocket};
-
-pub trait PacketMessageConvert {
- fn from_message(value: &Message) -> Result<Packet, MsgFromError>;
- fn into_message(&self) -> Message;
-}
+use crate::networking::websocket::{PacketMessageConvert, Websocket};
impl PacketMessageConvert for Packet {
+ type M = Message;
+
fn from_message(value: &Message) -> Result<Packet, MsgFromError> {
match value {
Message::Text(s) => serde_json::from_str(s).map_err(MsgFromError::JSONError),
@@ 24,7 22,7 @@ impl PacketMessageConvert for Packet {
}
}
}
- fn into_message(&self) -> Message {
+ fn as_message(&self) -> Message {
Message::Text(
serde_json::to_string(self)
.expect("failed to serialize packet to json")
@@ 40,8 38,8 @@ pub struct Ws {
pub receiver: Receiver<Packet>,
packet_receiver: Receiver<Packet>,
}
-impl Ws {
- pub fn new() -> Self {
+impl Websocket for Ws {
+ fn new() -> Self {
let (socket, _) = connect("ws://localhost:3000").expect("Failed to connect to server");
let socket = Arc::new(Mutex::new(socket));
let (packet_sender, receiver) = unbounded();
@@ 68,11 66,11 @@ impl Ws {
packet_receiver,
}
}
- pub fn send_packet(&mut self, packet: Packet) {
+ fn send_packet(&mut self, packet: Packet) {
self.socket
.lock()
.unwrap()
- .send(packet.into_message())
+ .send(packet.as_message())
.expect("Couldn't send packet to server");
}
}
M crates/client/src/networking/mod.rs => crates/client/src/networking/mod.rs +1 -6
@@ 14,12 14,7 @@ use crate::components::{
SpriteBundle, Texture, Transform,
};
-#[cfg(target_arch = "wasm32")]
-#[path = "ws_wasm.rs"]
-pub mod ws;
-#[cfg(not(target_arch = "wasm32"))]
-#[path = "ws_native.rs"]
-pub mod ws;
+pub mod websocket;
fn texture_name(part_type: PartType, attached: bool) -> String {
use PartType::*;
A crates/client/src/networking/websocket.rs => crates/client/src/networking/websocket.rs +13 -0
@@ 0,0 1,13 @@
+use starkingdoms_common::packet::{MsgFromError, Packet};
+
+pub trait Websocket {
+ fn new() -> Self;
+ fn send_packet(&mut self, packet: Packet);
+}
+
+pub trait PacketMessageConvert {
+ type M;
+
+ fn from_message(value: &Self::M) -> Result<Packet, MsgFromError>;
+ fn as_message(&self) -> Self::M;
+}<
\ No newline at end of file
M crates/client/src/rendering/mod.rs => crates/client/src/rendering/mod.rs +2 -1
@@ 39,9 39,10 @@ use winit::{
use crate::components::{Camera, Menu, Player, RecvPacket, SendPacket, Texture, Transform};
use crate::networking::process_packets;
-use crate::networking::ws::Ws;
+use crate::platform::websocket::Ws;
use crate::ui::{draw_ui, init_ui};
use assets::AssetLoader;
+use crate::networking::websocket::Websocket;
pub mod assets;
M crates/client/src/wasm/mod.rs => crates/client/src/wasm/mod.rs +1 -0
@@ 5,6 5,7 @@ use tracing_web::{performance_layer, MakeWebConsoleWriter};
use wasm_bindgen::prelude::wasm_bindgen;
pub mod assets;
+pub mod websocket;
/// --- IMPORTANT: THIS IS A DUAL TARGET CRATE ---
/// THIS WILL ONLY EXECUTE ON WEBASSEMBLY
R crates/client/src/networking/ws_wasm.rs => crates/client/src/wasm/websocket.rs +4 -14
@@ 10,6 10,7 @@ use starkingdoms_common::packet::Packet;
use wasm_bindgen::{prelude::Closure, JsCast, JsValue};
use wasm_bindgen_futures::spawn_local;
use web_sys::{MessageEvent, WebSocket};
+use crate::networking::websocket::Websocket;
const PORT: u16 = 3000;
@@ 26,8 27,8 @@ pub struct Ws {
packet_receiver: UnboundedReceiver<Packet>,
}
-impl Ws {
- pub fn new() -> Self {
+impl Websocket for Ws {
+ fn new() -> Self {
let window = web_sys::window().unwrap();
/*let ws = WebSocket::new(&format!(
"ws://{}:{}",
@@ 80,18 81,7 @@ impl Ws {
packet_receiver,
}
}
- pub fn send_all_packets_from_channel(&mut self) {
- //for packet in self.packet_receiver.iter() {
- while let Ok(Some(packet)) = self.packet_receiver.try_next() {
- self.socket
- .0
- .send_with_str(
- &serde_json::to_string(&packet).expect("Couldn't convert packet to json"),
- )
- .expect("Couldn't send packet to server");
- }
- }
- pub fn send_packet(&mut self, packet: Packet) {
+ fn send_packet(&mut self, packet: Packet) {
let socket = self.socket.0.clone();
spawn_local(async move {
//while socket.ready_state() != 1 { }