From 0e8d39751e37586092a9e88740179b19aebd9440 Mon Sep 17 00:00:00 2001 From: Revertron Date: Sat, 20 Nov 2021 16:11:05 +0100 Subject: [PATCH] Changed the way how DNS-server start error is handled. Now ALFIS starts normally, and the error is shown in GUI. --- src/dns/server.rs | 6 ++---- src/dns_utils.rs | 10 +++++++--- src/event.rs | 1 + src/main.rs | 16 ++++++++++++---- src/web_ui.rs | 1 + src/webview/index.html | 5 +++++ src/webview/scripts.js | 13 +++++++++++++ src/webview/styles.css | 6 ++++++ 8 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/dns/server.rs b/src/dns/server.rs index fa02a92..4c1d9ba 100644 --- a/src/dns/server.rs +++ b/src/dns/server.rs @@ -178,8 +178,7 @@ impl DnsServer for DnsUdpServer { /// This method takes ownership of the server, preventing the method from being called multiple times. fn run_server(self) -> Result<()> { // Bind the socket - let socket = UdpSocket::bind(self.context.dns_listen.as_str()) - .expect(&format!("Cannot start DNS server on {}! Change listen address in config!", self.context.dns_listen.as_str())); + let socket = UdpSocket::bind(self.context.dns_listen.as_str())?; // Spawn threads for handling requests for thread_id in 0..self.thread_count { @@ -310,8 +309,7 @@ impl DnsTcpServer { impl DnsServer for DnsTcpServer { fn run_server(mut self) -> Result<()> { - let socket = TcpListener::bind(self.context.dns_listen.as_str()) - .expect(&format!("Cannot start DNS server on {}! Change listen address in config!", self.context.dns_listen.as_str())); + let socket = TcpListener::bind(self.context.dns_listen.as_str())?; // Spawn threads for handling requests, and create the channels for thread_id in 0..self.thread_count { diff --git a/src/dns_utils.rs b/src/dns_utils.rs index 4067bb2..1c9933d 100644 --- a/src/dns_utils.rs +++ b/src/dns_utils.rs @@ -11,22 +11,26 @@ use crate::dns::server::{DnsServer, DnsTcpServer, DnsUdpServer}; use crate::{Context, Settings}; /// Starts UDP and TCP DNS-servers -pub fn start_dns_server(context: &Arc>, settings: &Settings) { +pub fn start_dns_server(context: &Arc>, settings: &Settings) -> bool { let server_context = create_server_context(Arc::clone(&context), &settings); + let mut result = true; if server_context.enable_udp { let udp_server = DnsUdpServer::new(Arc::clone(&server_context), settings.dns.threads); if let Err(e) = udp_server.run_server() { - error!("Failed to bind UDP listener: {:?}", e); + error!("Failed to bind UDP listener on {}: {:?}", &server_context.dns_listen, e); + result = false; } } if server_context.enable_tcp { let tcp_server = DnsTcpServer::new(Arc::clone(&server_context), settings.dns.threads); if let Err(e) = tcp_server.run_server() { - error!("Failed to bind TCP listener: {:?}", e); + error!("Failed to bind TCP listener on {}: {:?}", &server_context.dns_listen, e); + result = false; } } + result } /// Creates DNS-context with all needed settings diff --git a/src/event.rs b/src/event.rs index b9a1848..43baae4 100644 --- a/src/event.rs +++ b/src/event.rs @@ -15,4 +15,5 @@ pub enum Event { NetworkStatus { blocks: u64, domains: i64, keys: i64, nodes: usize }, Syncing { have: u64, height: u64 }, SyncFinished, + Error { text: String } } diff --git a/src/main.rs b/src/main.rs index af459d4..f4e9365 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,7 +22,7 @@ use std::process::exit; use std::sync::atomic::{AtomicBool, Ordering}; use alfis::event::Event; -use alfis::eventbus::register; +use alfis::eventbus::{post, register}; use alfis::keystore::create_key; use alfis::{ dns_utils, Block, Bytes, Chain, Context, Keystore, Miner, Network, Settings, Transaction, ALFIS_DEBUG, DB_NAME, ORIGIN_DIFFICULTY @@ -207,9 +207,11 @@ fn main() { } } - if settings_copy.dns.threads > 0 { - dns_utils::start_dns_server(&context, &settings_copy); - } + let dns_server_ok = if settings_copy.dns.threads > 0 { + dns_utils::start_dns_server(&context, &settings_copy) + } else { + true + }; let mut miner_obj = Miner::new(Arc::clone(&context)); miner_obj.start_mining_thread(); @@ -230,6 +232,12 @@ fn main() { thread::sleep(sleep); } } else { + if !dns_server_ok { + thread::spawn(|| { + thread::sleep(Duration::from_millis(500)); + post(Event::Error { text: String::from("Error starting DNS-server. Please, check that it’s port is not busy.") }); + }); + } #[cfg(feature = "webgui")] web_ui::run_interface(Arc::clone(&context), miner.clone()); } diff --git a/src/web_ui.rs b/src/web_ui.rs index 6ad82f2..5898494 100644 --- a/src/web_ui.rs +++ b/src/web_ui.rs @@ -316,6 +316,7 @@ fn action_loaded(context: &Arc>, web_view: &mut WebView<()>) { event_handle_info(&handle, &format!("Blockchain changed, current block count is {} now.", index)); String::new() // Nothing } + Event::Error { text } => format!("showError('{}')", &text), _ => String::new() }; diff --git a/src/webview/index.html b/src/webview/index.html index 4996fa3..1536663 100644 --- a/src/webview/index.html +++ b/src/webview/index.html @@ -450,6 +450,11 @@

+ +