feat: msg
This commit is contained in:
39
Cargo.lock
generated
39
Cargo.lock
generated
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
futures-channel = "0.3"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
|
||||
60
src/main.rs
60
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<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
|
||||
|
||||
Reference in New Issue
Block a user