Added timestamp to server
This commit is contained in:
parent
580e97f91b
commit
48e5c2825d
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "chat-reseau"
|
name = "chat-reseau"
|
||||||
version = "0.2.0"
|
version = "0.3.0"
|
||||||
authors = ["Lucien Cartier-Tilet <drakpa@drakpa.fr>"]
|
authors = ["Lucien Cartier-Tilet <drakpa@drakpa.fr>"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
extern crate chrono;
|
||||||
use std::io::*;
|
use std::io::*;
|
||||||
use std::net::{SocketAddr, TcpListener, TcpStream};
|
use std::net::{SocketAddr, TcpListener, TcpStream};
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::sync::{Arc, Mutex, MutexGuard};
|
use std::sync::{Arc, Mutex, MutexGuard};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use self::chrono::Local;
|
||||||
|
|
||||||
// TODO: implement requests 1.x from protocol
|
// TODO: implement requests 1.x from protocol
|
||||||
// TODO: forbid usernames already in use
|
// TODO: forbid usernames already in use
|
||||||
@ -45,6 +47,11 @@ type UserMap = HashMap<SocketAddr, UserMapValue>;
|
|||||||
// CODE //
|
// CODE //
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
pub fn get_time() -> String {
|
||||||
|
let date = Local::now();
|
||||||
|
date.format("[%H:%M:%S]").to_string()
|
||||||
|
}
|
||||||
|
|
||||||
fn distribute_message(
|
fn distribute_message(
|
||||||
msg: &str,
|
msg: &str,
|
||||||
not_to: &SocketAddr,
|
not_to: &SocketAddr,
|
||||||
@ -80,8 +87,11 @@ fn distribute_message(
|
|||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
println!(
|
println!(
|
||||||
"Client {} <{}> disappeared during message distribution: {}",
|
"{} Client {} <{}> disappeared during message distribution: {}",
|
||||||
other_client, other_name, e
|
get_time(),
|
||||||
|
other_client,
|
||||||
|
other_name,
|
||||||
|
e
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -117,7 +127,7 @@ fn disconnect_user(name: &str, client: &SocketAddr, lock: &mut MutexGuard<UserMa
|
|||||||
fn handle_client(stream: TcpStream, clients: Arc<Mutex<UserMap>>) {
|
fn handle_client(stream: TcpStream, clients: Arc<Mutex<UserMap>>) {
|
||||||
// Get client IP and port
|
// Get client IP and port
|
||||||
let client = stream.peer_addr().unwrap();
|
let client = stream.peer_addr().unwrap();
|
||||||
println!("New connection from {}", client);
|
println!("{} New connection from {}", get_time(), client);
|
||||||
|
|
||||||
// Buffered reading and writing
|
// Buffered reading and writing
|
||||||
let mut reader = BufReader::new(&stream);
|
let mut reader = BufReader::new(&stream);
|
||||||
@ -158,13 +168,18 @@ fn handle_client(stream: TcpStream, clients: Arc<Mutex<UserMap>>) {
|
|||||||
send!("Welcome!");
|
send!("Welcome!");
|
||||||
send!("Please enter your name:");
|
send!("Please enter your name:");
|
||||||
let name = receive!();
|
let name = receive!();
|
||||||
println!("Client {} identified as {}", client, name);
|
println!("{} Client {} identified as {}", get_time(), client, name);
|
||||||
Ok(name)
|
Ok(name)
|
||||||
})()
|
})()
|
||||||
{
|
{
|
||||||
Ok(name) => name,
|
Ok(name) => name,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
println!("Client {} disappeared during initialization: {}", client, e);
|
println!(
|
||||||
|
"{} Client {} disappeared during initialization: {}",
|
||||||
|
get_time(),
|
||||||
|
client,
|
||||||
|
e
|
||||||
|
);
|
||||||
return ();
|
return ();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -194,7 +209,7 @@ fn handle_client(stream: TcpStream, clients: Arc<Mutex<UserMap>>) {
|
|||||||
send_clients_name(&client, &mut lock);
|
send_clients_name(&client, &mut lock);
|
||||||
}
|
}
|
||||||
input => {
|
input => {
|
||||||
println!("{} <{}>: {}", client, name, input);
|
println!("{} {} <{}>: {}", get_time(), client, name, input);
|
||||||
{
|
{
|
||||||
let mut lock = clients.lock().unwrap();
|
let mut lock = clients.lock().unwrap();
|
||||||
distribute_message(&format!("{}", input), &client, &mut lock, true);
|
distribute_message(&format!("{}", input), &client, &mut lock, true);
|
||||||
@ -204,12 +219,15 @@ fn handle_client(stream: TcpStream, clients: Arc<Mutex<UserMap>>) {
|
|||||||
})()
|
})()
|
||||||
{
|
{
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
println!("Client {} <{}> left", client, name);
|
println!("{} Client {} <{}> left", get_time(), client, name);
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
println!(
|
println!(
|
||||||
"Client {} <{}> disappeared during chat: {}",
|
"{} Client {} <{}> disappeared during chat: {}",
|
||||||
client, name, e
|
get_time(),
|
||||||
|
client,
|
||||||
|
name,
|
||||||
|
e
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -232,7 +250,11 @@ pub fn serveur(addr: String) {
|
|||||||
Err(e) => panic!("Could not read start TCP listener: {}", e),
|
Err(e) => panic!("Could not read start TCP listener: {}", e),
|
||||||
};
|
};
|
||||||
|
|
||||||
println!("Successfully started the server on {}", serv_addr);
|
println!(
|
||||||
|
"{} Successfully started the server on {}",
|
||||||
|
get_time(),
|
||||||
|
serv_addr
|
||||||
|
);
|
||||||
|
|
||||||
for stream in listener.incoming() {
|
for stream in listener.incoming() {
|
||||||
match stream {
|
match stream {
|
||||||
|
Loading…
Reference in New Issue
Block a user