summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client.rs23
-rw-r--r--src/server.rs63
2 files changed, 86 insertions, 0 deletions
diff --git a/src/client.rs b/src/client.rs
new file mode 100644
index 0000000..750fe1a
--- /dev/null
+++ b/src/client.rs
@@ -0,0 +1,23 @@
+use clawflake::clawflake_client::ClawflakeClient;
+use clawflake::IdRequest;
+
+pub mod clawflake {
+ tonic::include_proto!("clawflake");
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let addr = "http://[::1]:50051";
+
+ let mut client = ClawflakeClient::connect(addr).await?;
+
+ println!("Client connected to {}", addr);
+ let request = tonic::Request::new(IdRequest {});
+
+ println!("Trying to get an ID");
+ let response = client.get_id(request).await?;
+
+ println!("Received: {:?}", response);
+
+ Ok(())
+}
diff --git a/src/server.rs b/src/server.rs
new file mode 100644
index 0000000..edb69ef
--- /dev/null
+++ b/src/server.rs
@@ -0,0 +1,63 @@
+use std::net::SocketAddr;
+use std::process::exit;
+
+use log::info;
+mod logger;
+use tonic::{transport::Server, Request, Response, Status};
+
+use clawflake::clawflake_server::{Clawflake, ClawflakeServer};
+use clawflake::{IdReply, IdRequest};
+
+pub mod clawflake {
+ tonic::include_proto!("clawflake");
+}
+
+mod id_worker;
+use id_worker::IdWorker;
+
+#[derive(Debug, Default)]
+pub struct MyClawflakeService {
+}
+
+#[tonic::async_trait]
+impl Clawflake for MyClawflakeService {
+ async fn get_id(
+ &self,
+ _: Request<IdRequest>,
+ ) -> Result<Response<IdReply>, Status> {
+ info!("request on GetID");
+
+ let mut worker: IdWorker = IdWorker::new(1_564_790_400_000, 0, 0);
+
+ let reply: IdReply = clawflake::IdReply {
+ id: format!("{}", worker.next_id()).into(),
+ };
+
+ Ok(Response::new(reply))
+ }
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+ // init logger
+ match logger::init() {
+ Err(e) => {
+ eprintln!("failed to init logger: {}", &e);
+ exit(1);
+ }
+ _ => {}
+ }
+
+ // init tonic and IdWorker
+ let addr: SocketAddr = "[::1]:50051".parse()?;
+ let srv: MyClawflakeService = MyClawflakeService::default();
+
+ println!("Service listening on {}", addr);
+
+ Server::builder()
+ .add_service(ClawflakeServer::new(srv))
+ .serve(addr)
+ .await?;
+
+ Ok(())
+}