use std::io;
use mio::{Poll, Events};
use crate::header::EventTag;
use self::gate::Gate;
mod gate;
mod hub;
mod line;
pub struct Server {
p:Poll,
events:Events,
gate:Gate
}
impl Server {
pub fn new(addr:&str) -> io::Result<Server> {
let p = Poll::new()?;
let events = Events::with_capacity(u8::MAX.into());
let gate = Gate::new(addr,&p)?;
Ok(Server { p, events , gate })
}
pub fn start(&mut self,f:fn(tag:EventTag,data:&[u8])) {
self.gate.hub.set_hook(f);
loop {
self.p.poll(&mut self.events, None).unwrap();
for event in self.events.iter() {
self.gate.process(event,&self.p);
}
}
}
}