Skip to content

Commit 405a574

Browse files
committed
Small refactoring
1 parent d3bce93 commit 405a574

File tree

8 files changed

+60
-184
lines changed

8 files changed

+60
-184
lines changed

client/Cargo.lock

Lines changed: 0 additions & 106 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,5 @@ edition = "2021"
77

88
[dependencies]
99
clap = { version = "4.1.1", features = ["derive"] }
10-
tokio = { version = "1", features = ["full"] }
1110
termion = "2.0.1"
1211
parking_lot = "0.12.1"

client/src/state.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,12 @@ impl State {
4646

4747
fn read_username(&mut self) -> io::Result<()> {
4848
println!("{}", termion::clear::All);
49-
write!(std::io::stdout(), "Username: ")?;
49+
print!("Username: ");
5050
std::io::stdout().flush()?;
51-
let mut input = BufReader::new(std::io::stdin());
51+
5252
let mut username = String::new();
53-
input.read_line(&mut username)?;
53+
io::stdin().read_line(&mut username)?;
54+
5455
self.username = username.trim().to_owned();
5556
println!("{}", termion::clear::All);
5657

client/src/types.rs

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,6 @@ impl fmt::Display for ParseSignalDataError {
2323
}
2424
}
2525

26-
#[derive(Debug, Clone, PartialEq, Eq)]
27-
pub struct AuthConnectionError;
28-
impl Error for AuthConnectionError {}
29-
impl fmt::Display for AuthConnectionError {
30-
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
31-
write!(f, "auth connection error")
32-
}
33-
}
34-
35-
#[derive(Debug, Clone, PartialEq, Eq)]
36-
pub struct IncomingMessageError;
37-
impl Error for IncomingMessageError {}
38-
impl fmt::Display for IncomingMessageError {
39-
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
40-
write!(f, "incoming message error")
41-
}
42-
}
43-
44-
4526
#[derive(Debug, Clone, Copy)]
4627
pub enum SignalType {
4728
Connection,

server/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use anyhow::Result;
22

33
use service::Service;
44
use settings::Settings;
5-
use state::{State};
5+
use state::State;
66

77
mod settings;
88
mod state;
@@ -13,7 +13,7 @@ mod reader;
1313

1414
fn main() -> Result<()> {
1515
let settings = Settings::new();
16-
let state = State::new(settings.to_owned());
16+
let state = State::new(settings);
1717

1818
Service::run(state)?;
1919

server/src/managers/data_manager.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,12 @@ use super::types::{
2121
SignalType
2222
};
2323

24-
pub fn process_incoming_message(messages_pool: Arc<Mutex<MessagesPool>>, signal: String) -> Result<()> {
25-
let data = SignalData::from_str(&signal)?;
26-
27-
if !data.with_message || data.username.is_none() {
28-
return Err(IncomingMessageError.into())
29-
}
30-
31-
messages_pool.lock().push(PoolMessage {
32-
id: Uuid::new_v4().to_string(),
33-
username: data.username.clone().unwrap(),
34-
message: data.message.clone().unwrap().trim().to_owned(),
35-
from_server: false
36-
});
37-
38-
Ok(())
39-
}
4024
pub trait DataManager {
4125
fn deny_auth(&mut self) -> Result<()>;
4226
fn auth(&mut self, signal: String) -> Result<SignalType>;
4327
fn remove_user(&mut self, username: String) -> Result<()>;
4428
fn process_messages_pool(&mut self, receiver: Receiver<()>) -> Result<()>;
29+
fn process_incoming_message(messages_pool: Arc<Mutex<MessagesPool>>, signal: String) -> Result<()>;
4530
}
4631

4732
impl DataManager for Manager {
@@ -138,4 +123,21 @@ impl DataManager for Manager {
138123

139124
Ok(())
140125
}
126+
127+
fn process_incoming_message(messages_pool: Arc<Mutex<MessagesPool>>, signal: String) -> Result<()> {
128+
let data = SignalData::from_str(&signal)?;
129+
130+
if !data.with_message || data.username.is_none() {
131+
return Err(IncomingMessageError.into())
132+
}
133+
134+
messages_pool.lock().push(PoolMessage {
135+
id: Uuid::new_v4().to_string(),
136+
username: data.username.clone().unwrap(),
137+
message: data.message.clone().unwrap().trim().to_owned(),
138+
from_server: false
139+
});
140+
141+
Ok(())
142+
}
141143
}

server/src/managers/stream_manager.rs

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,25 @@ use std::{
33
Write, BufReader
44
},
55
time::Duration,
6-
thread,
7-
net::TcpStream,
6+
thread,
87
sync::{
9-
Arc,
108
mpsc::{
119
self,
1210
Sender
1311
}
1412
}
1513
};
1614
use anyhow::Result;
17-
use parking_lot::Mutex;
1815

19-
use crate::{managers::{data_manager::DataManager, types::SignalType}, messages_pool::MessagesPool, reader::StreamReader};
16+
use crate::{managers::{data_manager::DataManager, types::SignalType}, reader::StreamReader};
2017

21-
use super::{manager::Manager, data_manager::process_incoming_message};
22-
23-
fn process_signals(stream: TcpStream, messages_pool: Arc<Mutex<MessagesPool>>, sender: Sender<()>) -> Result<()> {
24-
let mut reader = BufReader::new(stream.try_clone()?);
25-
loop {
26-
let data_from_socket = match reader.read_signal(None) {
27-
Ok(s) => s,
28-
Err(_) => {
29-
break;
30-
}
31-
};
32-
33-
match process_incoming_message(messages_pool.clone(), data_from_socket) {
34-
Ok(_) => (),
35-
Err(_) => println!("invalid message")
36-
};
37-
}
38-
39-
sender.send(())?;
40-
41-
Ok(())
42-
}
18+
use super::manager::Manager;
4319

4420
pub trait StreamManager {
4521
fn process_connection(&mut self) -> Result<()>;
4622
fn process_disconnection(&mut self) -> Result<()>;
4723
fn send_data(&mut self, data: &str) -> Result<()>;
24+
fn process_signals(&mut self, sender: Sender<()>) -> Result<()>;
4825
}
4926

5027
impl StreamManager for Manager {
@@ -72,14 +49,8 @@ impl StreamManager for Manager {
7249
};
7350

7451
if let SignalType::Connection = signal_type {
75-
let cloned_stream = self.stream.try_clone()?;
76-
let cloned_messages_pool = self.messages_pool.clone();
7752
let (channel_sender, channel_receiver) = mpsc::channel::<()>();
78-
thread::spawn(move || -> Result<()> {
79-
process_signals(cloned_stream, cloned_messages_pool, channel_sender)?;
80-
81-
Ok(())
82-
});
53+
self.process_signals(channel_sender)?;
8354

8455
self.process_messages_pool(channel_receiver)?;
8556
}
@@ -100,4 +71,32 @@ impl StreamManager for Manager {
10071
self.stream.write(data.as_bytes())?;
10172
Ok(())
10273
}
74+
75+
fn process_signals(&mut self, sender: Sender<()>) -> Result<()> {
76+
let cloned_stream = self.stream.try_clone()?;
77+
let cloned_messages_pool = self.messages_pool.clone();
78+
79+
thread::spawn(move || -> Result<()> {
80+
let mut reader = BufReader::new(cloned_stream.try_clone()?);
81+
loop {
82+
let data_from_socket = match reader.read_signal(None) {
83+
Ok(s) => s,
84+
Err(_) => {
85+
break;
86+
}
87+
};
88+
89+
match Self::process_incoming_message(cloned_messages_pool.clone(), data_from_socket) {
90+
Ok(_) => (),
91+
Err(_) => println!("invalid message")
92+
};
93+
}
94+
95+
sender.send(())?;
96+
97+
Ok(())
98+
});
99+
100+
Ok(())
101+
}
103102
}

0 commit comments

Comments
 (0)