#![feature(mpsc_select)] mod client; mod config; mod control; mod handler; mod proto; extern crate byteorder; extern crate core; extern crate crypto; #[macro_use] extern crate log; extern crate env_logger; extern crate mio; extern crate rustc_serialize; extern crate websocket; use std::sync::mpsc::channel; use std::thread; use mio::EventLoop; use client::Client; use control::Controller; use handler::ConnectionHandler; fn main() { env_logger::init().unwrap(); let mut event_loop = EventLoop::new().unwrap(); let (handler_to_client_tx, handler_to_client_rx) = channel(); let (control_to_client_tx, control_to_client_rx) = channel(); let (client_to_control_tx, client_to_control_rx) = channel(); let client_to_handler_tx = event_loop.channel(); let mut handler = ConnectionHandler::new( config::SERVER_HOST, config::SERVER_PORT, handler_to_client_tx, &mut event_loop).unwrap(); let mut client = Client::new( client_to_handler_tx, handler_to_client_rx, client_to_control_tx, control_to_client_rx); let mut controller = Controller::new(control_to_client_tx, client_to_control_rx); thread::spawn(move || controller.run()); thread::spawn(move || event_loop.run(&mut handler).unwrap()); client.run(); }