rustdds 0.3.0

Rust DDS implementation with RTPS
Documentation
use crate::dds::rtps_reader_proxy::RtpsReaderProxy;
use crate::discovery::data_types::topic_data::DiscoveredReaderData;
use crate::discovery::data_types::topic_data::DiscoveredWriterData;
use crate::dds::data_types::GuidPrefix;


use mio::Token;
use mio_extras::channel as mio_channel;

use crate::structure::guid::GUID;

pub const STOP_POLL_TOKEN: Token = Token(0);

pub const DISCOVERY_SENDER_TOKEN: Token = Token(1);
pub const USER_TRAFFIC_SENDER_TOKEN: Token = Token(2);

pub const DATA_SEND_TOKEN: Token = Token(5);

pub const DISCOVERY_LISTENER_TOKEN: Token = Token(6);
pub const DISCOVERY_MUL_LISTENER_TOKEN: Token = Token(7);
pub const USER_TRAFFIC_LISTENER_TOKEN: Token = Token(8);
pub const USER_TRAFFIC_MUL_LISTENER_TOKEN: Token = Token(9);

pub const ADD_READER_TOKEN: Token = Token(10);
pub const REMOVE_READER_TOKEN: Token = Token(11);

pub const READER_CHANGE_TOKEN: Token = Token(12);
pub const DATAREADER_CHANGE_TOKEN: Token = Token(13);

pub const ADD_DATAREADER_TOKEN: Token = Token(14);
pub const REMOVE_DATAREADER_TOKEN: Token = Token(15);

pub const ADD_WRITER_TOKEN: Token = Token(16);
pub const REMOVE_WRITER_TOKEN: Token = Token(17);

pub const ADD_DATAWRITER_TOKEN: Token = Token(18);
pub const REMOVE_DATAWRITER_TOKEN: Token = Token(19);

pub const ACKNACK_MESSGAGE_TO_LOCAL_WRITER_TOKEN: Token = Token(20);

pub const DISCOVERY_UPDATE_NOTIFICATION_TOKEN: Token = Token(21);
pub const DISCOVERY_COMMAND_TOKEN: Token = Token(22);

pub const DISCOVERY_PARTICIPANT_DATA_TOKEN: Token = Token(30);
pub const DISCOVERY_PARTICIPANT_CLEANUP_TOKEN: Token = Token(31);
pub const DISCOVERY_SEND_PARTICIPANT_INFO_TOKEN: Token = Token(32);
pub const DISCOVERY_READER_DATA_TOKEN: Token = Token(33);
pub const DISCOVERY_SEND_READERS_INFO_TOKEN: Token = Token(34);
pub const DISCOVERY_WRITER_DATA_TOKEN: Token = Token(35);
pub const DISCOVERY_SEND_WRITERS_INFO_TOKEN: Token = Token(36);
pub const DISCOVERY_TOPIC_DATA_TOKEN: Token = Token(37);
pub const DISCOVERY_TOPIC_CLEANUP_TOKEN: Token = Token(38);
pub const DISCOVERY_SEND_TOPIC_INFO_TOKEN: Token = Token(39);
pub const DISCOVERY_PARTICIPANT_MESSAGE_TOKEN: Token = Token(40);
pub const DISCOVERY_PARTICIPANT_MESSAGE_TIMER_TOKEN: Token = Token(41);

pub const DPEV_ACKNACK_TIMER_TOKEN: Token = Token(50);

pub struct TokenReceiverPair<T> {
  pub token: Token,
  pub receiver: mio_channel::Receiver<T>,
}

const PB: u16 = 7400;
const DG: u16 = 250;
const PG: u16 = 2;

const D0: u16 = 0;
const D1: u16 = 10;
const D2: u16 = 1;
const D3: u16 = 11;

pub fn get_spdp_well_known_multicast_port(domain_id: u16) -> u16 {
  PB + DG * domain_id + D0
}

pub fn get_spdp_well_known_unicast_port(domain_id: u16, participant_id: u16) -> u16 {
  PB + DG * domain_id + D1 + PG * participant_id
}

pub fn get_user_traffic_multicast_port(domain_id: u16) -> u16 {
  PB + DG * domain_id + D2
}

pub fn get_user_traffic_unicast_port(domain_id: u16, participant_id: u16) -> u16 {
  PB + DG * domain_id + D3 + PG * participant_id
}

#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum TimerMessageType {
  WriterHeartbeat,
  WriterCacheCleaning,
  WriterSendRepairData { to_reader: GUID },
  ReaderDeadlineMissedCheck,
}

#[derive(Debug)]
pub(crate) enum DiscoveryNotificationType {
  ReaderUpdated { 
    rtps_reader_proxy: RtpsReaderProxy,
    discovered_reader_data: DiscoveredReaderData , 
    _needs_new_cache_change: bool 
  },
  ReaderLost { reader_guid: GUID }, 
  WriterUpdated { discovered_writer_data: DiscoveredWriterData  },
  WriterLost { writer_guid: GUID },
  ParticipantUpdated { guid_prefix: GuidPrefix },
  ParticipantLost { guid_prefix : GuidPrefix },
  TopicsInfoUpdated,
  AssertTopicLiveliness { writer_guid: GUID , manual_assertion: bool, },
}