wallet: launch api server and tor service after getting info data from server
This commit is contained in:
parent
c35c63d4c7
commit
7e0b1e857b
1 changed files with 30 additions and 31 deletions
|
@ -1031,7 +1031,7 @@ const ATTEMPT_DELAY: Duration = Duration::from_millis(3 * 1000);
|
|||
const SYNC_ATTEMPTS: u8 = 10;
|
||||
|
||||
/// Launch thread to sync wallet data from node.
|
||||
fn start_sync(mut wallet: Wallet) -> Thread {
|
||||
fn start_sync(wallet: Wallet) -> Thread {
|
||||
// Reset progress values.
|
||||
wallet.info_sync_progress.store(0, Ordering::Relaxed);
|
||||
wallet.txs_sync_progress.store(0, Ordering::Relaxed);
|
||||
|
@ -1105,34 +1105,6 @@ fn start_sync(mut wallet: Wallet) -> Thread {
|
|||
// Setup flag to check if sync was failed.
|
||||
let failed_sync = wallet.sync_error() || wallet.get_sync_attempts() != 0;
|
||||
|
||||
// Start Foreign API server and Tor service only if first sync was successful.
|
||||
if !failed_sync {
|
||||
// Start Foreign API listener if API server is not running.
|
||||
let mut api_server_running = {
|
||||
wallet.foreign_api_server.read().is_some()
|
||||
};
|
||||
if !api_server_running && wallet.is_open() {
|
||||
match start_api_server(&mut wallet) {
|
||||
Ok(api_server) => {
|
||||
let mut api_server_w = wallet.foreign_api_server.write();
|
||||
*api_server_w = Some(api_server);
|
||||
api_server_running = true;
|
||||
}
|
||||
Err(_) => {}
|
||||
}
|
||||
}
|
||||
|
||||
// Start Tor service if API server is running and wallet is open.
|
||||
if wallet.auto_start_tor_listener() && wallet.is_open() && api_server_running &&
|
||||
!Tor::is_service_running(&wallet.identifier()) {
|
||||
let r_foreign_api = wallet.foreign_api_server.read();
|
||||
let api = r_foreign_api.as_ref().unwrap();
|
||||
if let Ok(sec_key) = wallet.secret_key() {
|
||||
Tor::start_service(api.1, sec_key, &wallet.identifier());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear syncing status.
|
||||
wallet.syncing.store(false, Ordering::Relaxed);
|
||||
|
||||
|
@ -1185,8 +1157,35 @@ fn sync_wallet_data(wallet: &Wallet, from_node: bool) {
|
|||
}
|
||||
|
||||
if wallet.info_sync_progress() == 100 || !from_node {
|
||||
{
|
||||
if from_node {
|
||||
// Start Foreign API listener if API server is not running.
|
||||
let mut api_server_running = {
|
||||
wallet.foreign_api_server.read().is_some()
|
||||
};
|
||||
if !api_server_running && wallet.is_open() {
|
||||
match start_api_server(&wallet) {
|
||||
Ok(api_server) => {
|
||||
let mut api_server_w = wallet.foreign_api_server.write();
|
||||
*api_server_w = Some(api_server);
|
||||
api_server_running = true;
|
||||
}
|
||||
Err(_) => {}
|
||||
}
|
||||
}
|
||||
|
||||
// Start Tor service if API server is running and wallet is open.
|
||||
if wallet.auto_start_tor_listener() && wallet.is_open() && api_server_running &&
|
||||
!Tor::is_service_running(&wallet.identifier()) {
|
||||
let r_foreign_api = wallet.foreign_api_server.read();
|
||||
let api = r_foreign_api.as_ref().unwrap();
|
||||
if let Ok(sec_key) = wallet.secret_key() {
|
||||
Tor::start_service(api.1, sec_key, &wallet.identifier());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update wallet info.
|
||||
{
|
||||
let mut w_data = wallet.data.write();
|
||||
let txs = if w_data.is_some() {
|
||||
w_data.clone().unwrap().txs
|
||||
|
@ -1385,7 +1384,7 @@ fn sync_wallet_data(wallet: &Wallet, from_node: bool) {
|
|||
}
|
||||
|
||||
/// Start Foreign API server to receive txs over transport and mining rewards.
|
||||
fn start_api_server(wallet: &mut Wallet) -> Result<(ApiServer, u16), Error> {
|
||||
fn start_api_server(wallet: &Wallet) -> Result<(ApiServer, u16), Error> {
|
||||
let host = "127.0.0.1";
|
||||
// Find free port.
|
||||
let port = if wallet.get_config().chain_type == ChainTypes::Mainnet {
|
||||
|
|
Loading…
Reference in a new issue