|
|
@@ -1,12 +1,12 @@
|
|
1
|
1
|
extern crate srv_commands;
|
|
2
|
2
|
extern crate srv_config;
|
|
3
|
3
|
|
|
4
|
|
-
|
|
5
|
4
|
use std::io::{BufReader, BufRead, BufWriter, Write};
|
|
6
|
5
|
use std::collections::VecDeque;
|
|
7
|
6
|
use std::net::{TcpListener, TcpStream};
|
|
8
|
7
|
use srv_commands::Command;
|
|
9
|
8
|
use srv_config::Config;
|
|
|
9
|
+use HashServerError::Parse;
|
|
10
|
10
|
|
|
11
|
11
|
#[derive(Debug)]
|
|
12
|
12
|
pub enum HashServerError {
|
|
|
@@ -26,10 +26,10 @@ impl From<srv_commands::ParseError> for HashServerError {
|
|
26
|
26
|
}
|
|
27
|
27
|
}
|
|
28
|
28
|
|
|
29
|
|
-fn handle_client(stream: TcpStream, orders: &mut VecDeque<String>, config:&Config) {
|
|
30
|
|
- let mut reader = BufReader::new(&stream);
|
|
31
|
|
- let mut writer = BufWriter::new(&stream);
|
|
32
|
|
-
|
|
|
29
|
+fn handle_client(stream: &TcpStream, orders: &mut VecDeque<String>, v: bool) {
|
|
|
30
|
+ let mut reader = BufReader::new(stream);
|
|
|
31
|
+ let mut writer = BufWriter::new(stream);
|
|
|
32
|
+
|
|
33
|
33
|
loop {
|
|
34
|
34
|
let mut line = String::new();
|
|
35
|
35
|
match reader.read_line(&mut line) {
|
|
|
@@ -38,8 +38,8 @@ fn handle_client(stream: TcpStream, orders: &mut VecDeque<String>, config:&Confi
|
|
38
|
38
|
break;
|
|
39
|
39
|
}
|
|
40
|
40
|
|
|
41
|
|
- let cmd = srv_commands::parse(&line.trim_right()).map_err(HashServerError::Parse);
|
|
42
|
|
-
|
|
|
41
|
+ let cmd = srv_commands::parse(&line).map_err(HashServerError::Parse);
|
|
|
42
|
+
|
|
43
|
43
|
match cmd {
|
|
44
|
44
|
Ok(Command::Stage(str)) => {
|
|
45
|
45
|
orders.push_front(str);
|
|
|
@@ -47,64 +47,75 @@ fn handle_client(stream: TcpStream, orders: &mut VecDeque<String>, config:&Confi
|
|
47
|
47
|
Ok(Command::Retrieve) => {
|
|
48
|
48
|
if orders.is_empty() {
|
|
49
|
49
|
let _ = writer.write(b"No order on stage!\n");
|
|
50
|
|
-
|
|
|
50
|
+
|
|
51
|
51
|
} else {
|
|
52
|
|
- if let Some(latest_order) = orders.pop_front() {
|
|
53
|
|
- let _ = writer.write(latest_order.as_bytes());
|
|
54
|
|
- let _ = writer.write(b"\n");
|
|
55
|
|
- }
|
|
|
52
|
+ if let Some(latest_order) = orders.pop_front() {
|
|
|
53
|
+ let _ = writer.write(latest_order.as_bytes());
|
|
|
54
|
+ let _ = writer.write(b"\n");
|
|
|
55
|
+ }
|
|
56
|
56
|
}
|
|
57
|
57
|
}
|
|
58
|
58
|
Ok(Command::Control(ref control_string)) => {
|
|
59
|
|
- if config.verbosity > 0 {
|
|
|
59
|
+ if v {
|
|
60
|
60
|
println!("Received Control: {}", control_string);
|
|
61
|
61
|
}
|
|
62
|
62
|
}
|
|
63
|
|
- Err(ref e) => {
|
|
|
63
|
+ Err(Parse(e)) => {
|
|
64
|
64
|
println!("Error occurred: {:?}", e);
|
|
65
|
65
|
}
|
|
|
66
|
+ _ => {}
|
|
66
|
67
|
}
|
|
67
|
|
-
|
|
68
|
|
- let _ = writer.flush();
|
|
69
|
|
- },
|
|
|
68
|
+
|
|
|
69
|
+ let _ = writer.flush();
|
|
|
70
|
+ }
|
|
70
|
71
|
_ => {
|
|
71
|
72
|
break;
|
|
72
|
|
- },
|
|
|
73
|
+ }
|
|
73
|
74
|
}
|
|
74
|
75
|
}
|
|
75
|
76
|
}
|
|
76
|
77
|
|
|
77
|
78
|
pub fn main() {
|
|
78
|
|
-
|
|
79
|
|
- let c = Config::load();
|
|
|
79
|
+
|
|
|
80
|
+ let c = Config::load();
|
|
80
|
81
|
|
|
81
|
82
|
if c.verbosity > 0 {
|
|
82
|
83
|
println!("Starting Multi Hash Server 0.1:");
|
|
83
|
|
- println!("verbosity: {} | address: {} | port: {} | test-mode: {}", c.verbosity, c.address, c.port, c.testing);
|
|
|
84
|
+ println!(
|
|
|
85
|
+ "verbosity: {} | address: {} | port: {} | test-mode: {}",
|
|
|
86
|
+ c.verbosity,
|
|
|
87
|
+ c.address,
|
|
|
88
|
+ c.port,
|
|
|
89
|
+ c.testing
|
|
|
90
|
+ );
|
|
84
|
91
|
}
|
|
85
|
92
|
|
|
86
|
93
|
let host = format!("{}:{}", c.address, c.port);
|
|
87
|
94
|
|
|
88
|
|
- let mut orders:VecDeque<String> = VecDeque::new();
|
|
89
|
|
-
|
|
90
|
|
- if c.testing {
|
|
91
|
|
- orders.push_front(String::from("Test3"));
|
|
92
|
|
- orders.push_front(String::from("Test2"));
|
|
93
|
|
- orders.push_front(String::from("Test1"));
|
|
94
|
|
- }
|
|
95
|
|
-
|
|
|
95
|
+ let mut orders: VecDeque<String> = VecDeque::new();
|
|
|
96
|
+
|
|
|
97
|
+ if c.testing {
|
|
|
98
|
+ orders.push_front(String::from("Test3"));
|
|
|
99
|
+ orders.push_front(String::from("Test2"));
|
|
|
100
|
+ orders.push_front(String::from("Test1"));
|
|
|
101
|
+ }
|
|
|
102
|
+
|
|
96
|
103
|
match TcpListener::bind(host).map_err(HashServerError::Io) {
|
|
97
|
104
|
Ok(listener) => {
|
|
98
|
105
|
for s in listener.incoming() {
|
|
99
|
106
|
if let Ok(stream) = s {
|
|
100
|
|
- if c.verbosity > 1 { println!("[DEBUG] New Client connected") }
|
|
101
|
|
- handle_client(stream, &mut orders, &c);
|
|
102
|
|
- if c.verbosity > 1 { println!("[DEBUG] Client diconnected") }
|
|
|
107
|
+ if c.verbosity > 1 {
|
|
|
108
|
+ println!("[DEBUG] New Client connected")
|
|
|
109
|
+ }
|
|
|
110
|
+ handle_client(&stream, &mut orders, c.verbosity > 0);
|
|
|
111
|
+ if c.verbosity > 1 {
|
|
|
112
|
+ println!("[DEBUG] Client diconnected")
|
|
|
113
|
+ }
|
|
103
|
114
|
}
|
|
104
|
115
|
}
|
|
105
|
116
|
}
|
|
106
|
117
|
Err(e) => {
|
|
107
|
|
- println!("{:?}", e);
|
|
|
118
|
+ println!("Failed to start the MultiHashServer: {:?}", e);
|
|
108
|
119
|
}
|
|
109
|
120
|
}
|
|
110
|
121
|
}
|