mod client; mod config; mod control; mod proto; mod room; mod user; extern crate byteorder; extern crate bytes; extern crate core; extern crate crypto; extern crate encoding; extern crate futures; #[macro_use] extern crate log; extern crate env_logger; extern crate mio; extern crate rustc_serialize; extern crate slab; extern crate tokio_core; extern crate tokio_io; extern crate ws; use std::sync::mpsc; use std::thread; fn main() { match env_logger::init() { Ok(()) => (), Err(err) => { error!("Error initializing logger: {}", err); return; } }; let (proto_to_client_tx, proto_to_client_rx) = mpsc::channel(); let mut proto_agent = match proto::Agent::new(proto_to_client_tx) { Ok(agent) => agent, Err(err) => { error!("Error initializing protocol agent: {}", err); return; } }; let client_to_proto_tx = proto_agent.channel(); let (control_to_client_tx, control_to_client_rx) = mpsc::channel(); let mut client = client::Client::new(client_to_proto_tx, proto_to_client_rx, control_to_client_rx); thread::spawn(move || control::listen(control_to_client_tx)); thread::spawn(move || proto_agent.run().unwrap()); client.run(); }