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.
|
/// This method takes ownership of the server, preventing the method from being called multiple times.
|
||||||
fn run_server(self) -> Result<()> {
|
fn run_server(self) -> Result<()> {
|
||||||
// Bind the socket
|
// Bind the socket
|
||||||
let socket = UdpSocket::bind(self.context.dns_listen.as_str())
|
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()));
|
|
||||||
|
|
||||||
// Spawn threads for handling requests
|
// Spawn threads for handling requests
|
||||||
for thread_id in 0..self.thread_count {
|
for thread_id in 0..self.thread_count {
|
||||||
@@ -310,8 +309,7 @@ impl DnsTcpServer {
|
|||||||
|
|
||||||
impl DnsServer for DnsTcpServer {
|
impl DnsServer for DnsTcpServer {
|
||||||
fn run_server(mut self) -> Result<()> {
|
fn run_server(mut self) -> Result<()> {
|
||||||
let socket = TcpListener::bind(self.context.dns_listen.as_str())
|
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()));
|
|
||||||
|
|
||||||
// Spawn threads for handling requests, and create the channels
|
// Spawn threads for handling requests, and create the channels
|
||||||
for thread_id in 0..self.thread_count {
|
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};
|
use crate::{Context, Settings};
|
||||||
|
|
||||||
/// Starts UDP and TCP DNS-servers
|
/// 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 server_context = create_server_context(Arc::clone(&context), &settings);
|
||||||
|
|
||||||
|
let mut result = true;
|
||||||
if server_context.enable_udp {
|
if server_context.enable_udp {
|
||||||
let udp_server = DnsUdpServer::new(Arc::clone(&server_context), settings.dns.threads);
|
let udp_server = DnsUdpServer::new(Arc::clone(&server_context), settings.dns.threads);
|
||||||
if let Err(e) = udp_server.run_server() {
|
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 {
|
if server_context.enable_tcp {
|
||||||
let tcp_server = DnsTcpServer::new(Arc::clone(&server_context), settings.dns.threads);
|
let tcp_server = DnsTcpServer::new(Arc::clone(&server_context), settings.dns.threads);
|
||||||
if let Err(e) = tcp_server.run_server() {
|
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
|
/// Creates DNS-context with all needed settings
|
||||||
|
|||||||
@@ -15,4 +15,5 @@ pub enum Event {
|
|||||||
NetworkStatus { blocks: u64, domains: i64, keys: i64, nodes: usize },
|
NetworkStatus { blocks: u64, domains: i64, keys: i64, nodes: usize },
|
||||||
Syncing { have: u64, height: u64 },
|
Syncing { have: u64, height: u64 },
|
||||||
SyncFinished,
|
SyncFinished,
|
||||||
|
Error { text: String }
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-4
@@ -22,7 +22,7 @@ use std::process::exit;
|
|||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
use alfis::event::Event;
|
use alfis::event::Event;
|
||||||
use alfis::eventbus::register;
|
use alfis::eventbus::{post, register};
|
||||||
use alfis::keystore::create_key;
|
use alfis::keystore::create_key;
|
||||||
use alfis::{
|
use alfis::{
|
||||||
dns_utils, Block, Bytes, Chain, Context, Keystore, Miner, Network, Settings, Transaction, ALFIS_DEBUG, DB_NAME, ORIGIN_DIFFICULTY
|
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 {
|
let dns_server_ok = if settings_copy.dns.threads > 0 {
|
||||||
dns_utils::start_dns_server(&context, &settings_copy);
|
dns_utils::start_dns_server(&context, &settings_copy)
|
||||||
}
|
} else {
|
||||||
|
true
|
||||||
|
};
|
||||||
|
|
||||||
let mut miner_obj = Miner::new(Arc::clone(&context));
|
let mut miner_obj = Miner::new(Arc::clone(&context));
|
||||||
miner_obj.start_mining_thread();
|
miner_obj.start_mining_thread();
|
||||||
@@ -230,6 +232,12 @@ fn main() {
|
|||||||
thread::sleep(sleep);
|
thread::sleep(sleep);
|
||||||
}
|
}
|
||||||
} else {
|
} 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")]
|
#[cfg(feature = "webgui")]
|
||||||
web_ui::run_interface(Arc::clone(&context), miner.clone());
|
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));
|
event_handle_info(&handle, &format!("Blockchain changed, current block count is {} now.", index));
|
||||||
String::new() // Nothing
|
String::new() // Nothing
|
||||||
}
|
}
|
||||||
|
Event::Error { text } => format!("showError('{}')", &text),
|
||||||
_ => String::new()
|
_ => String::new()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -450,6 +450,11 @@
|
|||||||
<p id="warning_text"></p>
|
<p id="warning_text"></p>
|
||||||
</div>
|
</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">
|
<div class="notification mini is-success is-hidden" id="notification_success">
|
||||||
<button class="delete" id="success_close"></button>
|
<button class="delete" id="success_close"></button>
|
||||||
<p id="success_text"></p>
|
<p id="success_text"></p>
|
||||||
|
|||||||
@@ -472,6 +472,19 @@ function showWarning(text) {
|
|||||||
setTimeout(button.onclick, 5000);
|
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) {
|
function showSuccess(text) {
|
||||||
var warning = document.getElementById("notification_success");
|
var warning = document.getElementById("notification_success");
|
||||||
var message = document.getElementById("success_text");
|
var message = document.getElementById("success_text");
|
||||||
|
|||||||
@@ -100,6 +100,12 @@ body {
|
|||||||
right: 10pt;
|
right: 10pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notification.mini.is-danger {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 30pt;
|
||||||
|
right: 10pt;
|
||||||
|
}
|
||||||
|
|
||||||
.notification.mini.is-success {
|
.notification.mini.is-success {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 30pt;
|
bottom: 30pt;
|
||||||
|
|||||||
Reference in New Issue
Block a user