send player_id through request metadata
This commit is contained in:
parent
d0faec7d1f
commit
2f915af919
2 changed files with 25 additions and 4 deletions
|
@ -6,13 +6,21 @@ use pb::bot_api_service_client::BotApiServiceClient;
|
||||||
use tokio_stream::wrappers::UnboundedReceiverStream;
|
use tokio_stream::wrappers::UnboundedReceiverStream;
|
||||||
|
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
|
use tonic::{metadata::MetadataValue, transport::Channel, Request};
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let mut client = BotApiServiceClient::connect("http://localhost:50051")
|
let channel = Channel::from_static("http://localhost:50051")
|
||||||
|
.connect()
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
let mut client = BotApiServiceClient::with_interceptor(channel, |mut req: Request<()>| {
|
||||||
|
let player_id: MetadataValue<_> = "test_player".parse().unwrap();
|
||||||
|
req.metadata_mut().insert("player_id", player_id);
|
||||||
|
Ok(req)
|
||||||
|
});
|
||||||
|
|
||||||
let (tx, rx) = mpsc::unbounded_channel();
|
let (tx, rx) = mpsc::unbounded_channel();
|
||||||
let mut stream = client
|
let mut stream = client
|
||||||
.connect_bot(UnboundedReceiverStream::new(rx))
|
.connect_bot(UnboundedReceiverStream::new(rx))
|
||||||
|
|
|
@ -62,10 +62,23 @@ impl pb::bot_api_service_server::BotApiService for BotApiServer {
|
||||||
&self,
|
&self,
|
||||||
req: Request<Streaming<pb::PlayerRequestResponse>>,
|
req: Request<Streaming<pb::PlayerRequestResponse>>,
|
||||||
) -> Result<Response<Self::ConnectBotStream>, Status> {
|
) -> Result<Response<Self::ConnectBotStream>, Status> {
|
||||||
println!("bot connected");
|
// TODO: clean up errors
|
||||||
|
let player_id = req
|
||||||
|
.metadata()
|
||||||
|
.get("player_id")
|
||||||
|
.ok_or_else(|| Status::unauthenticated("no player_id provided"))?;
|
||||||
|
|
||||||
|
let player_id_str = player_id
|
||||||
|
.to_str()
|
||||||
|
.map_err(|_| Status::invalid_argument("unreadable string"))?;
|
||||||
|
|
||||||
|
let sync_data = self
|
||||||
|
.router
|
||||||
|
.get(player_id_str)
|
||||||
|
.ok_or_else(|| Status::not_found("player_id not found"))?;
|
||||||
|
|
||||||
let stream = req.into_inner();
|
let stream = req.into_inner();
|
||||||
// TODO: return error when player does not exist
|
|
||||||
let sync_data = self.router.get("test_player").unwrap();
|
|
||||||
sync_data.tx.send(stream).unwrap();
|
sync_data.tx.send(stream).unwrap();
|
||||||
Ok(Response::new(UnboundedReceiverStream::new(
|
Ok(Response::new(UnboundedReceiverStream::new(
|
||||||
sync_data.server_messages,
|
sync_data.server_messages,
|
||||||
|
|
Loading…
Reference in a new issue