Files @ a2b6b8e94778
Branch filter:

Location: CSY/reowolf/src/runtime2/inbox2.rs

a2b6b8e94778 1.7 KiB application/rls-services+xml Show Annotation Show as Raw Download as Raw
MH
initial rewrite of component using new ExecTree and Consensus
use crate::protocol::eval::ValueGroup;
use crate::runtime2::branch::BranchId;
use crate::runtime2::ConnectorId;
use crate::runtime2::port::PortIdLocal;

#[derive(Copy, Clone)]
pub(crate) struct PortAnnotation {
    pub port_id: PortIdLocal,
    pub registered_id: Option<BranchId>,
    pub expected_firing: Option<bool>,
}

/// The header added by the synchronization algorithm to all.
pub(crate) struct SyncHeader {
    pub sending_component_id: ConnectorId,
    pub highest_component_id: ConnectorId,
}

/// The header added to data messages
pub(crate) struct DataHeader {
    pub expected_mapping: Vec<PortAnnotation>,
    pub target_port: PortIdLocal,
    pub new_mapping: BranchId,
}

/// A data message is a message that is intended for the receiver's PDL code,
/// but will also be handled by the consensus algrorithm
pub(crate) struct DataMessageFancy {
    pub sync_header: SyncHeader,
    pub data_header: DataHeader,
    pub content: ValueGroup,
}

pub(crate) enum SyncContent {

}

/// A sync message is a message that is intended only for the consensus
/// algorithm.
pub(crate) struct SyncMessageFancy {
    pub sync_header: SyncHeader,
    pub content: SyncContent,
}

/// A control message is a message intended for the scheduler that is executing
/// a component.
pub(crate) struct ControlMessageFancy {
    pub id: u32, // generic identifier, used to match request to response
    pub content: ControlContent,
}

pub(crate) enum ControlContent {
    PortPeerChanged(PortIdLocal, ConnectorId),
    CloseChannel(PortIdLocal),
    Ack,
    Ping,
}

/// Combination of data message and control messages.
pub(crate) enum MessageFancy {
    Data(DataMessageFancy),
    Sync(SyncMessageFancy),
    Control(ControlMessageFancy),
}