From 82632c45add36888023faaf6830beee5d2fbffbf Mon Sep 17 00:00:00 2001 From: Alex van de Sandt Date: Thu, 15 Nov 2018 17:12:45 -0500 Subject: [PATCH] Modularize CANReader and ClientHandler; Clean up imports --- candid_server/src/can_reader.rs | 27 ++++++++++++++ candid_server/src/client_handler.rs | 26 +++++++++++++ candid_server/src/lib.rs | 5 +++ candid_server/src/main.rs | 58 +++-------------------------- 4 files changed, 64 insertions(+), 52 deletions(-) create mode 100644 candid_server/src/can_reader.rs create mode 100644 candid_server/src/client_handler.rs create mode 100644 candid_server/src/lib.rs diff --git a/candid_server/src/can_reader.rs b/candid_server/src/can_reader.rs new file mode 100644 index 0000000..0d09867 --- /dev/null +++ b/candid_server/src/can_reader.rs @@ -0,0 +1,27 @@ +use std::sync::{mpsc, Arc, Mutex}; + +use socketcan::{CANFrame, CANSocket}; + +pub struct CANReader { + can_socket: Arc>, + clients: Mutex>>, +} + +impl CANReader { + pub fn new(socket: CANSocket) -> CANReader { + CANReader { + can_socket: Arc::new(Mutex::new(socket)), + clients: Mutex::new(Vec::new()), + } + + // TODO: Spawn thread for reader runtime + } + + pub fn add_client(&self, channel: mpsc::Sender) { + &self.clients.lock().unwrap().push(channel); + } + + pub fn get_socket(&self) -> Arc> { + Arc::clone(&self.can_socket) + } +} diff --git a/candid_server/src/client_handler.rs b/candid_server/src/client_handler.rs new file mode 100644 index 0000000..218e9e0 --- /dev/null +++ b/candid_server/src/client_handler.rs @@ -0,0 +1,26 @@ +use std::net::TcpStream; +use std::sync::{mpsc, Arc, Mutex}; + +use socketcan::{CANFrame, CANSocket}; + +pub 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 + } +} diff --git a/candid_server/src/lib.rs b/candid_server/src/lib.rs new file mode 100644 index 0000000..dfbd61a --- /dev/null +++ b/candid_server/src/lib.rs @@ -0,0 +1,5 @@ +extern crate clap; +extern crate socketcan; + +pub mod can_reader; +pub mod client_handler; diff --git a/candid_server/src/main.rs b/candid_server/src/main.rs index 83cc01e..a77a274 100644 --- a/candid_server/src/main.rs +++ b/candid_server/src/main.rs @@ -16,16 +16,14 @@ //! The CAN interface to listen to //! ``` -extern crate clap; -extern crate socketcan; +extern crate candid_server; -use std::io::prelude::*; -use std::net::{TcpListener, TcpStream, ToSocketAddrs}; -use std::sync::{mpsc, Arc, Mutex}; -use std::thread; -use std::time::Duration; +use candid_server::{can_reader::CANReader, client_handler::ClientHandler}; -use socketcan::{CANFrame, CANSocket}; +use std::net::TcpListener; +use std::sync::mpsc; + +use socketcan::CANSocket; use clap::{App, Arg}; @@ -78,47 +76,3 @@ fn main() { } } } - -struct CANReader { - can_socket: Arc>, - clients: Vec>, -} - -impl CANReader { - pub fn new(socket: CANSocket) -> CANReader { - CANReader { - can_socket: Arc::new(Mutex::new(socket)), - clients: Vec::new(), - } - - // TODO: Spawn thread for reader runtime - } - - 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 - } -} -- 2.51.2