From 0b89323a148739b399c7fb5e9b8e596cc95793c8 Mon Sep 17 00:00:00 2001 From: jenow Date: Tue, 3 Mar 2020 15:59:32 +0100 Subject: [PATCH 1/9] realtime controller --- doc/3/controllers/realtime/count/index.md | 33 +++++++++ .../realtime/count/snippets/count.java | 22 ++++++ .../realtime/count/snippets/count.test.yml | 7 ++ doc/3/controllers/realtime/publish/index.md | 38 ++++++++++ .../realtime/publish/snippets/publish.java | 4 ++ .../publish/snippets/publish.test.yml | 7 ++ .../controllers/realtime/unsubscribe/index.md | 29 ++++++++ .../unsubscribe/snippets/unsubscribe.java | 22 ++++++ .../unsubscribe/snippets/unsubscribe.test.yml | 7 ++ .../API/Controllers/RealtimeController.java | 69 +++++++++++++++++++ .../Controllers/RealtimeControllerTest.java | 45 ++++++++++++ 11 files changed, 283 insertions(+) create mode 100644 doc/3/controllers/realtime/count/index.md create mode 100644 doc/3/controllers/realtime/count/snippets/count.java create mode 100644 doc/3/controllers/realtime/count/snippets/count.test.yml create mode 100644 doc/3/controllers/realtime/publish/index.md create mode 100644 doc/3/controllers/realtime/publish/snippets/publish.java create mode 100644 doc/3/controllers/realtime/publish/snippets/publish.test.yml create mode 100644 doc/3/controllers/realtime/unsubscribe/index.md create mode 100644 doc/3/controllers/realtime/unsubscribe/snippets/unsubscribe.java create mode 100644 doc/3/controllers/realtime/unsubscribe/snippets/unsubscribe.test.yml diff --git a/doc/3/controllers/realtime/count/index.md b/doc/3/controllers/realtime/count/index.md new file mode 100644 index 00000000..71102aea --- /dev/null +++ b/doc/3/controllers/realtime/count/index.md @@ -0,0 +1,33 @@ +--- +code: true +type: page +title: count +description: Returns the number of other connections sharing the same subscription. +--- + +# count + +Returns the number of other connections sharing the same subscription. + +## Arguments + +```java +public CompletableFuture count(final String roomId) + throws NotConnectedException, InternalException +``` + +| Argument | Type | Description | +|-----------|-------------------|----------------------| +| `room_id` |
String
| Subscription room ID | + +## Return + +Returns the number of active connections using the same provided subscription room. + +## Exceptions + +Throws a `KuzzleException` if there is an error. See how to [handle error](/sdk/java/3/essentials/error-handling). + +## Usage + +<<< ./snippets/count.java diff --git a/doc/3/controllers/realtime/count/snippets/count.java b/doc/3/controllers/realtime/count/snippets/count.java new file mode 100644 index 00000000..f5748e60 --- /dev/null +++ b/doc/3/controllers/realtime/count/snippets/count.java @@ -0,0 +1,22 @@ +SubscribeOptions options = new SubscribeOptions(); +options.setSubscribeToSelf(true); + +ConcurrentHashMap filters = new ConcurrentHashMap<>(); +filters.put("exists", "name"); + +ConcurrentHashMap document = new ConcurrentHashMap<>(); +document.put("name", "nina-vkote"); + +final String roomId = kuzzle.getRealtimeController().subscribe( + "nyc-open-data", + "yellow-taxi", + filters, + notification -> { + if (notification.scope.equals(SubscribeOptions.Scope.IN.toString())) { + System.out.println("Document entered the scope"); + } else { + System.out.println("Document left the scope"); + } +}).get(); + +final Integer result = kuzzle.getRealtimeController().count(roomId).get(); \ No newline at end of file diff --git a/doc/3/controllers/realtime/count/snippets/count.test.yml b/doc/3/controllers/realtime/count/snippets/count.test.yml new file mode 100644 index 00000000..0392ea47 --- /dev/null +++ b/doc/3/controllers/realtime/count/snippets/count.test.yml @@ -0,0 +1,7 @@ +name: Realtime#count +description: Counts subscribers for a subscription room. +hooks: + before: + after: +template: print-result +expected: 1 \ No newline at end of file diff --git a/doc/3/controllers/realtime/publish/index.md b/doc/3/controllers/realtime/publish/index.md new file mode 100644 index 00000000..9e372ac3 --- /dev/null +++ b/doc/3/controllers/realtime/publish/index.md @@ -0,0 +1,38 @@ +--- +code: true +type: page +title: publish +description: Publishes a real-time message. +--- + +# publish + +Sends a real-time message to Kuzzle. The message will be broadcasted to all clients with subscriptions matching the index, the collection and the message content. + +The index and collection are indicative and serve only to distinguish the rooms. They are not required to exist in the database. + +**Note:** real-time messages are not persisted in the database. + +## Arguments + +```java +public CompletableFuture publish( + final String index, + final String collection, + final ConcurrentHashMap message) + throws NotConnectedException, InternalException +``` + +| Argument | Type | Description | +|--------------|--------------------|-------------------------------------| +| `index` |
String
| Index name | +| `collection` |
String
| Collection name | +| `message` |
ConcurrentHashMap
| ConcurrentHashMap representing a JSON payload | + +## Exceptions + +Throws a `KuzzleException` if there is an error. See how to [handle error](/sdk/java/3/essentials/error-handling). + +## Usage + +<<< ./snippets/publish.java diff --git a/doc/3/controllers/realtime/publish/snippets/publish.java b/doc/3/controllers/realtime/publish/snippets/publish.java new file mode 100644 index 00000000..db209db1 --- /dev/null +++ b/doc/3/controllers/realtime/publish/snippets/publish.java @@ -0,0 +1,4 @@ +ConcurrentHashMap document = new ConcurrentHashMap<>(); +document.put("name", "nina-vkote"); + +kuzzle.getRealtimeController().publish("my-index", "my-collection", document); \ No newline at end of file diff --git a/doc/3/controllers/realtime/publish/snippets/publish.test.yml b/doc/3/controllers/realtime/publish/snippets/publish.test.yml new file mode 100644 index 00000000..579119b6 --- /dev/null +++ b/doc/3/controllers/realtime/publish/snippets/publish.test.yml @@ -0,0 +1,7 @@ +name: Realtime#publish +description: Publishes a realtime message. +hooks: + before: + after: +template: default +expected: Success \ No newline at end of file diff --git a/doc/3/controllers/realtime/unsubscribe/index.md b/doc/3/controllers/realtime/unsubscribe/index.md new file mode 100644 index 00000000..da23b8ef --- /dev/null +++ b/doc/3/controllers/realtime/unsubscribe/index.md @@ -0,0 +1,29 @@ +--- +code: true +type: page +title: unsubscribe +description: Removes a subscription. +--- + +# unsubscribe + +Removes a subscription. + +## Arguments + +```java +public CompletableFuture unsubscribe(final String roomId) + throws NotConnectedException, InternalException +``` + +| Argument | Type | Description | +|-----------|--------------------|----------------------| +| `room_id` |
String
| Subscription room ID | + +## Exceptions + +Throws a `KuzzleException` if there is an error. See how to [handle error](/sdk/java/3/essentials/error-handling). + +## Usage + +<<< ./snippets/unsubscribe.java diff --git a/doc/3/controllers/realtime/unsubscribe/snippets/unsubscribe.java b/doc/3/controllers/realtime/unsubscribe/snippets/unsubscribe.java new file mode 100644 index 00000000..8efafdba --- /dev/null +++ b/doc/3/controllers/realtime/unsubscribe/snippets/unsubscribe.java @@ -0,0 +1,22 @@ +SubscribeOptions options = new SubscribeOptions(); +options.setSubscribeToSelf(true); + +ConcurrentHashMap filters = new ConcurrentHashMap<>(); +filters.put("exists", "name"); + +ConcurrentHashMap document = new ConcurrentHashMap<>(); +document.put("name", "nina-vkote"); + +final String roomId = kuzzle.getRealtimeController().subscribe( + "nyc-open-data", + "yellow-taxi", + filters, + notification -> { + if (notification.scope.equals(SubscribeOptions.Scope.IN.toString())) { + System.out.println("Document entered the scope"); + } else { + System.out.println("Document left the scope"); + } +}).get(); + +kuzzle.getRealtimeController().unsubscribe(roomId).get(); \ No newline at end of file diff --git a/doc/3/controllers/realtime/unsubscribe/snippets/unsubscribe.test.yml b/doc/3/controllers/realtime/unsubscribe/snippets/unsubscribe.test.yml new file mode 100644 index 00000000..909e8388 --- /dev/null +++ b/doc/3/controllers/realtime/unsubscribe/snippets/unsubscribe.test.yml @@ -0,0 +1,7 @@ +name: Realtime#unsubscribe +description: Removes a subscription. +hooks: + before: + after: +template: default +expected: Success \ No newline at end of file diff --git a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java index eae90e18..05b10412 100644 --- a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java +++ b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java @@ -54,6 +54,58 @@ public RealtimeController(Kuzzle kuzzle) { }); } + /** + * Returns the number of other connections sharing the same subscription. + * + * @param roomId + * @return + * @throws NotConnectedException + * @throws InternalException + */ + public CompletableFuture count(final String roomId) throws NotConnectedException, InternalException { + return kuzzle + .query(new KuzzleMap() + .put("controller", "realtime") + .put("action", "count") + .put("body", new KuzzleMap().put("room_id", roomId))) + .thenApplyAsync((response) -> ((KuzzleMap) response.result).getNumber("count").intValue()); + } + + /** + * Sends a real-time message to Kuzzle. The message will be dispatched to + * all clients with subscriptions matching the index, the collection and + * the message content. + * + * @param index + * @param collection + * @param message + * @return + * @throws NotConnectedException + * @throws InternalException + */ + public CompletableFuture publish(final String index, final String collection, final ConcurrentHashMap message) throws NotConnectedException, InternalException { + return kuzzle + .query(new KuzzleMap() + .put("controller", "realtime") + .put("action", "publish") + .put("index", index) + .put("collection", collection) + .put("body", new KuzzleMap().put("message", message))) + .thenApplyAsync((response) -> null); + } + + /** + * Subscribe to a collection. + * + * @param index + * @param collection + * @param filters + * @param handler + * @param options + * @return + * @throws NotConnectedException + * @throws InternalException + */ public CompletableFuture subscribe(final String index, final String collection, final ConcurrentHashMap filters, final NotificationHandler handler, final SubscribeOptions options) throws NotConnectedException, InternalException { ConcurrentHashMap queryOptions = new ConcurrentHashMap<>(); boolean subscribeToSelf = true; @@ -98,4 +150,21 @@ public CompletableFuture subscribe(final String index, final String coll public CompletableFuture subscribe(final String index, final String collection, final ConcurrentHashMap filters, final NotificationHandler handler) throws NotConnectedException, InternalException { return this.subscribe(index, collection, filters, handler, null); } + + /** + * Removes a subscription + * + * @param roomId + * @return + * @throws NotConnectedException + * @throws InternalException + */ + public CompletableFuture unsubscribe(final String roomId) throws NotConnectedException, InternalException { + return kuzzle + .query(new KuzzleMap() + .put("controller", "realtime") + .put("action", "unsubscribe") + .put("body", new KuzzleMap().put("room_id", roomId))) + .thenApplyAsync((response) -> null); + } } diff --git a/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java b/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java index d8859ef1..fe73a32f 100644 --- a/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java +++ b/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java @@ -23,6 +23,36 @@ public class RealtimeControllerTest { private AbstractProtocol networkProtocol = Mockito.mock(WebSocket.class); + @Test + public void countTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + NotificationHandler notificationHandler = mock(NotificationHandler.class); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getRealtimeController().count("roomId"); + verify(kuzzleSpy).query((KuzzleMap) arg.capture()); + + assertEquals("realtime", ((KuzzleMap) arg.getValue()).getString("controller")); + assertEquals("test", ((KuzzleMap) arg.getValue()).getString("action")); + assertEquals("roomId", ((KuzzleMap)((KuzzleMap) arg.getValue()).get("body")).getString("room_id")); + } + + @Test + public void publishTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + NotificationHandler notificationHandler = mock(NotificationHandler.class); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getRealtimeController().unsubscribe("roomId"); + verify(kuzzleSpy).query((KuzzleMap) arg.capture()); + + assertEquals("realtime", ((KuzzleMap) arg.getValue()).getString("controller")); + assertEquals("publish", ((KuzzleMap) arg.getValue()).getString("action")); + assertEquals("bar", ((KuzzleMap)((KuzzleMap)((KuzzleMap) arg.getValue()).get("body")).get("message")).getString("foo")); + } + @Test public void subscribeTest() throws NotConnectedException, InternalException { Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); @@ -83,4 +113,19 @@ public void notificationHandlerWithoutSubscribeToSelfTest() throws NotConnectedE kuzzleSpy.trigger(Event.unhandledResponse, response); verify(notificationHandler, never()).run(any(Response.class)); } + + @Test + public void unsubscribeTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + NotificationHandler notificationHandler = mock(NotificationHandler.class); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getRealtimeController().unsubscribe("roomId"); + verify(kuzzleSpy).query((KuzzleMap) arg.capture()); + + assertEquals("realtime", ((KuzzleMap) arg.getValue()).getString("controller")); + assertEquals("unsubscribe", ((KuzzleMap) arg.getValue()).getString("action")); + assertEquals("roomId", ((KuzzleMap)((KuzzleMap) arg.getValue()).get("body")).getString("room_id")); + } } From c42ff05773ef714dc5ee2029d906f494c97bdb04 Mon Sep 17 00:00:00 2001 From: jenow Date: Tue, 3 Mar 2020 16:06:41 +0100 Subject: [PATCH 2/9] fix unit tests --- .../test/API/Controllers/RealtimeControllerTest.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java b/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java index fe73a32f..5fdf18e0 100644 --- a/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java +++ b/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java @@ -34,7 +34,7 @@ public void countTest() throws NotConnectedException, InternalException { verify(kuzzleSpy).query((KuzzleMap) arg.capture()); assertEquals("realtime", ((KuzzleMap) arg.getValue()).getString("controller")); - assertEquals("test", ((KuzzleMap) arg.getValue()).getString("action")); + assertEquals("count", ((KuzzleMap) arg.getValue()).getString("action")); assertEquals("roomId", ((KuzzleMap)((KuzzleMap) arg.getValue()).get("body")).getString("room_id")); } @@ -45,12 +45,17 @@ public void publishTest() throws NotConnectedException, InternalException { ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); - kuzzleSpy.getRealtimeController().unsubscribe("roomId"); + ConcurrentHashMap message = new ConcurrentHashMap<>(); + message.put("foo", "bar"); + + kuzzleSpy.getRealtimeController().publish("index", "collection", message); verify(kuzzleSpy).query((KuzzleMap) arg.capture()); assertEquals("realtime", ((KuzzleMap) arg.getValue()).getString("controller")); assertEquals("publish", ((KuzzleMap) arg.getValue()).getString("action")); - assertEquals("bar", ((KuzzleMap)((KuzzleMap)((KuzzleMap) arg.getValue()).get("body")).get("message")).getString("foo")); + assertEquals("index", ((KuzzleMap) arg.getValue()).getString("index")); + assertEquals("collection", ((KuzzleMap) arg.getValue()).getString("collection")); + assertEquals("bar", ((ConcurrentHashMap)((KuzzleMap)((KuzzleMap) arg.getValue()).get("body")).get("message")).get("foo").toString()); } @Test From f175d944cceb957e64011ccb3238544a3f0b7cfe Mon Sep 17 00:00:00 2001 From: Yoann Abbes Date: Wed, 4 Mar 2020 18:34:15 +0100 Subject: [PATCH 3/9] add missing import --- .ci/doc/templates/print-result-array.tpl.java | 1 + .ci/doc/templates/print-result.tpl.java | 1 + 2 files changed, 2 insertions(+) diff --git a/.ci/doc/templates/print-result-array.tpl.java b/.ci/doc/templates/print-result-array.tpl.java index 9c751d0b..c4fd68cd 100644 --- a/.ci/doc/templates/print-result-array.tpl.java +++ b/.ci/doc/templates/print-result-array.tpl.java @@ -2,6 +2,7 @@ import io.kuzzle.sdk.Protocol.WebSocket; import io.kuzzle.sdk.Options.Protocol.WebSocketOptions; import io.kuzzle.sdk.Options.KuzzleOptions; +import io.kuzzle.sdk.Options.SubscribeOptions; import io.kuzzle.sdk.CoreClasses.Responses.Response; import java.util.concurrent.ConcurrentHashMap; diff --git a/.ci/doc/templates/print-result.tpl.java b/.ci/doc/templates/print-result.tpl.java index 1e7b1e39..ea361e66 100644 --- a/.ci/doc/templates/print-result.tpl.java +++ b/.ci/doc/templates/print-result.tpl.java @@ -2,6 +2,7 @@ import io.kuzzle.sdk.Protocol.WebSocket; import io.kuzzle.sdk.Options.Protocol.WebSocketOptions; import io.kuzzle.sdk.Options.KuzzleOptions; +import io.kuzzle.sdk.Options.SubscribeOptions; import io.kuzzle.sdk.CoreClasses.Responses.Response; import java.util.concurrent.ConcurrentHashMap; From c98c283364f9fb9c46922d35794743c566d33023 Mon Sep 17 00:00:00 2001 From: Yoann Abbes Date: Thu, 5 Mar 2020 09:27:03 +0100 Subject: [PATCH 4/9] fix --- .../java/io/kuzzle/sdk/API/Controllers/RealtimeController.java | 2 +- .../io/kuzzle/test/API/Controllers/RealtimeControllerTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java index 05b10412..34e7969b 100644 --- a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java +++ b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java @@ -164,7 +164,7 @@ public CompletableFuture unsubscribe(final String roomId) throws NotConnec .query(new KuzzleMap() .put("controller", "realtime") .put("action", "unsubscribe") - .put("body", new KuzzleMap().put("room_id", roomId))) + .put("body", new KuzzleMap().put("roomId", roomId))) .thenApplyAsync((response) -> null); } } diff --git a/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java b/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java index 5fdf18e0..d04c03e0 100644 --- a/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java +++ b/src/test/java/io/kuzzle/test/API/Controllers/RealtimeControllerTest.java @@ -131,6 +131,6 @@ public void unsubscribeTest() throws NotConnectedException, InternalException { assertEquals("realtime", ((KuzzleMap) arg.getValue()).getString("controller")); assertEquals("unsubscribe", ((KuzzleMap) arg.getValue()).getString("action")); - assertEquals("roomId", ((KuzzleMap)((KuzzleMap) arg.getValue()).get("body")).getString("room_id")); + assertEquals("roomId", ((KuzzleMap)((KuzzleMap) arg.getValue()).get("body")).getString("roomId")); } } From 1d5a448c96f1a4271dfa637efd8b07e66d840082 Mon Sep 17 00:00:00 2001 From: Yoann-Abbes <44844010+Yoann-Abbes@users.noreply.github.com> Date: Thu, 5 Mar 2020 09:31:32 +0100 Subject: [PATCH 5/9] Update doc/3/controllers/realtime/unsubscribe/index.md --- doc/3/controllers/realtime/unsubscribe/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/3/controllers/realtime/unsubscribe/index.md b/doc/3/controllers/realtime/unsubscribe/index.md index da23b8ef..5e7075c0 100644 --- a/doc/3/controllers/realtime/unsubscribe/index.md +++ b/doc/3/controllers/realtime/unsubscribe/index.md @@ -18,7 +18,7 @@ public CompletableFuture unsubscribe(final String roomId) | Argument | Type | Description | |-----------|--------------------|----------------------| -| `room_id` |
String
| Subscription room ID | +| `room_id` |
String
| Subscription room ID | ## Exceptions From 2d9e0453c2ffab34c9752337fc4e01b25256247d Mon Sep 17 00:00:00 2001 From: jenow Date: Thu, 5 Mar 2020 10:38:51 +0100 Subject: [PATCH 6/9] do not document basic exception --- doc/3/controllers/realtime/count/index.md | 4 ---- doc/3/controllers/realtime/publish/index.md | 4 ---- doc/3/controllers/realtime/unsubscribe/index.md | 4 ---- 3 files changed, 12 deletions(-) diff --git a/doc/3/controllers/realtime/count/index.md b/doc/3/controllers/realtime/count/index.md index 71102aea..36066ea6 100644 --- a/doc/3/controllers/realtime/count/index.md +++ b/doc/3/controllers/realtime/count/index.md @@ -24,10 +24,6 @@ public CompletableFuture count(final String roomId) Returns the number of active connections using the same provided subscription room. -## Exceptions - -Throws a `KuzzleException` if there is an error. See how to [handle error](/sdk/java/3/essentials/error-handling). - ## Usage <<< ./snippets/count.java diff --git a/doc/3/controllers/realtime/publish/index.md b/doc/3/controllers/realtime/publish/index.md index 9e372ac3..9df4a740 100644 --- a/doc/3/controllers/realtime/publish/index.md +++ b/doc/3/controllers/realtime/publish/index.md @@ -29,10 +29,6 @@ public CompletableFuture publish( | `collection` |
String
| Collection name | | `message` |
ConcurrentHashMap
| ConcurrentHashMap representing a JSON payload | -## Exceptions - -Throws a `KuzzleException` if there is an error. See how to [handle error](/sdk/java/3/essentials/error-handling). - ## Usage <<< ./snippets/publish.java diff --git a/doc/3/controllers/realtime/unsubscribe/index.md b/doc/3/controllers/realtime/unsubscribe/index.md index 5e7075c0..aeb14d05 100644 --- a/doc/3/controllers/realtime/unsubscribe/index.md +++ b/doc/3/controllers/realtime/unsubscribe/index.md @@ -20,10 +20,6 @@ public CompletableFuture unsubscribe(final String roomId) |-----------|--------------------|----------------------| | `room_id` |
String
| Subscription room ID | -## Exceptions - -Throws a `KuzzleException` if there is an error. See how to [handle error](/sdk/java/3/essentials/error-handling). - ## Usage <<< ./snippets/unsubscribe.java From e1d6b32d6654dd345d16e7f7f624a0a659c22c24 Mon Sep 17 00:00:00 2001 From: jenow Date: Thu, 5 Mar 2020 15:41:57 +0100 Subject: [PATCH 7/9] remove subscription after unsubscribe --- .../io/kuzzle/sdk/API/Controllers/RealtimeController.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java index 34e7969b..3dd1c888 100644 --- a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java +++ b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java @@ -165,6 +165,9 @@ public CompletableFuture unsubscribe(final String roomId) throws NotConnec .put("controller", "realtime") .put("action", "unsubscribe") .put("body", new KuzzleMap().put("roomId", roomId))) - .thenApplyAsync((response) -> null); + .thenApplyAsync((response) -> { + subscriptions.get("roomId").clear(); + return null; + }); } } From c7264f3f77a2fe9b11384383fef1e8ca9ecfec4d Mon Sep 17 00:00:00 2001 From: jenow Date: Thu, 5 Mar 2020 17:59:36 +0100 Subject: [PATCH 8/9] fix --- .../java/io/kuzzle/sdk/API/Controllers/RealtimeController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java index 3dd1c888..fefd03e9 100644 --- a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java +++ b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java @@ -166,7 +166,7 @@ public CompletableFuture unsubscribe(final String roomId) throws NotConnec .put("action", "unsubscribe") .put("body", new KuzzleMap().put("roomId", roomId))) .thenApplyAsync((response) -> { - subscriptions.get("roomId").clear(); + subscriptions.get(roomId).clear(); return null; }); } From 05399c3560a91564381c471018852349ab19183e Mon Sep 17 00:00:00 2001 From: jenow Date: Fri, 6 Mar 2020 11:43:12 +0100 Subject: [PATCH 9/9] clear subscriptionsCache after resubscribing --- .../io/kuzzle/sdk/API/Controllers/RealtimeController.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java index fefd03e9..d1aa0ca2 100644 --- a/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java +++ b/src/main/java/io/kuzzle/sdk/API/Controllers/RealtimeController.java @@ -166,7 +166,10 @@ public CompletableFuture unsubscribe(final String roomId) throws NotConnec .put("action", "unsubscribe") .put("body", new KuzzleMap().put("roomId", roomId))) .thenApplyAsync((response) -> { - subscriptions.get(roomId).clear(); + ArrayList subs = subscriptions.get(roomId); + if (subs != null) { + subscriptions.get(roomId).clear(); + } return null; }); }