diff --git a/src/main/java/com/github/jamesnetherton/zulip/client/api/event/EventPoller.java b/src/main/java/com/github/jamesnetherton/zulip/client/api/event/EventPoller.java index 08c5de99..bacbe874 100644 --- a/src/main/java/com/github/jamesnetherton/zulip/client/api/event/EventPoller.java +++ b/src/main/java/com/github/jamesnetherton/zulip/client/api/event/EventPoller.java @@ -3,6 +3,7 @@ import com.github.jamesnetherton.zulip.client.api.event.request.DeleteEventQueueApiRequest; import com.github.jamesnetherton.zulip.client.api.event.request.GetMessageEventsApiRequest; import com.github.jamesnetherton.zulip.client.api.event.request.RegisterEventQueueApiRequest; +import com.github.jamesnetherton.zulip.client.api.message.Message; import com.github.jamesnetherton.zulip.client.api.narrow.Narrow; import com.github.jamesnetherton.zulip.client.exception.ZulipClientException; import com.github.jamesnetherton.zulip.client.http.ZulipHttpClient; @@ -97,7 +98,14 @@ public void run() { List messageEvents = getEvents.execute(); for (MessageEvent event : messageEvents) { - eventListenerExecutorService.submit(() -> listener.onEvent(event.getMessage())); + eventListenerExecutorService.submit(() -> { + Message message = event.getMessage(); + if (message == null + || (message.getContent() != null && message.getContent().equals("heartbeat"))) { + return; + } + listener.onEvent(message); + }); } lastEventId = messageEvents.stream().max(Comparator.comparing(Event::getId)) @@ -135,14 +143,20 @@ public synchronized void stop() { try { LOG.info("EventPoller stopping"); status = Status.STOPPING; - executor.shutdown(); + + if (executor != null) { + executor.shutdown(); + } + if (userManagedEventListenerExecutorService) { eventListenerExecutorService.shutdown(); eventListenerExecutorService = null; } - DeleteEventQueueApiRequest deleteQueue = new DeleteEventQueueApiRequest(this.client, queue.getQueueId()); - deleteQueue.execute(); + if (queue != null) { + DeleteEventQueueApiRequest deleteQueue = new DeleteEventQueueApiRequest(this.client, queue.getQueueId()); + deleteQueue.execute(); + } } catch (ZulipClientException e) { LOG.warning("Error deleting event queue - " + e.getMessage()); } finally { diff --git a/src/main/java/com/github/jamesnetherton/zulip/client/api/event/request/RegisterEventQueueApiRequest.java b/src/main/java/com/github/jamesnetherton/zulip/client/api/event/request/RegisterEventQueueApiRequest.java index 5c3a9c50..0a6a0feb 100644 --- a/src/main/java/com/github/jamesnetherton/zulip/client/api/event/request/RegisterEventQueueApiRequest.java +++ b/src/main/java/com/github/jamesnetherton/zulip/client/api/event/request/RegisterEventQueueApiRequest.java @@ -33,7 +33,7 @@ public RegisterEventQueueApiRequest(ZulipHttpClient client, Narrow... narrows) { putParamAsJsonString(EVENT_TYPES, MONITORED_EVENTS); if (narrows.length > 0) { - String[][] stringNarrows = new String[1][narrows.length]; + String[][] stringNarrows = new String[narrows.length][2]; for (int i = 0; i < narrows.length; i++) { stringNarrows[i] = new String[] { narrows[i].getOperator(), narrows[i].getOperand() }; } diff --git a/src/test/java/com/github/jamesnetherton/zulip/client/api/integration/event/ZulipEventIT.java b/src/test/java/com/github/jamesnetherton/zulip/client/api/integration/event/ZulipEventIT.java index 4389f1e0..572496ae 100644 --- a/src/test/java/com/github/jamesnetherton/zulip/client/api/integration/event/ZulipEventIT.java +++ b/src/test/java/com/github/jamesnetherton/zulip/client/api/integration/event/ZulipEventIT.java @@ -102,7 +102,7 @@ public void onEvent(Message event) { messages.add(event.getContent()); latch.countDown(); } - }, Narrow.of("stream", streamA)); + }, Narrow.of("stream", streamA), Narrow.of("is", "stream")); try { eventPoller.start(); @@ -123,9 +123,6 @@ public void onEvent(Message event) { count += 2; } - } catch (ZulipClientException e) { - e.printStackTrace(); - throw e; } finally { eventPoller.stop(); }