diff --git a/src/network/host.rs b/src/network/host.rs index 52b635f55..50954661c 100644 --- a/src/network/host.rs +++ b/src/network/host.rs @@ -162,6 +162,15 @@ pub enum HostMessage { protocol: ProtocolId, data: Vec, }, + UserMessage(UserMessage), +} + +pub type UserMessageId = u32; + +pub struct UserMessage { + protocol: ProtocolId, + id: UserMessageId, + data: Option>, } pub type PeerId = usize; @@ -237,9 +246,21 @@ impl<'s> HostIo<'s> { } } + pub fn message(&mut self, id: UserMessageId, data: Option>) { + match self.event_loop.channel().send(HostMessage::UserMessage(UserMessage { + protocol: self.protocol, + id: id, + data: data + })) { + Ok(_) => {} + Err(e) => { panic!("Error sending io message {:?}", e); } + } + } + pub fn disable_peer(&mut self, _peer: PeerId) { //TODO: remove capability, disconnect if no capabilities left } + } struct UserTimer { @@ -652,6 +673,13 @@ impl Handler for Host { } } }, + HostMessage::UserMessage(message) => { + for (p, h) in self.handlers.iter_mut() { + if p != &message.protocol { + h.message(&mut HostIo::new(message.protocol, None, event_loop, &mut self.connections, &mut self.timers), &message); + } + } + } } } } diff --git a/src/network/mod.rs b/src/network/mod.rs index 62928b020..b3e922172 100644 --- a/src/network/mod.rs +++ b/src/network/mod.rs @@ -74,6 +74,8 @@ pub type PeerId = host::PeerId; pub type PacketId = host::PacketId; pub type TimerToken = host::TimerToken; pub type HandlerIo<'s> = host::HostIo<'s>; +pub type Message = host::UserMessage; +pub type MessageId = host::UserMessageId; pub trait ProtocolHandler: Send { fn initialize(&mut self, io: &mut HandlerIo); @@ -81,6 +83,7 @@ pub trait ProtocolHandler: Send { fn connected(&mut self, io: &mut HandlerIo, peer: &PeerId); fn disconnected(&mut self, io: &mut HandlerIo, peer: &PeerId); fn timeout(&mut self, io: &mut HandlerIo, timer: TimerToken); + fn message(&mut self, io: &mut HandlerIo, message: &Message); } pub struct NetworkClient;