nullnet-wallguard-server 0.1.0

A centralized management system for network firewalls
Documentation
#![allow(clippy::module_name_repetitions)]

use datastore::DatastoreWrapper;
use proto::wallguard::Packets;

mod datastore;
mod grpc_server;
mod message_handler;
mod parser;
mod proto;

#[tokio::main]
async fn main() {
    let (tx, rx) = async_channel::unbounded::<Packets>();

    let workers_amount: u32 = 64;
    let mut workers = Vec::new();

    let datastore = if cfg!(feature = "no-datastore") {
        println!("Datastore functionality disabled");
        None
    } else {
        let datastore = DatastoreWrapper::new();
        Some(datastore)
    };

    for _ in 1..=workers_amount {
        let receiver = rx.clone();
        let ds_client = datastore.clone();

        workers.push(tokio::spawn(async move {
            message_handler::worker_task(receiver, ds_client).await;
        }));
    }

    grpc_server::run_grpc_server(tx, datastore).await;

    for worker in workers {
        worker.await.unwrap();
    }
}