mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 12:38:33 +00:00
Try to run IncomingMessageObserver more aggressively.
This commit is contained in:
@@ -175,6 +175,12 @@ class IncomingMessageObserver(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
authWebSocket.addKeepAliveChangeListener {
|
||||
lock.withLock {
|
||||
connectionNecessarySemaphore.release()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun notifyRegistrationStateChanged() {
|
||||
@@ -236,12 +242,12 @@ class IncomingMessageObserver(
|
||||
|
||||
val needsConnectionString = if (conclusion) "Needs Connection" else "Does Not Need Connection"
|
||||
|
||||
Log.d(TAG, "[$needsConnectionString] Network: $hasNetwork, Foreground: $appVisibleSnapshot, Time Since Last Interaction: $lastInteractionString, FCM: $fcmEnabled, WS Connected: $websocketAlreadyOpen, Registered: $registered, Proxy: $hasProxy, Force websocket: $forceWebsocket")
|
||||
Log.d(TAG, "[$needsConnectionString] Network: $hasNetwork, Foreground: $appVisibleSnapshot, Time Since Last Interaction: $lastInteractionString, FCM: $fcmEnabled, WS Open or Keep-alives: $websocketAlreadyOpen, Registered: $registered, Proxy: $hasProxy, Force websocket: $forceWebsocket")
|
||||
return conclusion
|
||||
}
|
||||
|
||||
private fun isConnectionAvailable(): Boolean {
|
||||
return authWebSocket.stateSnapshot == WebSocketConnectionState.CONNECTED
|
||||
return authWebSocket.stateSnapshot == WebSocketConnectionState.CONNECTED || authWebSocket.shouldSendKeepAlives()
|
||||
}
|
||||
|
||||
private fun waitForConnectionNecessary() {
|
||||
|
||||
@@ -74,7 +74,7 @@ class SignalWebSocketHealthMonitor(
|
||||
.distinctUntilChanged()
|
||||
.subscribeBy { onStateChanged(it) }
|
||||
|
||||
webSocket.keepAliveChangedListener = { executor.execute(this::updateKeepAliveSenderStatus) }
|
||||
webSocket.addKeepAliveChangeListener { executor.execute(this::updateKeepAliveSenderStatus) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,13 @@ import org.whispersystems.signalservice.internal.websocket.WebSocketRequestMessa
|
||||
import org.whispersystems.signalservice.internal.websocket.WebSocketResponseMessage
|
||||
import org.whispersystems.signalservice.internal.websocket.WebsocketResponse
|
||||
import java.io.IOException
|
||||
import java.util.concurrent.CopyOnWriteArraySet
|
||||
import java.util.concurrent.TimeoutException
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
private typealias Listener = () -> Unit
|
||||
|
||||
/**
|
||||
* Base wrapper around a [WebSocketConnection] to provide a more developer friend interface to websocket
|
||||
* interactions.
|
||||
@@ -54,7 +57,7 @@ sealed class SignalWebSocket(
|
||||
protected var disposable: CompositeDisposable = CompositeDisposable()
|
||||
|
||||
private val keepAliveTokens: MutableSet<String> = mutableSetOf()
|
||||
var keepAliveChangedListener: (() -> Unit)? = null
|
||||
private val keepAliveChangeListeners: MutableSet<Listener> = CopyOnWriteArraySet()
|
||||
|
||||
private var delayedDisconnectThread: DelayedDisconnectThread? = null
|
||||
|
||||
@@ -123,7 +126,7 @@ sealed class SignalWebSocket(
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
keepAliveChangedListener?.invoke()
|
||||
keepAliveChangeListeners.forEach { it() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,10 +135,14 @@ sealed class SignalWebSocket(
|
||||
if (keepAliveTokens.remove(token)) {
|
||||
Log.v(TAG, "$connectionName Removing keepAliveToken: $token, remaining: $keepAliveTokens")
|
||||
startDelayedDisconnectIfNecessary()
|
||||
keepAliveChangedListener?.invoke()
|
||||
keepAliveChangeListeners.forEach { it() }
|
||||
}
|
||||
}
|
||||
|
||||
fun addKeepAliveChangeListener(listener: Listener) {
|
||||
keepAliveChangeListeners.add(listener)
|
||||
}
|
||||
|
||||
fun request(request: WebSocketRequestMessage): Single<WebsocketResponse> {
|
||||
return try {
|
||||
delayedDisconnectThread?.resetLastInteractionTime()
|
||||
|
||||
@@ -327,7 +327,7 @@ public class OkHttpWebSocketConnection extends WebSocketListener implements WebS
|
||||
|
||||
@Override
|
||||
public synchronized void onClosed(WebSocket webSocket, int code, String reason) {
|
||||
log("onClose()");
|
||||
log("onClose(" + code + ")");
|
||||
webSocketState.onNext(WebSocketConnectionState.DISCONNECTED);
|
||||
|
||||
cleanupAfterShutdown(code);
|
||||
@@ -380,7 +380,7 @@ public class OkHttpWebSocketConnection extends WebSocketListener implements WebS
|
||||
|
||||
@Override
|
||||
public synchronized void onClosing(WebSocket webSocket, int code, String reason) {
|
||||
log("onClosing()");
|
||||
log("onClosing(" + code + ")");
|
||||
webSocketState.onNext(WebSocketConnectionState.DISCONNECTING);
|
||||
webSocket.close(1000, "OK");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user