feat: msg

This commit is contained in:
2021-05-14 07:58:16 +08:00
parent 10bc4d20a2
commit 78fa15b5ec
3 changed files with 102 additions and 1 deletions

39
Cargo.lock generated
View File

@@ -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"

View File

@@ -14,3 +14,5 @@ tokio = { version = "1.0.0", features = ["full"]}
futures-util = "0.3"
lazy_static = "1.4"
futures-channel = "0.3"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

View File

@@ -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<String>,
client_id: Option<String>,
peer_id: Option<String>,
data: Option<String>,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
struct RoomMessageDown {
r#type: RoomMessageDownType,
peer_id: Option<String>,
replay_code: Option<i32>,
replay_message: Option<String>,
data: Option<String>,
}
type Tx = UnboundedSender<Message>;
type PeerMap = Arc<Mutex<HashMap<SocketAddr, Tx>>>;
@@ -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::<RoomMessage>(&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