diff --git a/candid_server/src/client_handler.rs b/candid_server/src/client_handler.rs index 7056b00..5c9c464 100644 --- a/candid_server/src/client_handler.rs +++ b/candid_server/src/client_handler.rs @@ -5,42 +5,32 @@ use std::thread; use socketcan::{CANFrame, CANSocket}; -pub struct ClientHandler { - connection: TcpStream, +pub fn new_client_handler( + mut connection: TcpStream, can_socket: Arc>, can_reader: mpsc::Receiver, -} - -impl ClientHandler { - pub fn new( - connection: TcpStream, - can_socket: Arc>, - can_reader: mpsc::Receiver, - ) -> thread::JoinHandle<()> { - let mut handler = ClientHandler { - connection, - can_socket, - can_reader, - }; +) -> (thread::JoinHandle<()>, thread::JoinHandle<()>) { + // Thread to pass frames from the server to the client + let tx_handle = thread::spawn(move || { + let ip = connection.peer_addr().unwrap(); - let handle = thread::spawn(move || { - let ip = handler.connection.peer_addr().unwrap(); + loop { + // Get an incoming frame from the reader + let frame = can_reader.recv().unwrap(); - loop { - // Get an incoming frame from the reader - let frame = handler.can_reader.recv().unwrap(); - - // Relay to the client - match handler.connection.write_fmt(format_args!("{:X}\n", frame)) { - Ok(_) => {} - Err(_) => { - println!("Connection to client {:?} dropped.", ip); - break; - } + // Relay to the client + match connection.write_fmt(format_args!("{:X}\n", frame)) { + Ok(_) => {} + Err(_) => { + println!("Connection to client {:?} dropped.", ip); + break; } } - }); + } + }); + + // Thread to pass frames from the client to the CAN socket + let rx_handle = thread::spawn(move || {}); - handle - } + (tx_handle, rx_handle) } diff --git a/candid_server/src/main.rs b/candid_server/src/main.rs index d03b9ea..c5247fe 100644 --- a/candid_server/src/main.rs +++ b/candid_server/src/main.rs @@ -18,7 +18,7 @@ extern crate candid_server; -use candid_server::{can_reader::CANReader, client_handler::ClientHandler}; +use candid_server::{can_reader::CANReader, client_handler::new_client_handler}; use std::net::TcpListener; use std::sync::mpsc; @@ -73,7 +73,7 @@ fn main() { can_reader.add_client(tx); // Create client handler - clients.push(ClientHandler::new(socket, can_reader.get_socket(), rx)); + clients.push(new_client_handler(socket, can_reader.get_socket(), rx)); } } }