aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--planetwars-server/Cargo.toml5
-rw-r--r--planetwars-server/build.rs9
-rw-r--r--planetwars-server/src/modules/bot_api.rs30
-rw-r--r--planetwars-server/src/modules/mod.rs1
-rw-r--r--proto/bot_api.proto15
5 files changed, 60 insertions, 0 deletions
diff --git a/planetwars-server/Cargo.toml b/planetwars-server/Cargo.toml
index 4c6ddfc..6b96b04 100644
--- a/planetwars-server/Cargo.toml
+++ b/planetwars-server/Cargo.toml
@@ -26,9 +26,14 @@ toml = "0.5"
planetwars-matchrunner = { path = "../planetwars-matchrunner" }
config = { version = "0.12", features = ["toml"] }
thiserror = "1.0.31"
+prost = "0.10"
+tonic = "0.7.2"
# TODO: remove me
shlex = "1.1"
+[build-dependencies]
+tonic-build = "0.7.2"
+
[dev-dependencies]
parking_lot = "0.11"
diff --git a/planetwars-server/build.rs b/planetwars-server/build.rs
new file mode 100644
index 0000000..97bf355
--- /dev/null
+++ b/planetwars-server/build.rs
@@ -0,0 +1,9 @@
+extern crate tonic_build;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ tonic_build::configure()
+ .build_server(true)
+ .build_client(false)
+ .compile(&["../proto/bot_api.proto"], &["../proto"])?;
+ Ok(())
+}
diff --git a/planetwars-server/src/modules/bot_api.rs b/planetwars-server/src/modules/bot_api.rs
new file mode 100644
index 0000000..1941136
--- /dev/null
+++ b/planetwars-server/src/modules/bot_api.rs
@@ -0,0 +1,30 @@
+pub mod pb {
+ tonic::include_proto!("grpc.planetwars.bot_api");
+}
+
+use std::net::SocketAddr;
+
+use tonic;
+use tonic::transport::Server;
+use tonic::{Request, Response, Status};
+
+pub struct BotApiServer {}
+
+#[tonic::async_trait]
+impl pb::test_service_server::TestService for BotApiServer {
+ async fn greet(&self, req: Request<pb::Hello>) -> Result<Response<pb::HelloResponse>, Status> {
+ Ok(Response::new(pb::HelloResponse {
+ response: format!("hallo {}", req.get_ref().hello_message),
+ }))
+ }
+}
+
+pub async fn run_bot_api() {
+ let server = BotApiServer {};
+ let addr = SocketAddr::from(([127, 0, 0, 1], 50051));
+ Server::builder()
+ .add_service(pb::test_service_server::TestServiceServer::new(server))
+ .serve(addr)
+ .await
+ .unwrap()
+}
diff --git a/planetwars-server/src/modules/mod.rs b/planetwars-server/src/modules/mod.rs
index bea28e0..43c2507 100644
--- a/planetwars-server/src/modules/mod.rs
+++ b/planetwars-server/src/modules/mod.rs
@@ -1,5 +1,6 @@
// This module implements general domain logic, not directly
// tied to the database or API layers.
+pub mod bot_api;
pub mod bots;
pub mod matches;
pub mod ranking;
diff --git a/proto/bot_api.proto b/proto/bot_api.proto
new file mode 100644
index 0000000..ad0ee2f
--- /dev/null
+++ b/proto/bot_api.proto
@@ -0,0 +1,15 @@
+syntax = "proto3";
+
+package grpc.planetwars.bot_api;
+
+message Hello {
+ string hello_message = 1;
+}
+
+message HelloResponse {
+ string response = 1;
+}
+
+service TestService {
+ rpc greet(Hello) returns (HelloResponse);
+}