mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-19 22:29:53 +01:00
Check more often, only broadcast status if changed.
This commit is contained in:
@@ -2,6 +2,7 @@ package org.briarproject.bramble.api.network;
|
|||||||
|
|
||||||
import org.briarproject.nullsafety.NotNullByDefault;
|
import org.briarproject.nullsafety.NotNullByDefault;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.concurrent.Immutable;
|
import javax.annotation.concurrent.Immutable;
|
||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
@@ -27,4 +28,20 @@ public class NetworkStatus {
|
|||||||
public boolean isIpv6Only() {
|
public boolean isIpv6Only() {
|
||||||
return ipv6Only;
|
return ipv6Only;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return (connected ? 1 : 0) | (wifi ? 2 : 0) | (ipv6Only ? 4 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(@Nullable Object o) {
|
||||||
|
if (o instanceof NetworkStatus) {
|
||||||
|
NetworkStatus s = (NetworkStatus) o;
|
||||||
|
return connected == s.connected
|
||||||
|
&& wifi == s.wifi
|
||||||
|
&& ipv6Only == s.ipv6Only;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,12 +14,14 @@ import java.net.InetAddress;
|
|||||||
import java.net.NetworkInterface;
|
import java.net.NetworkInterface;
|
||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import static java.util.Collections.list;
|
import static java.util.Collections.list;
|
||||||
import static java.util.concurrent.TimeUnit.MINUTES;
|
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||||
|
import static java.util.logging.Level.INFO;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
import static java.util.logging.Logger.getLogger;
|
import static java.util.logging.Logger.getLogger;
|
||||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||||
@@ -34,6 +36,8 @@ class JavaNetworkManager implements NetworkManager, Service {
|
|||||||
private final TaskScheduler scheduler;
|
private final TaskScheduler scheduler;
|
||||||
private final Executor ioExecutor;
|
private final Executor ioExecutor;
|
||||||
private final EventBus eventBus;
|
private final EventBus eventBus;
|
||||||
|
private final AtomicReference<NetworkStatus> lastStatus =
|
||||||
|
new AtomicReference<>();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
JavaNetworkManager(TaskScheduler scheduler,
|
JavaNetworkManager(TaskScheduler scheduler,
|
||||||
@@ -62,17 +66,26 @@ class JavaNetworkManager implements NetworkManager, Service {
|
|||||||
} catch (SocketException e) {
|
} catch (SocketException e) {
|
||||||
logException(LOG, WARNING, e);
|
logException(LOG, WARNING, e);
|
||||||
}
|
}
|
||||||
|
if (LOG.isLoggable(INFO)) {
|
||||||
|
LOG.info("Connected: " + connected
|
||||||
|
+ ", has IPv4 address: " + hasIpv4
|
||||||
|
+ ", has IPv6 unicast address: " + hasIpv6Unicast);
|
||||||
|
}
|
||||||
return new NetworkStatus(connected, false, !hasIpv4 && hasIpv6Unicast);
|
return new NetworkStatus(connected, false, !hasIpv4 && hasIpv6Unicast);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void broadcastNetworkStatus() {
|
private void broadcastNetworkStatusIfChanged() {
|
||||||
eventBus.broadcast(new NetworkStatusEvent(getNetworkStatus()));
|
NetworkStatus status = getNetworkStatus();
|
||||||
|
NetworkStatus old = lastStatus.getAndSet(status);
|
||||||
|
if (!status.equals(old)) {
|
||||||
|
eventBus.broadcast(new NetworkStatusEvent(status));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startService() {
|
public void startService() {
|
||||||
scheduler.scheduleWithFixedDelay(this::broadcastNetworkStatus,
|
scheduler.scheduleWithFixedDelay(this::broadcastNetworkStatusIfChanged,
|
||||||
ioExecutor, 0, 1, MINUTES);
|
ioExecutor, 0, 10, SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user