use super::{Router, RouterState, SenderPair};
use crate::router::record::{AddressRecord, WorkerMeta};
use crate::WorkerShutdownPriority;
use ockam_core::compat::sync::Arc;
use ockam_core::errcode::{Kind, Origin};
use ockam_core::{Error, Mailboxes, Result};
impl Router {
pub(crate) fn add_processor(
&self,
mailboxes: &Mailboxes,
senders: SenderPair,
shutdown_priority: WorkerShutdownPriority,
) -> Result<()> {
if *self.state.read().unwrap() != RouterState::Running {
return Err(Error::new(
Origin::Node,
Kind::Shutdown,
"The node is shutting down",
))?;
}
self.add_processor_impl(mailboxes, senders, shutdown_priority)
}
fn add_processor_impl(
&self,
mailboxes: &Mailboxes,
senders: SenderPair,
shutdown_priority: WorkerShutdownPriority,
) -> Result<()> {
debug!("Starting new processor '{}'", mailboxes.primary_address());
let SenderPair { msgs, ctrl } = senders;
let record = AddressRecord::new(
mailboxes.primary_address().clone(),
mailboxes.additional_addresses().cloned().collect(),
msgs,
ctrl,
WorkerMeta {
processor: true,
detached: false,
},
shutdown_priority,
Arc::new(0.into()),
);
self.map.insert_address_record(record, mailboxes)?;
Ok(())
}
}