Change name from AsyncSendMsg to SendMsg and remove old version
This commit is contained in:
		| @@ -102,6 +102,7 @@ async fn main() { | |||||||
|             let guestserver_root_cert_der = Arc::clone(&guestserver_root_cert_der); |             let guestserver_root_cert_der = Arc::clone(&guestserver_root_cert_der); | ||||||
|             let server_root_cert = Arc::clone(&server_root_cert); |             let server_root_cert = Arc::clone(&server_root_cert); | ||||||
|             let scdb_addr = scdb_addr.clone(); |             let scdb_addr = scdb_addr.clone(); | ||||||
|  |             let pdcm_addr = pdcm_addr.clone(); | ||||||
|             let sm_addr = sm_addr.clone(); |             let sm_addr = sm_addr.clone(); | ||||||
|  |  | ||||||
|             // Set up TLS service factory |             // Set up TLS service factory | ||||||
| @@ -114,13 +115,15 @@ async fn main() { | |||||||
|                     let guestserver_root_cert_der = Arc::clone(&guestserver_root_cert_der); |                     let guestserver_root_cert_der = Arc::clone(&guestserver_root_cert_der); | ||||||
|                     let server_root_cert = Arc::clone(&server_root_cert); |                     let server_root_cert = Arc::clone(&server_root_cert); | ||||||
|                     let scdb_addr = scdb_addr.clone(); |                     let scdb_addr = scdb_addr.clone(); | ||||||
|  |                     let pdcm_addr = pdcm_addr.clone(); | ||||||
|                     let sm_addr = sm_addr.clone(); |                     let sm_addr = sm_addr.clone(); | ||||||
|                     async move { |                     async move { | ||||||
|                         let peer_certs = stream.get_ref().1.peer_certificates().unwrap(); |                         let peer_certs = stream.get_ref().1.peer_certificates().unwrap(); | ||||||
|                         let peer_cert_bytes = peer_certs.first().unwrap().to_vec(); |                         let peer_cert_bytes = peer_certs.first().unwrap().to_vec(); | ||||||
|                         let peer_root_cert_der = peer_certs.last().unwrap().clone(); |                         let peer_root_cert_der = peer_certs.last().unwrap().clone(); | ||||||
|                         let scdb_addr = scdb_addr.clone(); |                         // let scdb_addr = scdb_addr.clone(); | ||||||
|                         let sm_addr = sm_addr.clone(); |                         // let pdcm_addr = pdcm_addr.clone(); | ||||||
|  |                         // let sm_addr = sm_addr.clone(); | ||||||
|                         if peer_root_cert_der == *server_root_cert_der { |                         if peer_root_cert_der == *server_root_cert_der { | ||||||
|                             info!("Server connection"); |                             info!("Server connection"); | ||||||
|                             let mut transport = Framed::new(stream, LengthDelimitedCodec::new()); |                             let mut transport = Framed::new(stream, LengthDelimitedCodec::new()); | ||||||
| @@ -155,6 +158,10 @@ async fn main() { | |||||||
|                                                 transport.send(rmp_serde::to_vec(&reply).unwrap().into()).await.unwrap(); |                                                 transport.send(rmp_serde::to_vec(&reply).unwrap().into()).await.unwrap(); | ||||||
|                                                 server_subscribe_handler(transport, name, sm_addr).await; |                                                 server_subscribe_handler(transport, name, sm_addr).await; | ||||||
|                                             } |                                             } | ||||||
|  |                                             OpenDataStream(conn_id) => { | ||||||
|  |                                                 info!("OpenDataStream with {:?}", conn_id); | ||||||
|  |                                                 // TODO: OpenDataStream | ||||||
|  |                                             } | ||||||
|                                         } |                                         } | ||||||
|                                     } |                                     } | ||||||
|                                     Err(e) => { |                                     Err(e) => { | ||||||
| @@ -171,7 +178,6 @@ async fn main() { | |||||||
|                             guestserver_handler(transport, scdb_addr, &server_root_cert).await; |                             guestserver_handler(transport, scdb_addr, &server_root_cert).await; | ||||||
|                         } else if peer_root_cert_der == *client_root_cert_der { |                         } else if peer_root_cert_der == *client_root_cert_der { | ||||||
|                             info!("Client connection"); |                             info!("Client connection"); | ||||||
|                             //pdcm_addr |  | ||||||
|                             let codec = LengthDelimitedCodec::new(); |                             let codec = LengthDelimitedCodec::new(); | ||||||
|                             let transport = Framed::new(stream, codec); |                             let transport = Framed::new(stream, codec); | ||||||
|                             client_handler(transport, sm_addr).await; |                             client_handler(transport, sm_addr).await; | ||||||
| @@ -339,6 +345,10 @@ async fn client_handler(mut transport: TransportStream, sm_addr: Addr<ServerMana | |||||||
|                                 let reply = ToClientResponse::OkServerList { data }; |                                 let reply = ToClientResponse::OkServerList { data }; | ||||||
|                                 transport.send(rmp_serde::to_vec(&reply).unwrap().into()).await.unwrap(); |                                 transport.send(rmp_serde::to_vec(&reply).unwrap().into()).await.unwrap(); | ||||||
|                             } |                             } | ||||||
|  |                             FromClientCommand::UpgradeToDataStream(conn_id) => { | ||||||
|  |                                 info!("Upgrade to DataStream with conn_id {:?}", conn_id); | ||||||
|  |                                 // TODO: Upgrade to DataStream | ||||||
|  |                             } | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                     Err(e) => { |                     Err(e) => { | ||||||
|   | |||||||
| @@ -22,22 +22,15 @@ enum SendMsgResult { | |||||||
|     Rejected, |     Rejected, | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Message)] |  | ||||||
| #[rtype(result = "SendMsgResult")] |  | ||||||
| struct SendMsg { |  | ||||||
|     msg: ToServerMessageBody, |  | ||||||
|     reply_channel: oneshot::Sender<FromServerReplyBody> |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #[derive(Error, Debug)] | #[derive(Error, Debug)] | ||||||
| pub enum AsyncSendMsgError { | pub enum SendMsgError { | ||||||
|     #[error("Generic Failure")] |     #[error("Generic Failure")] | ||||||
|     GenericFailure, |     GenericFailure, | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Message)] | #[derive(Message)] | ||||||
| #[rtype(result = "Result<FromServerReplyBody, AsyncSendMsgError>")] | #[rtype(result = "Result<FromServerReplyBody, SendMsgError>")] | ||||||
| struct AsyncSendMsg { | struct SendMsg { | ||||||
|     msg: ToServerMessageBody, |     msg: ToServerMessageBody, | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -48,38 +41,6 @@ struct ServerTransporter { | |||||||
|     reply_channels: HashMap<u64, oneshot::Sender<FromServerReplyBody>>, |     reply_channels: HashMap<u64, oneshot::Sender<FromServerReplyBody>>, | ||||||
| } | } | ||||||
|  |  | ||||||
| impl Handler<AsyncSendMsg> for ServerTransporter { |  | ||||||
|     type Result = ResponseFuture<Result<FromServerReplyBody, AsyncSendMsgError>>; |  | ||||||
|  |  | ||||||
|     fn handle(&mut self, msg: AsyncSendMsg, _ctx: &mut Self::Context) -> Self::Result { |  | ||||||
|         let (reply_channel_tx, reply_channel_rx) = oneshot::channel(); |  | ||||||
|         let mut reply_id: u64; |  | ||||||
|         if self.reply_channels.len() == u64::MAX as usize { |  | ||||||
|             return Box::pin(fut::ready(Err(AsyncSendMsgError::GenericFailure))); |  | ||||||
|         } |  | ||||||
|         loop { |  | ||||||
|             reply_id = random(); |  | ||||||
|             if !self.reply_channels.contains_key(&reply_id) { |  | ||||||
|                 break; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         self.reply_channels.insert(reply_id, reply_channel_tx); |  | ||||||
|         let msg = ToServerMessage::Msg { |  | ||||||
|             reply_id, |  | ||||||
|             body: msg.msg, |  | ||||||
|         }; |  | ||||||
|         let payload: Bytes = rmp_serde::to_vec(&msg).unwrap().into(); |  | ||||||
|         let arc_tx = self.tx.clone(); |  | ||||||
|         Box::pin(async move { |  | ||||||
|             arc_tx.lock().await.send(payload).await.map_err(|e| AsyncSendMsgError::GenericFailure)?; |  | ||||||
|             info!("msg sent"); |  | ||||||
|             let r = reply_channel_rx.await.unwrap(); |  | ||||||
|             info!("reply received"); |  | ||||||
|             Ok(r) |  | ||||||
|         }) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| impl ServerTransporter { | impl ServerTransporter { | ||||||
|     fn new(transport: TransportStream) -> Self { |     fn new(transport: TransportStream) -> Self { | ||||||
|         let internal = transport.into_inner(); |         let internal = transport.into_inner(); | ||||||
| @@ -133,12 +94,13 @@ impl Actor for ServerTransporter { | |||||||
| } | } | ||||||
|  |  | ||||||
| impl Handler<SendMsg> for ServerTransporter { | impl Handler<SendMsg> for ServerTransporter { | ||||||
|     type Result = SendMsgResult; |     type Result = ResponseFuture<Result<FromServerReplyBody, SendMsgError>>; | ||||||
|  |  | ||||||
|     fn handle(&mut self, msg: SendMsg, ctx: &mut Self::Context) -> Self::Result { |     fn handle(&mut self, msg: SendMsg, _ctx: &mut Self::Context) -> Self::Result { | ||||||
|  |         let (reply_channel_tx, reply_channel_rx) = oneshot::channel(); | ||||||
|         let mut reply_id: u64; |         let mut reply_id: u64; | ||||||
|         if self.reply_channels.len() == u64::MAX as usize { |         if self.reply_channels.len() == u64::MAX as usize { | ||||||
|             return SendMsgResult::Rejected; |             return Box::pin(fut::ready(Err(SendMsgError::GenericFailure))); | ||||||
|         } |         } | ||||||
|         loop { |         loop { | ||||||
|             reply_id = random(); |             reply_id = random(); | ||||||
| @@ -146,19 +108,20 @@ impl Handler<SendMsg> for ServerTransporter { | |||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         self.reply_channels.insert(reply_id, msg.reply_channel); |         self.reply_channels.insert(reply_id, reply_channel_tx); | ||||||
|         let msg = ToServerMessage::Msg { |         let msg = ToServerMessage::Msg { | ||||||
|             reply_id, |             reply_id, | ||||||
|             body: msg.msg, |             body: msg.msg, | ||||||
|         }; |         }; | ||||||
|         let payload: Bytes = rmp_serde::to_vec(&msg).unwrap().into(); |         let payload: Bytes = rmp_serde::to_vec(&msg).unwrap().into(); | ||||||
|         let arc_tx = self.tx.clone(); |         let arc_tx = self.tx.clone(); | ||||||
|         ctx.spawn(async move { |         Box::pin(async move { | ||||||
|             arc_tx.lock().await.send(payload).await |             arc_tx.lock().await.send(payload).await.map_err(|e| SendMsgError::GenericFailure)?; | ||||||
|         }.into_actor(self).map(|res, _a, _ctx| { |             info!("msg sent"); | ||||||
|             info!("ToServerMsg sent result: {:?}", res); |             let r = reply_channel_rx.await.unwrap(); | ||||||
|         })); |             info!("reply received"); | ||||||
|         SendMsgResult::Accepted |             Ok(r) | ||||||
|  |         }) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -311,7 +274,7 @@ impl Handler<RequestServer> for ServerManager { | |||||||
|             match pdcdb_addr.send(NewPendingConn { server_conn_id, client_conn_id }).await.unwrap() { |             match pdcdb_addr.send(NewPendingConn { server_conn_id, client_conn_id }).await.unwrap() { | ||||||
|                 Ok(_) => { |                 Ok(_) => { | ||||||
|                     let msg = ToServerMessageBody::Request { conn_id: server_conn_id }; |                     let msg = ToServerMessageBody::Request { conn_id: server_conn_id }; | ||||||
|                     match sh_addr.send(AsyncSendMsg { msg }).await.unwrap() { |                     match sh_addr.send(SendMsg { msg }).await.unwrap() { | ||||||
|                         Ok(reply) => match reply { |                         Ok(reply) => match reply { | ||||||
|                             FromServerReplyBody::RequestAccepted => { |                             FromServerReplyBody::RequestAccepted => { | ||||||
|                                 Ok(client_conn_id) |                                 Ok(client_conn_id) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user