use crate::message::common::Message;
use crate::transport::{Transport, TransportChannel};
pub struct MessageFilter{
pub from_id: Option<u128>,
pub module_id: Option<u64>,
}
impl MessageFilter {
pub fn new() -> MessageFilter{
MessageFilter{
from_id: None,
module_id: None,
}
}
pub fn filter_from(&mut self, id: u128) -> &Self {
self.from_id = Some(id);
self
}
pub fn filter_module(&mut self, id: u64) -> &Self {
self.module_id = Some(id);
self
}
}
pub trait TransportServiceListener: Send + Sync{
fn on_receive_message(&mut self, message: Message);
}
pub trait TransportService: Send + Sync{
fn get_transport_channel(&mut self, id: u128) -> Option<Box<dyn TransportChannel>>;
fn get_transport(&mut self) -> Box<dyn Transport>;
fn subscribe_to_messages(&mut self,
filter: &MessageFilter,
listener: Box<dyn TransportServiceListener>) -> u128;
fn unsubscribe(&mut self, filter_id: u128);
}