X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/7bf06aef5ecea8856aeebc5c9d3a67d11cb73b92..c8cd36bde884fe03004dfa05357eac34394b4b01:/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java diff --git a/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java b/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java index 086681f7..181233bc 100644 --- a/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java +++ b/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java @@ -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);