diff options
author | Parménides GV <parmegv@sdf.org> | 2015-04-10 11:19:03 +0200 |
---|---|---|
committer | Parménides GV <parmegv@sdf.org> | 2015-04-10 11:19:03 +0200 |
commit | 1f41fec6765e49838141ad29151713c7ac3dd17c (patch) | |
tree | d4c63d5bbb8e51d91d75179ad01abd9a7565badc /app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java | |
parent | c198dbd9dd583d980ae7e70118f67d09bed8de55 (diff) | |
parent | fe95b7693f0f1f90d23ba2596ad3b11195efb11d (diff) |
Merge branch 'develop'0.9.3
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java')
-rw-r--r-- | app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java index 39ae7ca6..90c8f890 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java @@ -1,46 +1,42 @@ package se.leap.bitmaskclient.eip; -import java.util.Calendar; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.TreeMap; +import java.util.*; public class GatewaySelector { List<Gateway> gateways; public GatewaySelector(List<Gateway> gateways) { - this.gateways = gateways; + this.gateways = gateways; } public Gateway select() { - return closestGateway(); + return closestGateway(); } - + private Gateway closestGateway() { - TreeMap<Integer, Set<Gateway>> offsets = calculateOffsets(); - return offsets.isEmpty() ? null : offsets.firstEntry().getValue().iterator().next(); + TreeMap<Integer, Set<Gateway>> offsets = calculateOffsets(); + return offsets.isEmpty() ? null : offsets.firstEntry().getValue().iterator().next(); } - + private TreeMap<Integer, Set<Gateway>> calculateOffsets() { - TreeMap<Integer, Set<Gateway>> offsets = new TreeMap<Integer, Set<Gateway>>(); - int localOffset = Calendar.getInstance().get(Calendar.ZONE_OFFSET) / 3600000; - for(Gateway gateway : gateways) { - int dist = timezoneDistance(localOffset, gateway.getTimezone()); - Set<Gateway> set = (offsets.get(dist) != null) ? - offsets.get(dist) : new HashSet<Gateway>(); - set.add(gateway); - offsets.put(dist, set); - } - return offsets; + TreeMap<Integer, Set<Gateway>> offsets = new TreeMap<Integer, Set<Gateway>>(); + int localOffset = Calendar.getInstance().get(Calendar.ZONE_OFFSET) / 3600000; + for (Gateway gateway : gateways) { + int dist = timezoneDistance(localOffset, gateway.getTimezone()); + Set<Gateway> set = (offsets.get(dist) != null) ? + offsets.get(dist) : new HashSet<Gateway>(); + set.add(gateway); + offsets.put(dist, set); + } + return offsets; } - + private int timezoneDistance(int local_timezone, int remote_timezone) { - // Distance along the numberline of Prime Meridian centric, assumes UTC-11 through UTC+12 - int dist = Math.abs(local_timezone - remote_timezone); - // Farther than 12 timezones and it's shorter around the "back" - if (dist > 12) - dist = 12 - (dist -12); // Well i'll be. Absolute values make equations do funny things. - return dist; + // Distance along the numberline of Prime Meridian centric, assumes UTC-11 through UTC+12 + int dist = Math.abs(local_timezone - remote_timezone); + // Farther than 12 timezones and it's shorter around the "back" + if (dist > 12) + dist = 12 - (dist - 12); // Well i'll be. Absolute values make equations do funny things. + return dist; } } |