diff --git a/candid_server/src/main.rs b/candid_server/src/main.rs index fff176f..41c069b 100644 --- a/candid_server/src/main.rs +++ b/candid_server/src/main.rs @@ -66,6 +66,16 @@ fn main() { println!("done"); loop { // Listen for new connections + if let Ok((socket, addr)) = listener.accept() { + println!("New Client: {:?}", addr); + + // Create channel. Sender -> CANReader, Receiver -> ClientHandler. + let (tx, rx) = mpsc::channel(); + can_reader.add_client(tx); + + // Create client handler + let new_client = ClientHandler::new(socket, can_reader.get_socket(), rx); + } } // Old code below @@ -131,4 +141,30 @@ impl CANReader { } pub fn add_client(&self, channel: mpsc::Sender) {} + + pub fn get_socket(&self) -> Arc> { + Arc::clone(&self.can_socket) + } +} + +struct ClientHandler { + connection: TcpStream, + can_socket: Arc>, + can_reader: mpsc::Receiver, +} + +impl ClientHandler { + pub fn new( + connection: TcpStream, + can_socket: Arc>, + can_reader: mpsc::Receiver, + ) -> ClientHandler { + ClientHandler { + connection, + can_socket, + can_reader, + } + + // TODO: Spawn thread for handler runtime + } }