2022-02-28 08:54:41 -06:00
|
|
|
//! Interprocess communication.
|
|
|
|
|
2022-03-02 08:38:22 -06:00
|
|
|
use crate::{proccess::PID, time::Time};
|
2022-02-28 08:54:41 -06:00
|
|
|
|
|
|
|
/// 128 Bytes
|
|
|
|
pub type Tiny = [u8; 128];
|
|
|
|
|
2022-03-02 08:38:22 -06:00
|
|
|
/// 1 KiB
|
2022-02-28 08:54:41 -06:00
|
|
|
pub type Small = [u8; 1024];
|
|
|
|
|
2022-03-02 08:38:22 -06:00
|
|
|
/// 65.536 KiB
|
2022-02-28 08:54:41 -06:00
|
|
|
pub type Medium = [u8; 65536];
|
|
|
|
|
|
|
|
/// 1MiB
|
|
|
|
pub type Large = [u8; 1048576];
|
|
|
|
|
|
|
|
/// 16MiB
|
|
|
|
pub type Huge = [u8; 16777216];
|
|
|
|
|
|
|
|
/// An internal message to be held in a process message
|
|
|
|
pub enum Message {
|
|
|
|
/// A Tiny message
|
|
|
|
///
|
|
|
|
/// The message is 128 bytes long
|
|
|
|
Tiny(Tiny),
|
|
|
|
/// A Small message
|
|
|
|
///
|
|
|
|
/// The message is 1 KiB long
|
|
|
|
Small(Small),
|
|
|
|
/// A Medium message
|
|
|
|
///
|
|
|
|
/// The message is 65.536 KiB long
|
|
|
|
Medium(Medium),
|
|
|
|
/// A Large message
|
|
|
|
///
|
|
|
|
/// The message is 1 MiB long
|
|
|
|
Large(Large),
|
|
|
|
/// A Huge message
|
|
|
|
///
|
|
|
|
/// The message is 16 MiB long
|
|
|
|
Huge(Huge),
|
|
|
|
}
|
|
|
|
|
|
|
|
/// A message that can be sent between processes
|
|
|
|
pub struct ProcessMessage {
|
|
|
|
/// The sender of the message
|
|
|
|
pub to_pid: PID,
|
|
|
|
/// The receiver of the message
|
|
|
|
pub from_pid: PID,
|
|
|
|
/// The message
|
|
|
|
pub message: Message,
|
|
|
|
/// The time the message was sent
|
|
|
|
pub sender_time: Time,
|
|
|
|
/// The time the message was received
|
|
|
|
pub receiver_time: Time,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
/// An enum of all possible errors that can occur when sending a message
|
|
|
|
pub enum MessagingError {
|
|
|
|
/// The message is too large to be sent
|
|
|
|
MessageTooLarge,
|
|
|
|
/// The reciever of the message is not valid
|
|
|
|
ProcessNonExistant,
|
|
|
|
}
|