diff options
| -rw-r--r-- | src/client.rs | 23 | ||||
| -rw-r--r-- | src/server.rs | 63 |
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(()) +} |
