From 2b1316794d924e7b65468786413cbbc430c417da Mon Sep 17 00:00:00 2001 From: Alex van de Sandt Date: Sun, 17 Mar 2019 22:08:19 -0400 Subject: [PATCH] Factor out `client_handler` struct `client_handler::new()` is now just `new_client_handler` and does not create a struct. There is now no `ClientHandler` struct. --- candid_server/src/client_handler.rs | 52 ++++++++++++----------------- candid_server/src/main.rs | 4 +-- 2 files changed, 23 insertions(+), 33 deletions(-) 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)); } } } -- 2.51.2