use mio::{Evented};
use reactor::{ReactorError, Configurer, Token};
pub trait Protocol {
type Socket: Evented;
fn on_readable(&mut self, configurer: &mut Configurer<Self::Socket>, socket: &mut Self::Socket, token: Token);
fn on_writable(&mut self, configurer: &mut Configurer<Self::Socket>, socket: &mut Self::Socket, token: Token);
fn on_timeout(&mut self, configurer: &mut Configurer<Self::Socket>, socket: &mut Self::Socket, token: Token);
fn on_disconnect(&mut self, configurer: &mut Configurer<Self::Socket>, socket: &mut Self::Socket, token: Token);
fn on_socket_error(&mut self, configurer: &mut Configurer<Self::Socket>, socket: &mut Self::Socket, token: Token);
fn on_event_loop_error(&mut self, error: ReactorError<Self::Socket>);
fn tick(&mut self, configurer: &mut Configurer<Self::Socket>);
}