1use std::io;
2
3use mio::{Poll, Events};
4
5use crate::header::EventTag;
6
7use self::gate::Gate;
8
9mod gate;
10mod hub;
11mod line;
12
13
14pub struct Server {
15 p:Poll,
16 events:Events,
17 gate:Gate
18}
19
20impl Server {
21 pub fn new(addr:&str) -> io::Result<Server> {
22 let p = Poll::new()?;
23 let events = Events::with_capacity(u8::MAX.into());
24 let gate = Gate::new(addr,&p)?;
25 Ok(Server { p, events , gate })
26 }
27
28 pub fn start(&mut self,f:fn(tag:EventTag,data:&[u8])) {
29 self.gate.hub.set_hook(f);
30 loop {
31 self.p.poll(&mut self.events, None).unwrap();
32 for event in self.events.iter() {
33 self.gate.process(event,&self.p);
34 }
35 }
36 }
37
38
39}
40