feat: msg
This commit is contained in:
39
Cargo.lock
generated
39
Cargo.lock
generated
@@ -501,6 +501,8 @@ dependencies = [
|
|||||||
"futures-util",
|
"futures-util",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"rust_util",
|
"rust_util",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-tungstenite",
|
"tokio-tungstenite",
|
||||||
"tungstenite",
|
"tungstenite",
|
||||||
@@ -524,12 +526,49 @@ version = "1.0.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd"
|
checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ryu"
|
||||||
|
version = "1.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scopeguard"
|
name = "scopeguard"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
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]]
|
[[package]]
|
||||||
name = "sha-1"
|
name = "sha-1"
|
||||||
version = "0.9.6"
|
version = "0.9.6"
|
||||||
|
|||||||
@@ -14,3 +14,5 @@ tokio = { version = "1.0.0", features = ["full"]}
|
|||||||
futures-util = "0.3"
|
futures-util = "0.3"
|
||||||
lazy_static = "1.4"
|
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 tungstenite::protocol::Message;
|
||||||
use rust_util::XResult;
|
use rust_util::XResult;
|
||||||
use std::collections::BTreeMap;
|
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 Tx = UnboundedSender<Message>;
|
||||||
type PeerMap = Arc<Mutex<HashMap<SocketAddr, Tx>>>;
|
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)
|
warning!("Ignore binary message from: {:?} - {:?}", room_id, client_id)
|
||||||
},
|
},
|
||||||
Message::Text(msg) => {
|
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 ...
|
// TODO ...
|
||||||
// create/enter room
|
// create/enter room
|
||||||
// exit room
|
// exit room
|
||||||
|
|||||||
Reference in New Issue
Block a user