From 78fa15b5ec2494a4e42cd30c953e3c6720dcb5c6 Mon Sep 17 00:00:00 2001 From: "Hatter Jiang@Pixelbook" Date: Fri, 14 May 2021 07:58:16 +0800 Subject: [PATCH] feat: msg --- Cargo.lock | 39 ++++++++++++++++++++++++++++++++++ Cargo.toml | 4 +++- src/main.rs | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 58aa6c7..6c70ebd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -501,6 +501,8 @@ dependencies = [ "futures-util", "lazy_static", "rust_util", + "serde", + "serde_json", "tokio", "tokio-tungstenite", "tungstenite", @@ -524,12 +526,49 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd" +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + [[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "serde" +version = "1.0.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha-1" version = "0.9.6" diff --git a/Cargo.toml b/Cargo.toml index 2837aac..abd8208 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,4 +13,6 @@ tokio-tungstenite = "0.14" tokio = { version = "1.0.0", features = ["full"]} futures-util = "0.3" lazy_static = "1.4" -futures-channel = "0.3" \ No newline at end of file +futures-channel = "0.3" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" diff --git a/src/main.rs b/src/main.rs index 1a4e1ed..ba0f757 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,53 @@ use tokio::net::{TcpListener, TcpStream}; use tungstenite::protocol::Message; use rust_util::XResult; use std::collections::BTreeMap; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +enum RoomMessageType { + #[serde(rename = "Enter")] + CreateOrEnter, + Exit, + Destroy, + ListPeers, + Broadcast, + Peer, +} + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +enum RoomMessageDownType { + PeerEnter, + PeerExit, + PeerMessage, + BroadcastMessage, + ReplayMessage, +} + +impl Default for RoomMessageDownType { + fn default() -> Self { + Self::ReplayMessage + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +struct RoomMessage { + r#type: RoomMessageType, + room_id: Option, + client_id: Option, + peer_id: Option, + data: Option, +} + +#[derive(Clone, Debug, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +struct RoomMessageDown { + r#type: RoomMessageDownType, + peer_id: Option, + replay_code: Option, + replay_message: Option, + data: Option, +} type Tx = UnboundedSender; type PeerMap = Arc>>; @@ -51,6 +98,19 @@ async fn inner_handle_connection(peer_map: PeerMap, room_map: RoomMap, raw_strea warning!("Ignore binary message from: {:?} - {:?}", room_id, client_id) }, Message::Text(msg) => { + let msg = serde_json::from_str::(&msg); + match msg { + Err(e) => { + warning!("Parse message: from: {:?} - {:?}, failed: {}", room_id, client_id, e); + let m = RoomMessageDown{ + r#type: RoomMessageDownType::PeerMessage, + ..Default::default() + }; + }, + Ok(msg) => { + + }, + } // TODO ... // create/enter room // exit room