mirror of
https://github.com/haveno-dex/haveno.git
synced 2024-11-16 15:58:08 +00:00
announce connection change on refresh period change
This commit is contained in:
parent
fa25843684
commit
d300ce8ce7
3 changed files with 35 additions and 13 deletions
|
@ -101,6 +101,7 @@ public final class XmrConnectionService {
|
|||
private Long lastLogPollErrorTimestamp;
|
||||
private Long syncStartHeight = null;
|
||||
private TaskLooper daemonPollLooper;
|
||||
private long lastRefreshPeriodMs = 0;
|
||||
@Getter
|
||||
private boolean isShutDownStarted;
|
||||
private List<MoneroConnectionManagerListener> listeners = new ArrayList<>();
|
||||
|
@ -353,7 +354,11 @@ public final class XmrConnectionService {
|
|||
}
|
||||
|
||||
public long getRefreshPeriodMs() {
|
||||
return connectionList.getRefreshPeriod() > 0 ? connectionList.getRefreshPeriod() : getDefaultRefreshPeriodMs();
|
||||
return connectionList.getRefreshPeriod() > 0 ? connectionList.getRefreshPeriod() : getDefaultRefreshPeriodMs(false);
|
||||
}
|
||||
|
||||
private long getInternalRefreshPeriodMs() {
|
||||
return connectionList.getRefreshPeriod() > 0 ? connectionList.getRefreshPeriod() : getDefaultRefreshPeriodMs(true);
|
||||
}
|
||||
|
||||
public void verifyConnection() {
|
||||
|
@ -423,12 +428,16 @@ public final class XmrConnectionService {
|
|||
return connection != null && HavenoUtils.isLocalHost(connection.getUri());
|
||||
}
|
||||
|
||||
private long getDefaultRefreshPeriodMs() {
|
||||
private long getDefaultRefreshPeriodMs(boolean internal) {
|
||||
MoneroRpcConnection connection = getConnection();
|
||||
if (connection == null) return XmrLocalNode.REFRESH_PERIOD_LOCAL_MS;
|
||||
if (isConnectionLocalHost(connection)) {
|
||||
if (lastInfo != null && (lastInfo.isBusySyncing() || (lastInfo.getHeightWithoutBootstrap() != null && lastInfo.getHeightWithoutBootstrap() > 0 && lastInfo.getHeightWithoutBootstrap() < lastInfo.getHeight()))) return REFRESH_PERIOD_HTTP_MS; // refresh slower if syncing or bootstrapped
|
||||
else return XmrLocalNode.REFRESH_PERIOD_LOCAL_MS; // TODO: announce faster refresh after done syncing
|
||||
if (internal) return XmrLocalNode.REFRESH_PERIOD_LOCAL_MS;
|
||||
if (lastInfo != null && (lastInfo.getHeightWithoutBootstrap() != null && lastInfo.getHeightWithoutBootstrap() > 0 && lastInfo.getHeightWithoutBootstrap() < lastInfo.getHeight())) {
|
||||
return REFRESH_PERIOD_HTTP_MS; // refresh slower if syncing or bootstrapped
|
||||
} else {
|
||||
return XmrLocalNode.REFRESH_PERIOD_LOCAL_MS; // TODO: announce faster refresh after done syncing
|
||||
}
|
||||
} else if (isProxyApplied(connection)) {
|
||||
return REFRESH_PERIOD_ONION_MS;
|
||||
} else {
|
||||
|
@ -648,7 +657,7 @@ public final class XmrConnectionService {
|
|||
// update polling
|
||||
doPollDaemon();
|
||||
if (currentConnection != getConnection()) return; // polling can change connection
|
||||
UserThread.runAfter(() -> updatePolling(), getRefreshPeriodMs() / 1000);
|
||||
UserThread.runAfter(() -> updatePolling(), getInternalRefreshPeriodMs() / 1000);
|
||||
|
||||
// notify listeners in parallel
|
||||
log.info("XmrConnectionService.onConnectionChanged() uri={}, connected={}", currentConnection == null ? null : currentConnection.getUri(), currentConnection == null ? "false" : isConnected);
|
||||
|
@ -668,7 +677,7 @@ public final class XmrConnectionService {
|
|||
synchronized (lock) {
|
||||
if (daemonPollLooper != null) daemonPollLooper.stop();
|
||||
daemonPollLooper = new TaskLooper(() -> pollDaemon());
|
||||
daemonPollLooper.start(getRefreshPeriodMs());
|
||||
daemonPollLooper.start(getInternalRefreshPeriodMs());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -725,6 +734,13 @@ public final class XmrConnectionService {
|
|||
// connected to daemon
|
||||
isConnected = true;
|
||||
|
||||
// announce connection change if refresh period changes
|
||||
if (getRefreshPeriodMs() != lastRefreshPeriodMs) {
|
||||
lastRefreshPeriodMs = getRefreshPeriodMs();
|
||||
onConnectionChanged(getConnection()); // causes new poll
|
||||
return;
|
||||
}
|
||||
|
||||
// update properties on user thread
|
||||
UserThread.execute(() -> {
|
||||
|
||||
|
|
|
@ -2350,7 +2350,10 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
|
|||
// check if ignored
|
||||
if (isShutDownStarted) return;
|
||||
if (getWallet() == null) return;
|
||||
if (HavenoUtils.connectionConfigsEqual(connection, wallet.getDaemonConnection())) return;
|
||||
if (HavenoUtils.connectionConfigsEqual(connection, wallet.getDaemonConnection())) {
|
||||
updatePollPeriod();
|
||||
return;
|
||||
}
|
||||
|
||||
// set daemon connection (must restart monero-wallet-rpc if proxy uri changed)
|
||||
String oldProxyUri = wallet.getDaemonConnection() == null ? null : wallet.getDaemonConnection().getProxyUri();
|
||||
|
|
|
@ -1598,12 +1598,15 @@ public class XmrWalletService extends XmrWalletBase {
|
|||
|
||||
// check if ignored
|
||||
if (wallet == null || isShutDownStarted) return;
|
||||
if (HavenoUtils.connectionConfigsEqual(connection, wallet.getDaemonConnection())) return;
|
||||
if (HavenoUtils.connectionConfigsEqual(connection, wallet.getDaemonConnection())) {
|
||||
updatePollPeriod();
|
||||
return;
|
||||
}
|
||||
|
||||
// update connection
|
||||
String oldProxyUri = wallet == null || wallet.getDaemonConnection() == null ? null : wallet.getDaemonConnection().getProxyUri();
|
||||
String newProxyUri = connection == null ? null : connection.getProxyUri();
|
||||
log.info("Setting daemon connection for main wallet, monerod={}, proxyUri={}", connection == null ? null : connection.getUri(), newProxyUri);
|
||||
|
||||
// update connection
|
||||
if (wallet instanceof MoneroWalletRpc) {
|
||||
if (StringUtils.equals(oldProxyUri, newProxyUri)) {
|
||||
wallet.setDaemonConnection(connection);
|
||||
|
@ -1722,14 +1725,14 @@ public class XmrWalletService extends XmrWalletBase {
|
|||
|
||||
public void updatePollPeriod() {
|
||||
if (isShutDownStarted) return;
|
||||
setPollPeriod(getPollPeriod());
|
||||
setPollPeriodMs(getPollPeriodMs());
|
||||
}
|
||||
|
||||
private long getPollPeriod() {
|
||||
private long getPollPeriodMs() {
|
||||
return xmrConnectionService.getRefreshPeriodMs();
|
||||
}
|
||||
|
||||
private void setPollPeriod(long pollPeriodMs) {
|
||||
private void setPollPeriodMs(long pollPeriodMs) {
|
||||
synchronized (walletLock) {
|
||||
if (this.isShutDownStarted) return;
|
||||
if (this.pollPeriodMs != null && this.pollPeriodMs == pollPeriodMs) return;
|
||||
|
|
Loading…
Reference in a new issue