Changed the way how DNS-server start error is handled. Now ALFIS starts normally, and the error is shown in GUI.
This commit is contained in:
+2
-4
@@ -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 {
|
||||
|
||||
+7
-3
@@ -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<Mutex<Context>>, settings: &Settings) {
|
||||
pub fn start_dns_server(context: &Arc<Mutex<Context>>, 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
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
|
||||
+12
-4
@@ -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());
|
||||
}
|
||||
|
||||
@@ -316,6 +316,7 @@ fn action_loaded(context: &Arc<Mutex<Context>>, 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()
|
||||
};
|
||||
|
||||
|
||||
@@ -450,6 +450,11 @@
|
||||
<p id="warning_text"></p>
|
||||
</div>
|
||||
|
||||
<div class="notification mini is-danger is-hidden" id="notification_error">
|
||||
<button class="delete" id="error_close"></button>
|
||||
<p id="error_text"></p>
|
||||
</div>
|
||||
|
||||
<div class="notification mini is-success is-hidden" id="notification_success">
|
||||
<button class="delete" id="success_close"></button>
|
||||
<p id="success_text"></p>
|
||||
|
||||
@@ -472,6 +472,19 @@ function showWarning(text) {
|
||||
setTimeout(button.onclick, 5000);
|
||||
}
|
||||
|
||||
function showError(text) {
|
||||
var warning = document.getElementById("notification_error");
|
||||
var message = document.getElementById("error_text");
|
||||
message.innerHTML = text;
|
||||
|
||||
warning.className = "notification mini is-danger";
|
||||
var button = document.getElementById("error_close");
|
||||
button.onclick = function() {
|
||||
message.value = "";
|
||||
warning.className = "notification mini is-danger is-hidden";
|
||||
}
|
||||
}
|
||||
|
||||
function showSuccess(text) {
|
||||
var warning = document.getElementById("notification_success");
|
||||
var message = document.getElementById("success_text");
|
||||
|
||||
@@ -100,6 +100,12 @@ body {
|
||||
right: 10pt;
|
||||
}
|
||||
|
||||
.notification.mini.is-danger {
|
||||
position: absolute;
|
||||
bottom: 30pt;
|
||||
right: 10pt;
|
||||
}
|
||||
|
||||
.notification.mini.is-success {
|
||||
position: absolute;
|
||||
bottom: 30pt;
|
||||
|
||||
Reference in New Issue
Block a user