Finished the abstraction of the configuration socket
This commit is contained in:
		
							parent
							
								
									e0a9fe3678
								
							
						
					
					
						commit
						84b39aa2a7
					
				@ -1,12 +1,16 @@
 | 
			
		||||
use std::net::TcpListener;
 | 
			
		||||
use std::net::TcpStream;
 | 
			
		||||
use std::os::unix::net::UnixListener;
 | 
			
		||||
use std::io::Error;
 | 
			
		||||
use std::os::unix::net::UnixStream;
 | 
			
		||||
use std::io::{Error, ErrorKind};
 | 
			
		||||
use std::io::prelude::*;
 | 
			
		||||
 | 
			
		||||
pub const TCP_LIS : u8 = 0;
 | 
			
		||||
pub const UNIX_LIS : u8 = 1;
 | 
			
		||||
 | 
			
		||||
trait NewTrait: std::io::Read + std::io::Write {}
 | 
			
		||||
pub trait NewTrait: std::io::Read + std::io::Write + Send {}
 | 
			
		||||
impl NewTrait for TcpStream {}
 | 
			
		||||
impl NewTrait for UnixStream {}
 | 
			
		||||
 | 
			
		||||
pub struct GenericListener {
 | 
			
		||||
    tcp_lis : Option<TcpListener>,
 | 
			
		||||
@ -42,19 +46,14 @@ impl GenericListener {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /*pub fn incoming(&self) -> dyn Iterator<Item = Result<TcpStream, Error>> {
 | 
			
		||||
    pub fn accept(&self) -> Result<Box<dyn NewTrait>,Error> {
 | 
			
		||||
        match self.type_lis {
 | 
			
		||||
            TCP_LIS => self.tcp_lis.unwrap().incoming(),
 | 
			
		||||
            UNIX_LIS => self.unix_lis.unwrap().incoming(),
 | 
			
		||||
            TCP_LIS => Ok(Box::new(self.tcp_lis.as_ref().unwrap().accept()?.0)),
 | 
			
		||||
            UNIX_LIS => Ok(Box::new(self.unix_lis.as_ref().unwrap().accept()?.0)),
 | 
			
		||||
            _=> Err(Error::new(ErrorKind::Other, "Unexpected type"))
 | 
			
		||||
        }
 | 
			
		||||
    }*/
 | 
			
		||||
 | 
			
		||||
    /*pub fn accept(&self) -> Result<dyn NewTrait, Error> {
 | 
			
		||||
        match self.type_lis {
 | 
			
		||||
            TCP_LIS => self.tcp_lis.unwrap().accept(),
 | 
			
		||||
            UNIX_LIS => self.unix_lis.unwrap().accept(),
 | 
			
		||||
        }
 | 
			
		||||
    }*/
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,3 @@
 | 
			
		||||
use std::net::TcpListener;
 | 
			
		||||
use std::os::unix::net::UnixListener;
 | 
			
		||||
use crate::conf;
 | 
			
		||||
use crate::server_conf::conexion::Conexion;
 | 
			
		||||
use crate::server_conf::listener::GenericListener;
 | 
			
		||||
@ -8,14 +6,14 @@ use std::sync::{Arc, RwLock};
 | 
			
		||||
 | 
			
		||||
pub struct ConfSer{
 | 
			
		||||
    path: String,
 | 
			
		||||
    listener: UnixListener,
 | 
			
		||||
    listener: GenericListener,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ConfSer {
 | 
			
		||||
    fn new(path: String) -> ConfSer{
 | 
			
		||||
        ConfSer{
 | 
			
		||||
            path: path.clone(),
 | 
			
		||||
            listener: UnixListener::bind(path).unwrap(),
 | 
			
		||||
            listener: GenericListener::bind(path, 1).unwrap(),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -31,13 +29,13 @@ impl Drop for ConfSer {
 | 
			
		||||
pub fn start(conf: Arc<RwLock<conf::Config>>){
 | 
			
		||||
    let ser = ConfSer::new(String::from("mineproxy"));
 | 
			
		||||
 | 
			
		||||
    for stream in ser.listener.incoming() {
 | 
			
		||||
        match stream{
 | 
			
		||||
        Ok(s) => {
 | 
			
		||||
    loop{
 | 
			
		||||
        match ser.listener.accept() {
 | 
			
		||||
            Ok(stream) => {
 | 
			
		||||
                let c = conf.clone();
 | 
			
		||||
                thread::spawn(|| Conexion::new(c, s).process_reques());
 | 
			
		||||
            },
 | 
			
		||||
        Err(_e) => println!("{}",_e),
 | 
			
		||||
                thread::spawn(|| Conexion::new(c, stream).process_reques());
 | 
			
		||||
            }
 | 
			
		||||
            Err(e) => println!("{}", e)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user