terminal-chat
37 строк · 957.0 Байт
1use std::{
2net::TcpStream,
3io::BufReader,
4sync::Arc
5};
6use parking_lot::Mutex;
7use anyhow::Result;
8
9use crate::{state::State, messages_pool::MessagesPool};
10use super::stream_manager::StreamManager;
11
12pub struct Manager {
13pub stream: TcpStream,
14pub reader: BufReader<TcpStream>,
15pub state: State,
16pub messages_pool: Arc<Mutex<MessagesPool>>,
17pub last_read_message_id: String,
18pub connected_user_username: Option<String>,
19pub connected_peer_addr: String
20}
21
22impl Manager {
23pub fn new(stream: TcpStream, state: State, messages_pool: Arc<Mutex<MessagesPool>>) -> Result<()> {
24let mut manager = Manager {
25stream: stream.try_clone()?,
26reader: BufReader::new(stream.try_clone()?),
27state,
28messages_pool,
29last_read_message_id: String::new(),
30connected_user_username: None,
31connected_peer_addr: stream.try_clone()?.peer_addr()?.to_string()
32};
33
34manager.process_connection()?;
35Ok(())
36}
37}