Remove obsolete reconnect callbacks
removes obsolete reconnect callbacks scheduled before network reconnects to prevent unwanted reconnection also renamed WebSocketConnection.onFailure to onNetworkFailure to clear confusion
This commit is contained in:
@@ -21,7 +21,8 @@ public class WebSocketConnection {
|
||||
private final ConnectivityManager connectivityManager;
|
||||
private OkHttpClient client;
|
||||
|
||||
private final Handler handler = new Handler();
|
||||
private final Handler reconnectHandler = new Handler();
|
||||
private Runnable reconnectCallback = this::start;
|
||||
private int errorCount = 0;
|
||||
|
||||
private final String baseUrl;
|
||||
@@ -31,7 +32,7 @@ public class WebSocketConnection {
|
||||
private Runnable onClose;
|
||||
private Runnable onOpen;
|
||||
private BadRequestRunnable onBadRequest;
|
||||
private OnFailureCallback onFailure;
|
||||
private OnNetworkFailureRunnable onNetworkFailure;
|
||||
private Runnable onReconnected;
|
||||
private boolean isClosed;
|
||||
private Runnable onDisconnect;
|
||||
@@ -80,8 +81,8 @@ public class WebSocketConnection {
|
||||
return this;
|
||||
}
|
||||
|
||||
synchronized WebSocketConnection onFailure(OnFailureCallback onFailure) {
|
||||
this.onFailure = onFailure;
|
||||
synchronized WebSocketConnection onNetworkFailure(OnNetworkFailureRunnable onNetworkFailure) {
|
||||
this.onNetworkFailure = onNetworkFailure;
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -118,7 +119,18 @@ public class WebSocketConnection {
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void scheduleReconnect(long millis) {
|
||||
reconnectHandler.removeCallbacks(reconnectCallback);
|
||||
|
||||
Log.i(
|
||||
"WebSocket: scheduling a restart in "
|
||||
+ TimeUnit.SECONDS.convert(millis, TimeUnit.MILLISECONDS)
|
||||
+ " second(s)");
|
||||
reconnectHandler.postDelayed(reconnectCallback, millis);
|
||||
}
|
||||
|
||||
private class Listener extends WebSocketListener {
|
||||
|
||||
@Override
|
||||
public void onOpen(WebSocket webSocket, Response response) {
|
||||
Log.i("WebSocket: opened");
|
||||
@@ -167,6 +179,8 @@ public class WebSocketConnection {
|
||||
return;
|
||||
}
|
||||
|
||||
errorCount++;
|
||||
|
||||
NetworkInfo network = connectivityManager.getActiveNetworkInfo();
|
||||
if (network == null || !network.isConnected()) {
|
||||
Log.i("WebSocket: Network not connected");
|
||||
@@ -174,14 +188,10 @@ public class WebSocketConnection {
|
||||
return;
|
||||
}
|
||||
|
||||
int minutes = Math.min(errorCount * 2 + 1, 20);
|
||||
int minutes = Math.min(errorCount * 2 - 1, 20);
|
||||
|
||||
Log.i("WebSocket: trying to restart in " + minutes + " minute(s)");
|
||||
|
||||
errorCount++;
|
||||
handler.postDelayed(
|
||||
WebSocketConnection.this::start, TimeUnit.MINUTES.toMillis(minutes));
|
||||
onFailure.execute(minutes);
|
||||
onNetworkFailure.execute(minutes);
|
||||
scheduleReconnect(TimeUnit.MINUTES.toMillis(minutes));
|
||||
}
|
||||
|
||||
super.onFailure(webSocket, t, response);
|
||||
@@ -192,7 +202,7 @@ public class WebSocketConnection {
|
||||
void execute(String message);
|
||||
}
|
||||
|
||||
interface OnFailureCallback {
|
||||
void execute(int minutesToTryAgain);
|
||||
interface OnNetworkFailureRunnable {
|
||||
void execute(long millis);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user