end server config parametrization
This commit is contained in:
		
							parent
							
								
									930a1a3692
								
							
						
					
					
						commit
						06816a16ed
					
				| @ -4,14 +4,15 @@ use std::str::FromStr; | |||||||
| use std::io::prelude::*; | use std::io::prelude::*; | ||||||
| use std::collections::HashMap; | use std::collections::HashMap; | ||||||
| 
 | 
 | ||||||
| static FILE: &str = "mrprox.conf"; | static FILE_CONF: &str = "mrprox.conf"; | ||||||
|  | static FILE_SERVERS: &str = "mrprox_servers.conf"; | ||||||
| const DEF_PORT: u16 = 25565; | const DEF_PORT: u16 = 25565; | ||||||
| 
 | 
 | ||||||
| #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] | #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] | ||||||
| pub struct ConfFile{ | pub struct ConfFile{ | ||||||
|     port: String, |     port: String, | ||||||
|     port_conf: String, |     port_conf: String, | ||||||
|     servers: Vec<ServerData>, |     conf_type: String, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] | #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] | ||||||
| @ -24,18 +25,24 @@ pub struct Config{ | |||||||
|     l_servers : HashMap<String, String>, |     l_servers : HashMap<String, String>, | ||||||
|     port: String, |     port: String, | ||||||
|     port_conf: String, |     port_conf: String, | ||||||
|  |     conf_type: String, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Config { | impl Config { | ||||||
|     pub fn new() -> Self { |     pub fn new() -> Self { | ||||||
|         let mut file = File::open(&FILE).unwrap(); |         let mut conf_file = File::open(&FILE_CONF).unwrap(); | ||||||
|         let mut s = String::new(); |         let mut servers_file = File::open(&FILE_SERVERS).unwrap(); | ||||||
|         file.read_to_string(&mut s).unwrap(); |         let mut s1 = String::new(); | ||||||
|         let yam: ConfFile = serde_yaml::from_str(&s).unwrap(); |         let mut s2 = String::new(); | ||||||
|  |         conf_file.read_to_string(&mut s1).unwrap(); | ||||||
|  |         servers_file.read_to_string(&mut s2).unwrap(); | ||||||
|  |         let yam_conf: ConfFile = serde_yaml::from_str(&s1).unwrap(); | ||||||
|  |         let yam_ser: Vec<ServerData> = serde_yaml::from_str(&s2).unwrap(); | ||||||
|         Self{ |         Self{ | ||||||
|             l_servers: Self::get_servers(&yam.servers), |             l_servers: Self::get_servers(&yam_ser), | ||||||
|             port: yam.port, |             port: yam_conf.port, | ||||||
|             port_conf: yam.port_conf, |             port_conf: yam_conf.port_conf, | ||||||
|  |             conf_type: yam_conf.conf_type, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -54,14 +61,10 @@ impl Config { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn flush(&self){ |     pub fn flush(&self){ | ||||||
|         let conf = ConfFile { |         let servers = Vec::from_iter(self.l_servers.iter() | ||||||
|             port: self.port.clone(), |                     .map(|(x, y)| ServerData{domain: (*x).clone(), ip: (*y).clone()})); | ||||||
|             port_conf: self.port_conf.clone(), |         let mut file = File::create(FILE_SERVERS).unwrap(); | ||||||
|             servers: Vec::from_iter(self.l_servers.iter() |         file.write(&serde_yaml::to_string(&servers).unwrap().into_bytes()); | ||||||
|                     .map(|(x, y)| ServerData{domain: (*x).clone(), ip: (*y).clone()})), |  | ||||||
|         }; |  | ||||||
|         let mut file = File::create(FILE).unwrap(); |  | ||||||
|         file.write(&serde_yaml::to_string(&conf).unwrap().into_bytes()); |  | ||||||
|         file.flush(); |         file.flush(); | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| @ -104,5 +107,9 @@ impl Config { | |||||||
|     pub fn get_port_conf(&self) -> &String{ |     pub fn get_port_conf(&self) -> &String{ | ||||||
|         &self.port_conf |         &self.port_conf | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     pub fn get_conf_type(&self) -> &String{ | ||||||
|  |         &self.conf_type | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4,8 +4,9 @@ use std::os::unix::net::UnixListener; | |||||||
| use std::os::unix::net::UnixStream; | use std::os::unix::net::UnixStream; | ||||||
| use std::io::{Error, ErrorKind}; | use std::io::{Error, ErrorKind}; | ||||||
| 
 | 
 | ||||||
| pub const TCP_LIS : u8 = 0; | pub const TCP_LIS : u8 = 1; | ||||||
| pub const UNIX_LIS : u8 = 1; | pub const UNIX_LIS : u8 = 2; | ||||||
|  | pub const ERROR_LIS : u8 = 0; | ||||||
| 
 | 
 | ||||||
| pub trait RWTrait: std::io::Read + std::io::Write + Send {} | pub trait RWTrait: std::io::Read + std::io::Write + Send {} | ||||||
| impl RWTrait for TcpStream {} | impl RWTrait for TcpStream {} | ||||||
| @ -34,7 +35,7 @@ impl GenericListener { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn bind(address: String, type_lis: u8) -> Result<Self, String>{ |     pub fn bind(address: &String, type_lis: u8) -> Result<Self, String>{ | ||||||
|         let ret = match type_lis { |         let ret = match type_lis { | ||||||
|             TCP_LIS => Self::new_tcp(TcpListener::bind(address).unwrap()), |             TCP_LIS => Self::new_tcp(TcpListener::bind(address).unwrap()), | ||||||
|             UNIX_LIS => Self::new_unix(UnixListener::bind(address).unwrap()), |             UNIX_LIS => Self::new_unix(UnixListener::bind(address).unwrap()), | ||||||
| @ -54,5 +55,13 @@ impl GenericListener { | |||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub fn string_top_type(s: &String) -> u8 { | ||||||
|  |         match (*s).as_str(){ | ||||||
|  |             "tcp" => TCP_LIS, | ||||||
|  |             "unix" => UNIX_LIS, | ||||||
|  |             &_ =>  ERROR_LIS, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -10,10 +10,11 @@ pub struct ConfSer{ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl ConfSer { | impl ConfSer { | ||||||
|     fn new(path: String) -> ConfSer{ |     fn new(path: &String, conf_type: &String) -> ConfSer{ | ||||||
|         ConfSer{ |         ConfSer{ | ||||||
|             path: path.clone(), |             path: path.clone(), | ||||||
|             listener: GenericListener::bind(path, 1).unwrap(), |             listener: GenericListener::bind(path, | ||||||
|  |                                 GenericListener::string_top_type(conf_type)).unwrap(), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -27,7 +28,8 @@ impl Drop for ConfSer { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn start(conf: Arc<RwLock<conf::Config>>){ | pub fn start(conf: Arc<RwLock<conf::Config>>){ | ||||||
|     let ser = ConfSer::new(String::from("mineproxy")); |     let ser = ConfSer::new(conf.read().unwrap().get_port_conf() | ||||||
|  |                                         ,conf.read().unwrap().get_conf_type()); | ||||||
| 
 | 
 | ||||||
|     loop{ |     loop{ | ||||||
|         match ser.listener.accept() { |         match ser.listener.accept() { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user