Changed the way how DNS-server start error is handled. Now ALFIS starts normally, and the error is shown in GUI.

pull/180/head
Revertron 3 years ago
parent ab742885dd
commit 0e8d39751e

@ -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 {

@ -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 }
}

@ -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&rsquo;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;

Loading…
Cancel
Save