diff options
author | Ilion Beyst <ilion.beyst@gmail.com> | 2022-07-20 23:21:06 +0200 |
---|---|---|
committer | Ilion Beyst <ilion.beyst@gmail.com> | 2022-07-20 23:21:06 +0200 |
commit | 73c536b4a6d8cbc788ca4a22ed1c62744f3fa12f (patch) | |
tree | 5a48baeffd4488acd8e56118e79eebc32c0ef57a /planetwars-server/src | |
parent | f058000072d05b8632bc7c8da0d8681c490e5f42 (diff) | |
download | planetwars.dev-73c536b4a6d8cbc788ca4a22ed1c62744f3fa12f.tar.xz planetwars.dev-73c536b4a6d8cbc788ca4a22ed1c62744f3fa12f.zip |
wrap bot api in oneof for extendability
Diffstat (limited to 'planetwars-server/src')
-rw-r--r-- | planetwars-server/src/modules/bot_api.rs | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/planetwars-server/src/modules/bot_api.rs b/planetwars-server/src/modules/bot_api.rs index 33f5d87..cb12275 100644 --- a/planetwars-server/src/modules/bot_api.rs +++ b/planetwars-server/src/modules/bot_api.rs @@ -66,12 +66,12 @@ impl PlayerRouter { #[tonic::async_trait] impl pb::bot_api_service_server::BotApiService for BotApiServer { - type ConnectBotStream = UnboundedReceiverStream<Result<pb::PlayerRequest, Status>>; + type ConnectPlayerStream = UnboundedReceiverStream<Result<pb::ServerMessage, Status>>; - async fn connect_bot( + async fn connect_player( &self, - req: Request<Streaming<pb::PlayerRequestResponse>>, - ) -> Result<Response<Self::ConnectBotStream>, Status> { + req: Request<Streaming<pb::ClientMessage>>, + ) -> Result<Response<Self::ConnectPlayerStream>, Status> { // TODO: clean up errors let player_key = req .metadata() @@ -141,8 +141,8 @@ impl pb::bot_api_service_server::BotApiService for BotApiServer { // TODO: please rename me struct SyncThingData { - tx: oneshot::Sender<Streaming<pb::PlayerRequestResponse>>, - server_messages: mpsc::UnboundedReceiver<Result<pb::PlayerRequest, Status>>, + tx: oneshot::Sender<Streaming<pb::ClientMessage>>, + server_messages: mpsc::UnboundedReceiver<Result<pb::ServerMessage, Status>>, } struct RemoteBotSpec { @@ -199,29 +199,41 @@ impl runner::BotSpec for RemoteBotSpec { async fn handle_bot_messages( player_id: u32, event_bus: Arc<Mutex<EventBus>>, - mut messages: Streaming<pb::PlayerRequestResponse>, + mut messages: Streaming<pb::ClientMessage>, ) { + // TODO: can this be writte nmore nicely? while let Some(message) = messages.message().await.unwrap() { - let request_id = (player_id, message.request_id as u32); - event_bus - .lock() - .unwrap() - .resolve_request(request_id, Ok(message.content)); + match message.client_message { + Some(pb::client_message::ClientMessage::RequestResponse(resp)) => { + let request_id = (player_id, resp.request_id as u32); + event_bus + .lock() + .unwrap() + .resolve_request(request_id, Ok(resp.content)); + } + _ => (), + } } } struct RemoteBotHandle { - sender: mpsc::UnboundedSender<Result<pb::PlayerRequest, Status>>, + sender: mpsc::UnboundedSender<Result<pb::ServerMessage, Status>>, player_id: u32, event_bus: Arc<Mutex<EventBus>>, } impl PlayerHandle for RemoteBotHandle { fn send_request(&mut self, r: RequestMessage) { - let res = self.sender.send(Ok(pb::PlayerRequest { + let req = pb::PlayerRequest { request_id: r.request_id as i32, content: r.content, - })); + }; + + let server_message = pb::ServerMessage { + server_message: Some(pb::server_message::ServerMessage::PlayerRequest(req)), + }; + + let res = self.sender.send(Ok(server_message)); match res { Ok(()) => { // schedule a timeout. See comments at method implementation |