summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java
diff options
context:
space:
mode:
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.java32
1 files changed, 29 insertions, 3 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 90c8f890..2bd666bf 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java
@@ -1,26 +1,52 @@
package se.leap.bitmaskclient.eip;
-import java.util.*;
+import android.util.Log;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import static se.leap.bitmaskclient.utils.ConfigHelper.getCurrentTimezone;
public class GatewaySelector {
+ private final static String TAG = GatewaySelector.class.getSimpleName();
List<Gateway> gateways;
+ TreeMap<Integer, Set<Gateway>> offsets;
public GatewaySelector(List<Gateway> gateways) {
this.gateways = gateways;
+ this.offsets = calculateOffsets();
+
}
public Gateway select() {
return closestGateway();
}
+ public Gateway select(int nClosest) {
+ int i = 0;
+ for (Map.Entry<Integer,Set<Gateway>> entrySet : offsets.entrySet()) {
+ for (Gateway gateway : entrySet.getValue()) {
+ if (i == nClosest) {
+ return gateway;
+ }
+ i = i + 1;
+ }
+ }
+
+ Log.e(TAG, "There are less than " + nClosest + " Gateways available.");
+ return null;
+ }
+
private Gateway closestGateway() {
- 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;
+ int localOffset = getCurrentTimezone();
for (Gateway gateway : gateways) {
int dist = timezoneDistance(localOffset, gateway.getTimezone());
Set<Gateway> set = (offsets.get(dist) != null) ?