]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java
Unsubscribe receive if jsonRpcSender channel is closed
[signal-cli] / src / main / java / org / asamk / signal / jsonrpc / SignalJsonRpcDispatcherHandler.java
index 086681f795d98119df68bfd0336bb5432f358024..181233bc38dfe26f0b7ee80bb45dff87090e0261 100644 (file)
@@ -30,6 +30,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.nio.channels.ClosedChannelException;
 import java.nio.channels.OverlappingFileLockException;
 import java.util.HashMap;
 import java.util.List;
@@ -101,7 +102,14 @@ public class SignalJsonRpcDispatcherHandler {
             final var receiveMessageHandler = new JsonReceiveMessageHandler(m, s -> {
                 final ContainerNode<?> params = objectMapper.valueToTree(s);
                 ((ObjectNode) params).set("subscription", IntNode.valueOf(subscriptionId));
-                jsonRpcSender.sendRequest(JsonRpcRequest.forNotification("receive", params, null));
+                final var jsonRpcRequest = JsonRpcRequest.forNotification("receive", params, null);
+                try {
+                    jsonRpcSender.sendRequest(jsonRpcRequest);
+                } catch (AssertionError e) {
+                    if (e.getCause() instanceof ClosedChannelException) {
+                        unsubscribeReceive(subscriptionId);
+                    }
+                }
             });
             m.addReceiveHandler(receiveMessageHandler);
             return new Pair<>(m, (Manager.ReceiveMessageHandler) receiveMessageHandler);