// Copyright 2022 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 use crate::dkg::networking::message::NewDealingMessage; use crate::dkg::state::DkgState; use futures::channel::mpsc; use futures::StreamExt; use log::error; // Once the DKG epoch begins, all parties will begin exchanging dealings with each other. // We really don't want to be processing all of them in parallel since we would starve other // parts of the process of CPU. Hence we put them in a queue and process each of them one by one. pub(crate) type DealingReceiver = mpsc::UnboundedReceiver; pub(crate) type DealingSender = mpsc::UnboundedSender; pub(crate) struct Processor { dkg_state: DkgState, receiver: DealingReceiver, } impl Processor { pub(crate) fn new(dkg_state: DkgState, receiver: DealingReceiver) -> Self { Processor { dkg_state, receiver, } } async fn process_dealing(&self, dealing: NewDealingMessage) { todo!() } pub(crate) async fn run(&mut self) { while let Some(dealing) = self.receiver.next().await { self.process_dealing(dealing).await } // since we have no graceful shutdowns, seeing this error means something bad has happened // as all senders got dropped error!("Dealing Processor has stopped receiving events! The process is in an undefined state. Shutting down..."); std::process::exit(1); } }