Try to run IncomingMessageObserver more aggressively.

This commit is contained in:
Cody Henthorne
2025-06-25 14:12:24 -04:00
parent c0340be3ce
commit a043b4e573
4 changed files with 21 additions and 8 deletions

View File

@@ -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()

View File

@@ -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");
}