feat: message payload

This commit is contained in:
nathan 2023-03-14 08:51:01 +08:00
parent 5a7e223b99
commit db498ef5e8
4 changed files with 9 additions and 24 deletions

View File

@ -27,12 +27,12 @@ impl MessageReceivers {
MessageReceivers::default() MessageReceivers::default()
} }
pub fn set(&mut self, channel: u8, receiver: Arc<dyn MessageReceiver>) { pub fn insert(&mut self, channel: u8, receiver: Arc<dyn MessageReceiver>) {
self.inner.insert(channel, receiver); self.inner.insert(channel, receiver);
} }
pub fn get(&self, source: u8) -> Option<Arc<dyn MessageReceiver>> { pub fn get(&self, source: u8) -> Option<&Arc<dyn MessageReceiver>> {
self.inner.get(&source).cloned() self.inner.get(&source)
} }
} }
@ -102,7 +102,7 @@ impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WSClient {
ctx.pong(&msg); ctx.pong(&msg);
} }
Ok(Pong(_msg)) => { Ok(Pong(_msg)) => {
// tracing::debug!("Receive {} pong {:?}", &self.session_id, &msg); tracing::trace!("Receive {} pong {:?}", &self.session_id, &msg);
self.hb = Instant::now(); self.hb = Instant::now();
} }
Ok(Binary(bytes)) => { Ok(Binary(bytes)) => {

View File

@ -69,10 +69,6 @@ pub struct SocketMessagePayload {
} }
impl SocketMessagePayload { impl SocketMessagePayload {
pub fn to_bytes(&self) -> Vec<u8> {
bincode::serialize(self).unwrap()
}
pub fn from_bytes<T: AsRef<[u8]>>(bytes: T) -> Self { pub fn from_bytes<T: AsRef<[u8]>>(bytes: T) -> Self {
bincode::deserialize(bytes.as_ref()).unwrap() bincode::deserialize(bytes.as_ref()).unwrap()
} }

View File

@ -9,4 +9,3 @@ pub use server::WSServer;
pub(crate) const HEARTBEAT_INTERVAL: Duration = Duration::from_secs(8); pub(crate) const HEARTBEAT_INTERVAL: Duration = Duration::from_secs(8);
pub(crate) const PING_TIMEOUT: Duration = Duration::from_secs(60); pub(crate) const PING_TIMEOUT: Duration = Duration::from_secs(60);
pub(crate) const MAX_PAYLOAD_SIZE: usize = 262_144; // max payload size is 256k

View File

@ -1,18 +1,11 @@
use crate::component::ws::entities::{ use crate::component::ws::entities::{Connect, Disconnect, WSError, WebSocketMessage};
Connect, Disconnect, Session, WSError, WSSessionId, WebSocketMessage,
};
use actix::{Actor, Context, Handler}; use actix::{Actor, Context, Handler};
use dashmap::DashMap;
pub struct WSServer { pub struct WSServer {}
sessions: DashMap<WSSessionId, Session>,
}
impl std::default::Default for WSServer { impl std::default::Default for WSServer {
fn default() -> Self { fn default() -> Self {
Self { Self {}
sessions: DashMap::new(),
}
} }
} }
impl WSServer { impl WSServer {
@ -32,17 +25,14 @@ impl Actor for WSServer {
impl Handler<Connect> for WSServer { impl Handler<Connect> for WSServer {
type Result = Result<(), WSError>; type Result = Result<(), WSError>;
fn handle(&mut self, msg: Connect, _ctx: &mut Context<Self>) -> Self::Result { fn handle(&mut self, _msg: Connect, _ctx: &mut Context<Self>) -> Self::Result {
let session: Session = msg.into();
self.sessions.insert(session.id.clone(), session);
Ok(()) Ok(())
} }
} }
impl Handler<Disconnect> for WSServer { impl Handler<Disconnect> for WSServer {
type Result = Result<(), WSError>; type Result = Result<(), WSError>;
fn handle(&mut self, msg: Disconnect, _: &mut Context<Self>) -> Self::Result { fn handle(&mut self, _msg: Disconnect, _: &mut Context<Self>) -> Self::Result {
self.sessions.remove(&msg.sid);
Ok(()) Ok(())
} }
} }