diff --git a/src/client.rs b/src/client.rs index cc85f0c..b12f7b1 100644 --- a/src/client.rs +++ b/src/client.rs @@ -72,6 +72,7 @@ impl ClientContext { } } pub struct Client { + enable_listen: bool, listen_port: u32, address: PeerAddress, username: String, @@ -85,6 +86,7 @@ impl Client { address: PeerAddress, username: String, password: String, + enable_listen: bool, listen_port: Option, ) -> Self { crate::utils::logger::init(); @@ -94,6 +96,7 @@ impl Client { context.read().unwrap().thread_pool.thread_count() ); Self { + enable_listen, listen_port: listen_port.unwrap_or(DEFALT_LISTEN_PORT), address, username, @@ -107,7 +110,7 @@ impl Client { username: String, password: String, ) -> Self { - Self::new(address, username, password, None) + Self::new(address, username, password, false, None) } pub fn connect(&mut self) { @@ -123,39 +126,45 @@ impl Client { let client_sender = sender.clone(); - self.server = - match Server::new(self.address.clone(), sender, self.listen_port) { - Ok(server) => { - info!( - "Connected to server at {}:{}", - server.get_address().get_host(), - server.get_address().get_port() - ); + self.server = match Server::new( + self.address.clone(), + sender, + self.listen_port, + self.enable_listen, + ) { + Ok(server) => { + info!( + "Connected to server at {}:{}", + server.get_address().get_host(), + server.get_address().get_port() + ); - // thread::spawn(move || { - // Listen::start( - // listen_port, - // client_sender.clone(), - // context.clone(), - // own_username, - // ); - // }); - let mut unlocked_context = self.context.write().unwrap(); - unlocked_context.server_sender = - Some(server.get_sender().clone()); + if self.enable_listen { + thread::spawn(move || { + Listen::start( + listen_port, + client_sender.clone(), + context.clone(), + own_username, + ); + }); + } + let mut unlocked_context = self.context.write().unwrap(); + unlocked_context.server_sender = + Some(server.get_sender().clone()); - Self::listen_to_client_operations( - message_reader, - self.context.clone(), - self.username.clone(), - ); - Some(server) - } - Err(e) => { - error!("Error connecting to server: {}", e); - None - } - }; + Self::listen_to_client_operations( + message_reader, + self.context.clone(), + self.username.clone(), + ); + Some(server) + } + Err(e) => { + error!("Error connecting to server: {}", e); + None + } + }; } pub fn login(&self) -> Result { @@ -556,7 +565,7 @@ impl Client { ) { Ok((download, filename)) => { trace!("[client] downloaded {} bytes {:?} ", filename, download.size); - download.sender.send(DownloadStatus::Completed).unwrap(); + download.sender.send(DownloadStatus::Completed).unwrap(); } Err(e) => { trace!("[client] failed to download: {}", e); diff --git a/src/main.rs b/src/main.rs index 5c744df..402d246 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,13 @@ fn main() { use soulseek_rs::{Client, PeerAddress}; use std::time::Duration; - let mut client = Client::with_defaults( + let mut client = Client::new( // PeerAddress::new(String::from("server.slsknet.org"), 2242), PeerAddress::new(String::from("127.0.0.1"), 2242), String::from("insane_in_the_brain3"), String::from("13375137"), + true, + None, ); client.connect(); diff --git a/src/server.rs b/src/server.rs index da7e6a0..4ad5082 100644 --- a/src/server.rs +++ b/src/server.rs @@ -195,12 +195,14 @@ pub struct Server { sender: Sender, context: Arc>, listen_port: u32, + enable_listen: bool, } impl Server { pub fn new( address: PeerAddress, client_channel: Sender, listen_port: u32, + enable_listen: bool, ) -> std::result::Result { let (sender, server_channel): ( Sender, @@ -214,6 +216,7 @@ impl Server { context, sender, listen_port, + enable_listen, }; server.start_read_write_loops(server_channel, client_channel)?; @@ -475,9 +478,13 @@ impl Server { )); self.queue_message(MessageFactory::build_no_parent_message()); self.queue_message(MessageFactory::build_set_status_message(2)); - self.queue_message(MessageFactory::build_set_wait_port_message( - self.listen_port, - )); + if self.enable_listen { + self.queue_message( + MessageFactory::build_set_wait_port_message( + self.listen_port, + ), + ); + } } Ok(logged_in.unwrap())