use of com.github.jamesnetherton.zulip.client.exception.ZulipClientException in project zulip-java-client by jamesnetherton.
the class EventPoller method start.
/**
* Starts event message polling.
*
* @throws ZulipClientException if the event polling request was not successful
*/
public synchronized void start() throws ZulipClientException {
if (status.equals(Status.STOPPED)) {
LOG.info("EventPoller starting");
status = Status.STARTING;
RegisterEventQueueApiRequest createQueue = new RegisterEventQueueApiRequest(this.client, narrows);
GetMessageEventsApiRequest getEvents = new GetMessageEventsApiRequest(this.client);
queue = createQueue.execute();
executor = Executors.newSingleThreadExecutor();
executor.submit(new Runnable() {
private long lastEventId = queue.getLastEventId();
@Override
public void run() {
while (status.equals(Status.STARTING) || status.equals(Status.STARTED)) {
try {
getEvents.withQueueId(queue.getQueueId());
getEvents.withLastEventId(lastEventId);
List<MessageEvent> messageEvents = getEvents.execute();
for (MessageEvent event : messageEvents) {
listener.onEvent(event.getMessage());
}
lastEventId = messageEvents.stream().max(Comparator.comparing(Event::getId)).get().getId();
Thread.sleep(5000);
} catch (ZulipClientException e) {
LOG.warning("Error processing events - " + e.getMessage());
if (e.getCode().equals("BAD_EVENT_QUEUE_ID")) {
// Queue may have been garbage collected so recreate it
try {
queue = createQueue.execute();
} catch (ZulipClientException zulipClientException) {
LOG.warning("Error recreating message queue - " + e.getMessage());
}
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
});
LOG.info("EventPoller started");
status = Status.STARTED;
}
}
use of com.github.jamesnetherton.zulip.client.exception.ZulipClientException in project zulip-java-client by jamesnetherton.
the class ZulipIntegrationTestBase method afterEach.
@AfterEach
public void afterEach() throws Exception {
if (zulip != null) {
// Clean up messages
List<Message> messages = zulip.messages().getMessages(100, 0, Anchor.NEWEST).execute();
if (messages != null) {
for (Message message : messages) {
try {
zulip.messages().deleteMessage(message.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
List<Message> privateMessages = zulip.messages().getMessages(100, 0, Anchor.NEWEST).withNarrows(Narrow.of("is", "private")).execute();
if (privateMessages != null) {
for (Message message : privateMessages) {
try {
zulip.messages().deleteMessage(message.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
// Clean up streams
List<Stream> streams = zulip.streams().getAll().withIncludeDefault(false).execute();
if (streams != null) {
for (Stream stream : streams) {
try {
zulip.streams().delete(stream.getStreamId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
// Clean up user groups
List<UserGroup> groups = zulip.users().getUserGroups().execute();
if (groups != null) {
for (UserGroup group : groups) {
try {
zulip.users().deleteUserGroup(group.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
// Clean up profile fields
List<ProfileField> fields = zulip.server().getCustomProfileFields().execute();
if (fields != null) {
for (ProfileField field : fields) {
try {
zulip.server().deleteCustomProfileField(field.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
}
// Clean up drafts
List<Draft> drafts = zulip.drafts().getDrafts().execute();
if (drafts != null) {
for (Draft draft : drafts) {
try {
zulip.drafts().deleteDraft(draft.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
}
use of com.github.jamesnetherton.zulip.client.exception.ZulipClientException in project zulip-java-client by jamesnetherton.
the class ZulipEventIT method messageEventsWithNarrow.
@Test
public void messageEventsWithNarrow() throws Exception {
CountDownLatch latch = new CountDownLatch(5);
List<String> messages = new ArrayList<>();
String streamA = UUID.randomUUID().toString().split("-")[0];
String streamB = UUID.randomUUID().toString().split("-")[0];
zulip.streams().subscribe(StreamSubscriptionRequest.of(streamA, streamA), StreamSubscriptionRequest.of(streamB, streamB)).execute();
for (int i = 0; i < 10; i++) {
List<Stream> streams = zulip.streams().getAll().execute();
List<Stream> matches = streams.stream().filter(stream -> stream.getName().equals(streamA) || stream.getName().equals(streamB)).collect(Collectors.toList());
if (matches.size() == 2) {
break;
}
Thread.sleep(500);
}
EventPoller eventPoller = zulip.events().captureMessageEvents(new MessageEventListener() {
@Override
public void onEvent(Message event) {
messages.add(event.getContent());
latch.countDown();
}
}, Narrow.of("stream", streamA));
try {
eventPoller.start();
MessageService messageService = zulip.messages();
for (int i = 0; i < 10; i++) {
String streamName = i % 2 == 0 ? streamA : streamB;
messageService.sendStreamMessage("Stream " + streamName + " Content " + i, streamName, "testtopic").execute();
}
assertTrue(latch.await(10, TimeUnit.SECONDS));
int count = 0;
for (int i = 0; i < 5; i++) {
assertEquals("Stream " + streamA + " Content " + count, messages.get(i));
count += 2;
}
} catch (ZulipClientException e) {
e.printStackTrace();
throw e;
} finally {
eventPoller.stop();
}
}
use of com.github.jamesnetherton.zulip.client.exception.ZulipClientException in project zulip-java-client by jamesnetherton.
the class ZulipEventIT method messageEvents.
@Test
public void messageEvents() throws Exception {
CountDownLatch latch = new CountDownLatch(3);
List<String> messages = new ArrayList<>();
String streamName = UUID.randomUUID().toString().split("-")[0];
StreamSubscriptionRequest subscriptionRequest = StreamSubscriptionRequest.of(streamName, streamName);
StreamService streamService = zulip.streams();
streamService.subscribe(subscriptionRequest).execute();
for (int i = 0; i < 10; i++) {
List<Stream> streams = streamService.getAll().execute();
List<Stream> matches = streams.stream().filter(stream -> stream.getName().equals(streamName)).collect(Collectors.toList());
if (matches.size() == 1) {
break;
}
Thread.sleep(500);
}
EventPoller eventPoller = zulip.events().captureMessageEvents(new MessageEventListener() {
@Override
public void onEvent(Message event) {
messages.add(event.getContent());
latch.countDown();
}
});
try {
eventPoller.start();
MessageService messageService = zulip.messages();
for (int i = 0; i < 3; i++) {
messageService.sendStreamMessage("Test Content " + i, streamName, "testtopic").execute();
}
assertTrue(latch.await(5, TimeUnit.SECONDS));
for (int i = 0; i < 3; i++) {
assertEquals("Test Content " + i, messages.get(i));
}
} catch (ZulipClientException e) {
e.printStackTrace();
throw e;
} finally {
eventPoller.stop();
}
}
use of com.github.jamesnetherton.zulip.client.exception.ZulipClientException in project zulip-java-client by jamesnetherton.
the class ZulipCommonsHttpClient method getRequestUri.
private URI getRequestUri(String path, Map<String, Object> parameters) throws ZulipClientException {
URL zulipUrl = configuration.getZulipUrl();
URIBuilder builder = new URIBuilder().setScheme(zulipUrl.getProtocol()).setHost(zulipUrl.getHost()).setPort(zulipUrl.getPort()).setPath(ZulipUrlUtils.API_BASE_PATH + "/" + path);
if (parameters != null) {
for (Map.Entry<String, Object> entry : parameters.entrySet()) {
if (entry.getValue() != null) {
builder.addParameter(entry.getKey(), entry.getValue().toString());
}
}
}
try {
return builder.build();
} catch (URISyntaxException e) {
throw new ZulipClientException(e);
}
}
Aggregations