diff --git a/server/src/rpc.rs b/server/src/rpc.rs index 216d8702..39710fe1 100644 --- a/server/src/rpc.rs +++ b/server/src/rpc.rs @@ -128,6 +128,7 @@ pub enum RpcRequest { pub trait User { fn receive(&mut self, data: Vec, stripe: &StripeClient) -> Result; fn connected(&mut self) -> Result<(), Error>; + fn disconnected(&self) -> Result<(), Error>; fn send(&mut self, msg: RpcMessage) -> Result<(), Error>; } @@ -170,8 +171,8 @@ impl Handler for Connection { } fn on_close(&mut self, _: CloseCode, _: &str) { - info!("websocket disconnected id={:?}", self.id); self.events.send(Event::Disconnect(self.id)).unwrap(); + self.user.disconnected().unwrap(); } fn on_request(&mut self, req: &Request) -> ws::Result { diff --git a/server/src/user_anonymous.rs b/server/src/user_anonymous.rs index be39a052..fe1d9045 100644 --- a/server/src/user_anonymous.rs +++ b/server/src/user_anonymous.rs @@ -74,6 +74,10 @@ impl User for Anonymous { Ok(()) } + fn disconnected(&self) -> Result<(), Error> { + Ok(()) + } + fn receive(&mut self, data: Vec, _stripe: &StripeClient) -> Result { match from_slice::(&data) { Ok(v) => { diff --git a/server/src/user_authenticated.rs b/server/src/user_authenticated.rs index 6949fe0c..23a45f34 100644 --- a/server/src/user_authenticated.rs +++ b/server/src/user_authenticated.rs @@ -134,6 +134,11 @@ impl User for Authenticated { Ok(()) } + fn disconnected(&self) -> Result<(), Error> { + info!("user disconnected name={:?}", self.account.name); + Ok(()) + } + fn receive(&mut self, data: Vec, stripe: &StripeClient) -> Result { // cast the msg to this type to receive method name let begin = Instant::now();