feat: improved cli
This commit is contained in:
@@ -5,7 +5,7 @@ use crate::utils::logger;
|
||||
use crate::{
|
||||
actor::{peer_registry::PeerRegistry, ActorSystem},
|
||||
error::{Result, SoulseekRs},
|
||||
peer::{ConnectionType, DownloadPeer, NewPeer, Peer},
|
||||
peer::{listen::Listen, ConnectionType, DownloadPeer, NewPeer, Peer},
|
||||
types::{Download, FileSearchResult},
|
||||
utils::{md5, thread_pool::ThreadPool},
|
||||
Transfer,
|
||||
@@ -24,7 +24,7 @@ use std::{
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
use crate::{debug, error, info, trace};
|
||||
use crate::{debug, error, info, trace, warn};
|
||||
const DEFALT_LISTEN_PORT: u32 = 2234;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -58,7 +58,7 @@ impl Default for ClientSettings {
|
||||
"server.slsknet.org".to_string(),
|
||||
2416,
|
||||
),
|
||||
enable_listen: false,
|
||||
enable_listen: true,
|
||||
listen_port: DEFALT_LISTEN_PORT,
|
||||
}
|
||||
}
|
||||
@@ -161,6 +161,8 @@ impl Client {
|
||||
PeerRegistry::new(ctx.actor_system.clone(), sender.clone());
|
||||
ctx.peer_registry = Some(peer_registry);
|
||||
|
||||
let listen_sender = sender.clone();
|
||||
|
||||
let server_actor = ServerActor::new(
|
||||
self.address.clone(),
|
||||
sender,
|
||||
@@ -175,6 +177,22 @@ impl Client {
|
||||
},
|
||||
));
|
||||
|
||||
if self.enable_listen {
|
||||
let listen_port = self.listen_port;
|
||||
let client_sender = listen_sender;
|
||||
let context = self.context.clone();
|
||||
let own_username = self.username.clone();
|
||||
|
||||
thread::spawn(move || {
|
||||
Listen::start(
|
||||
listen_port,
|
||||
client_sender,
|
||||
context,
|
||||
own_username,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Self::listen_to_client_operations(
|
||||
message_reader,
|
||||
self.context.clone(),
|
||||
@@ -366,7 +384,7 @@ impl Client {
|
||||
}
|
||||
}
|
||||
if let Some(error) = error {
|
||||
error!(
|
||||
warn!(
|
||||
"[client] Peer {} disconnected with error: {:?}",
|
||||
username, error
|
||||
);
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
use std::env;
|
||||
use std::sync::Once;
|
||||
use std::sync::{
|
||||
atomic::{AtomicBool, Ordering},
|
||||
Mutex, Once,
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
||||
pub enum LogLevel {
|
||||
@@ -13,6 +16,9 @@ pub enum LogLevel {
|
||||
static INIT: Once = Once::new();
|
||||
static mut LOG_LEVEL: LogLevel = LogLevel::Warn;
|
||||
|
||||
static BUFFER: Mutex<Vec<String>> = Mutex::new(Vec::new());
|
||||
static BUFFERING: AtomicBool = AtomicBool::new(false);
|
||||
|
||||
pub fn init() {
|
||||
INIT.call_once(|| {
|
||||
let level = env::var("LOG_LEVEL")
|
||||
@@ -97,7 +103,7 @@ pub fn log(level: LogLevel, message: &str) {
|
||||
let minutes = (seconds_in_day % 3600) / 60;
|
||||
let seconds = seconds_in_day % 60;
|
||||
|
||||
eprintln!(
|
||||
let formatted_message = format!(
|
||||
"[{:04}-{:02}-{:02} {:02}:{:02}:{:02}.{:03}] [{}] {}",
|
||||
year,
|
||||
month,
|
||||
@@ -109,10 +115,37 @@ pub fn log(level: LogLevel, message: &str) {
|
||||
level_str,
|
||||
message
|
||||
);
|
||||
|
||||
if BUFFERING.load(Ordering::Relaxed) {
|
||||
if let Ok(mut buffer) = BUFFER.lock() {
|
||||
buffer.push(formatted_message);
|
||||
}
|
||||
} else {
|
||||
eprintln!("{}", formatted_message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn enable_buffering() {
|
||||
BUFFERING.store(true, Ordering::Relaxed);
|
||||
}
|
||||
|
||||
pub fn disable_buffering() {
|
||||
BUFFERING.store(false, Ordering::Relaxed);
|
||||
}
|
||||
|
||||
pub fn flush_buffered_logs() {
|
||||
disable_buffering();
|
||||
|
||||
if let Ok(mut buffer) = BUFFER.lock() {
|
||||
for message in buffer.iter() {
|
||||
eprintln!("{}", message);
|
||||
}
|
||||
buffer.clear();
|
||||
}
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! error {
|
||||
($($arg:tt)*) => {
|
||||
|
||||
Reference in New Issue
Block a user