Browse Source

Improved message display in client

master
Phuntsok Drak-pa 1 year ago
parent
commit
66a6bc2bc5
4 changed files with 67 additions and 18 deletions
  1. +1
    -0
      Lucien/Rust/Cargo.toml
  2. +64
    -17
      Lucien/Rust/src/client.rs
  3. +1
    -1
      Lucien/Rust/src/main.rs
  4. +1
    -0
      Lucien/Rust/src/server.rs

+ 1
- 0
Lucien/Rust/Cargo.toml View File

@@ -6,3 +6,4 @@ authors = ["Lucien Cartier-Tilet <[email protected]>"]
[dependencies]
colored = "1.6"
chrono = "0.4"
term_size = "0.3"

+ 64
- 17
Lucien/Rust/src/client.rs View File

@@ -1,5 +1,6 @@
extern crate chrono;
extern crate colored;
extern crate term_size;
use std;
use std::io::*;
use std::net::TcpStream;
@@ -10,7 +11,8 @@ use self::colored::*;
use self::chrono::Local;

// TODO: Limit usernames to ascii
// TODO: implement requests 1.x from protocol
// TODO: Implement requests 1.x from protocol
// TODO: forbid usernames already in use

fn hash_name(name: &str) -> usize {
let mut s = DefaultHasher::new();
@@ -82,8 +84,7 @@ fn write_to_server(stream: TcpStream) {
if line.len() > 2000 {
println!(
"{}",
"Cannot send a message longer than 2000 characters"
.bright_red()
"Cannot send a message longer than 2000 characters".bright_red()
);
continue;
}
@@ -150,12 +151,7 @@ fn exchange_with_server(stream: TcpStream) {
"FROM" => {
let date = Local::now();
let name = String::from(spliced_input[1]);

let mut msg = String::new();
for i in 3..spliced_input.len() {
msg.push_str(" ");
msg.push_str(spliced_input[i]);
}
let mut first_line = true;

// Hashing name for color
let mut s = DefaultHasher::new();
@@ -171,12 +167,63 @@ fn exchange_with_server(stream: TcpStream) {
name.push_str(spliced_input[1]);
name.push('>');

println!(
"{} {}:{}",
date.format("[%H:%M:%S]").to_string().dimmed(),
name.color(COLORS[name_hash]),
msg.yellow().dimmed()
);
if let Some((w, _)) = term_size::dimensions() {
let mut msg = String::new();
let w = w - 34;

for mut i in 3..spliced_input.len() {
if w > msg.len() + spliced_input[i].len() + 1 {
msg.push(' ');
msg.push_str(spliced_input[i]);
} else {
if first_line == true {
println!(
"{} {}:{}",
date.format("[%H:%M:%S]").to_string().dimmed(),
name.color(COLORS[name_hash]),
msg.yellow().dimmed()
);
first_line = false;
} else {
println!(
"{}{}",
" |".green(),
msg.yellow().dimmed()
);
}
msg = String::new();
#[allow(unused_assignments)]
i = i - 1;
}
}

if first_line == true {
println!(
"{} {}:{}",
date.format("[%H:%M:%S]").to_string().dimmed(),
name.color(COLORS[name_hash]),
msg.yellow().dimmed()
);
} else {
println!(
"{}{}",
" |".green(),
msg.yellow().dimmed()
);
}
} else {
let mut msg = String::new();
for i in 3..spliced_input.len() {
msg.push_str(" ");
msg.push_str(spliced_input[i]);
}
println!(
"{} {}{}",
date.format("[%H:%M:%S]").to_string().dimmed(),
name.color(COLORS[name_hash]),
msg.yellow().dimmed()
);
}
}
"BYE" => {
return Ok("Ok");
@@ -194,7 +241,7 @@ fn exchange_with_server(stream: TcpStream) {
println!(
"{}{}{}{}",
date.format("[%H:%M:%S]").to_string().dimmed(),
" ------> ".green(),
" ------> ".green(),
spliced_input[1].color(COLORS[name_hash]),
" has joined".green()
)
@@ -206,7 +253,7 @@ fn exchange_with_server(stream: TcpStream) {
println!(
"{}{}{}{}",
date.format("[%H:%M:%S]").to_string().dimmed(),
" <------ ".red(),
" <------ ".red(),
spliced_input[1].color(COLORS[name_hash]),
" has left".red()
)


+ 1
- 1
Lucien/Rust/src/main.rs View File

@@ -1,5 +1,5 @@
#![feature(type_ascription)]
#![feature(stmt_expr_attributes)]
use std::env;

pub mod client;


+ 1
- 0
Lucien/Rust/src/server.rs View File

@@ -5,6 +5,7 @@ use std::sync::{Arc, Mutex, MutexGuard};
use std::collections::HashMap;

// TODO: implement requests 1.x from protocol
// TODO: forbid usernames already in use

///////////////////////////////////////////////////////////////////////////////
// Evolution implementation protocole //


Loading…
Cancel
Save