1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
use crate::ctx::RequestContext; use crate::messages::req::RequestMessage; use crate::messages::rsp::ResponseMessage; use crate::{Project, Result}; #[derive(Debug)] pub struct MessageHandler { project: Project, request: RequestContext, log: slog::Logger } impl MessageHandler { pub fn new(project: Project, request: RequestContext) -> MessageHandler { let log = request.log().new(slog::o!("service" => "message_handler")); MessageHandler { project, request, log } } pub fn on_open(&self) -> Vec<ResponseMessage> { vec![ResponseMessage::Connected { p: self.project.to_description(), u: (*self.request.user()).clone() }] } pub fn on_closed(&self) -> Vec<ResponseMessage> { Vec::new() } pub fn on_message(&self, msg: RequestMessage) -> Result<Vec<ResponseMessage>> { let mut ret = Vec::new(); match msg { RequestMessage::Ping { v } => { ret.push(ResponseMessage::Pong { v }); } msg => { slog::warn!(self.log, "Unhandled RequestMessage [{:?}]", msg); } } Ok(ret) } pub fn on_error(&self) {} pub fn log(&self) -> &slog::Logger { &self.log } }