shared state for grpc server

This commit is contained in:
Noor 2025-01-20 13:59:42 +05:30
parent e1dbf5c899
commit e76c9cc8cc
Signed by: noormohammedb
GPG Key ID: D83EFB8B3B967146
2 changed files with 23 additions and 8 deletions

@ -1,27 +1,32 @@
use std::sync::Arc;
use std::{net::SocketAddr, str::FromStr}; use std::{net::SocketAddr, str::FromStr};
use tokio::sync::RwLock;
use tonic::transport::Server; use tonic::transport::Server;
use detee_shared::pb::daemon::daemon_service_server::{ use detee_shared::pb::daemon::daemon_service_server::{
DaemonService as DaemonServicePB, DaemonServiceServer as DaemonServiceServerPB, DaemonService as DaemonServicePB, DaemonServiceServer as DaemonServiceServerPB,
}; };
use detee_shared::pb::daemon::NewContainerRes; use detee_shared::pb::daemon::NewContainerRes;
use detee_shared::pb::shared::Container; use detee_shared::pb::shared::Container;
pub struct DaemonServer {}
use crate::DaemonState;
#[derive(Debug, Clone)]
pub struct DaemonServer {
pub data: Arc<RwLock<DaemonState>>,
}
impl DaemonServer { impl DaemonServer {
pub fn new() -> Self { pub fn new(data: Arc<RwLock<DaemonState>>) -> Self {
Self {} Self { data }
} }
pub async fn start(&self) -> Result<(), Box<dyn std::error::Error>> { pub async fn start(&self) -> Result<(), Box<dyn std::error::Error>> {
let port: String = std::env::var("PORT").unwrap_or_else(|_| "33400".to_string()); let port: String = std::env::var("PORT").unwrap_or_else(|_| "33400".to_string());
let data = Self {};
let addr = SocketAddr::from_str(format!("0.0.0.0:{port}").as_str())?; let addr = SocketAddr::from_str(format!("0.0.0.0:{port}").as_str())?;
let daemon_server = DaemonServiceServerPB::new(data); let daemon_server = DaemonServiceServerPB::new(DaemonServer::new(self.data.clone()));
println!("Listening on {}", addr); println!("Listening on {}", addr);

@ -1,11 +1,21 @@
mod grpc; mod grpc;
use std::sync::Arc;
use grpc::DaemonServer; use grpc::DaemonServer;
use tokio::sync::RwLock;
#[derive(Debug, Default)]
pub struct DaemonState {
pub containers: Vec<String>,
}
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> { async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Detee daemon"); println!("Detee daemon");
DaemonServer::new().start().await?; DaemonServer::new(Arc::new(RwLock::new(DaemonState::default())))
.start()
.await?;
Ok(()) Ok(())
} }