mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 18:40:39 +00:00
Only handle jsonRpc requests, after receive thread has caught up with old messages
This commit is contained in:
parent
ac18006abb
commit
5a2e37a6e2
2 changed files with 29 additions and 5 deletions
|
@ -141,6 +141,7 @@ public class Manager implements Closeable {
|
|||
private final IncomingMessageHandler incomingMessageHandler;
|
||||
|
||||
private final Context context;
|
||||
private boolean hasCaughtUpWithOldMessages = false;
|
||||
|
||||
Manager(
|
||||
SignalAccount account,
|
||||
|
@ -865,7 +866,7 @@ public class Manager implements Closeable {
|
|||
final var signalWebSocket = dependencies.getSignalWebSocket();
|
||||
signalWebSocket.connect();
|
||||
|
||||
var hasCaughtUpWithOldMessages = false;
|
||||
hasCaughtUpWithOldMessages = false;
|
||||
|
||||
while (!Thread.interrupted()) {
|
||||
SignalServiceEnvelope envelope;
|
||||
|
@ -885,11 +886,14 @@ public class Manager implements Closeable {
|
|||
envelope = result.get();
|
||||
} else {
|
||||
// Received indicator that server queue is empty
|
||||
hasCaughtUpWithOldMessages = true;
|
||||
|
||||
handleQueuedActions(queuedActions);
|
||||
queuedActions.clear();
|
||||
|
||||
hasCaughtUpWithOldMessages = true;
|
||||
synchronized (this) {
|
||||
this.notifyAll();
|
||||
}
|
||||
|
||||
// Continue to wait another timeout for new messages
|
||||
continue;
|
||||
}
|
||||
|
@ -936,17 +940,27 @@ public class Manager implements Closeable {
|
|||
handleQueuedActions(queuedActions);
|
||||
}
|
||||
|
||||
public boolean hasCaughtUpWithOldMessages() {
|
||||
return hasCaughtUpWithOldMessages;
|
||||
}
|
||||
|
||||
private void handleQueuedActions(final Collection<HandleAction> queuedActions) {
|
||||
var interrupted = false;
|
||||
for (var action : queuedActions) {
|
||||
try {
|
||||
action.execute(context);
|
||||
} catch (Throwable e) {
|
||||
if (e instanceof AssertionError && e.getCause() instanceof InterruptedException) {
|
||||
Thread.currentThread().interrupt();
|
||||
if ((e instanceof AssertionError || e instanceof RuntimeException)
|
||||
&& e.getCause() instanceof InterruptedException) {
|
||||
interrupted = true;
|
||||
continue;
|
||||
}
|
||||
logger.warn("Message action failed.", e);
|
||||
}
|
||||
}
|
||||
if (interrupted) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isContactBlocked(final RecipientIdentifier.Single recipient) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue