diff --git a/.pubnub.yml b/.pubnub.yml index c7f0b1b43..f2de2cd64 100644 --- a/.pubnub.yml +++ b/.pubnub.yml @@ -1,8 +1,13 @@ name: java -version: 4.0.9 +version: 4.0.10 schema: 1 scm: github.com/pubnub/java changelog: + - version: v4.0.10 + date: + changes: + - type: improvement + text: adding channel / channelGroup fields when a message / presence event comes in. - version: v4.0.9 date: changes: diff --git a/CHANGELOG.md b/CHANGELOG.md index 897a535d7..6d475e9fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,14 @@ +## [v4.0.10](https://github.com/pubnub/java/tree/v4.0.10) + + + [Full Changelog](https://github.com/pubnub/java/compare/v4.0.9...v4.0.10) + + +- ⭐adding channel / channelGroup fields when a message / presence event comes in. + + + ## [v4.0.9](https://github.com/pubnub/java/tree/v4.0.9) diff --git a/build.gradle b/build.gradle index 720a6fb8e..d8fc5a90b 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ plugins { id 'findbugs' } group = 'com.pubnub' -version = '4.0.9' +version = '4.0.10' description = """""" diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index f6a82f984..d32049484 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -54,7 +54,7 @@ public class PubNub { private static final int TIMESTAMP_DIVIDER = 1000; private static final int MAX_SEQUENCE = 65535; - private static final String SDK_VERSION = "4.0.9"; + private static final String SDK_VERSION = "4.0.10"; public PubNub(final PNConfiguration initialConfig) { this.configuration = initialConfig; diff --git a/src/main/java/com/pubnub/api/PubNubUtil.java b/src/main/java/com/pubnub/api/PubNubUtil.java index 56a089d5e..49b2d2175 100644 --- a/src/main/java/com/pubnub/api/PubNubUtil.java +++ b/src/main/java/com/pubnub/api/PubNubUtil.java @@ -132,4 +132,13 @@ public static String signSHA256(final String key, final String data) throws PubN return new String(Base64.encode(hmacData, 0), Charset.forName("UTF-8")).replace('+', '-').replace('/', '_'); } + public static String replaceLast(String string, String toReplace, String replacement) { + int pos = string.lastIndexOf(toReplace); + if (pos > -1) { + return string.substring(0, pos).concat(replacement).concat(string.substring(pos + toReplace.length(), string.length())); + } else { + return string; + } + } + } diff --git a/src/main/java/com/pubnub/api/models/consumer/pubsub/PNMessageResult.java b/src/main/java/com/pubnub/api/models/consumer/pubsub/PNMessageResult.java index 99ab46218..93682b092 100644 --- a/src/main/java/com/pubnub/api/models/consumer/pubsub/PNMessageResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/pubsub/PNMessageResult.java @@ -10,9 +10,16 @@ public class PNMessageResult { private JsonNode message; + @Deprecated private String subscribedChannel; + @Deprecated private String actualChannel; + + private String channel; + private String channelGroup; + private Long timetoken; private Object userMetadata; } + diff --git a/src/main/java/com/pubnub/api/models/consumer/pubsub/PNPresenceEventResult.java b/src/main/java/com/pubnub/api/models/consumer/pubsub/PNPresenceEventResult.java index 82eae4283..00254975a 100644 --- a/src/main/java/com/pubnub/api/models/consumer/pubsub/PNPresenceEventResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/pubsub/PNPresenceEventResult.java @@ -15,8 +15,14 @@ public class PNPresenceEventResult { private Integer occupancy; private JsonNode state; + @Deprecated private String subscribedChannel; + @Deprecated private String actualChannel; + + private String channel; + private String channelGroup; + private Long timetoken; private Object userMetadata; diff --git a/src/main/java/com/pubnub/api/models/server/SubscribeMessage.java b/src/main/java/com/pubnub/api/models/server/SubscribeMessage.java index 437f032f1..cfbfa99f1 100644 --- a/src/main/java/com/pubnub/api/models/server/SubscribeMessage.java +++ b/src/main/java/com/pubnub/api/models/server/SubscribeMessage.java @@ -13,7 +13,7 @@ public class SubscribeMessage { private String shard; @JsonProperty("b") - private String subscriptionMatch; // will contain channel group; or channel if user subscribed to channel + private String subscriptionMatch; @JsonProperty("c") private String channel; diff --git a/src/main/java/com/pubnub/api/workers/SubscribeMessageWorker.java b/src/main/java/com/pubnub/api/workers/SubscribeMessageWorker.java index bf9cc977b..f04ee0f71 100644 --- a/src/main/java/com/pubnub/api/workers/SubscribeMessageWorker.java +++ b/src/main/java/com/pubnub/api/workers/SubscribeMessageWorker.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.PubNubUtil; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.enums.PNStatusCategory; import com.pubnub.api.managers.ListenerManager; @@ -120,13 +121,27 @@ private void processIncomingPayload(final SubscribeMessage message) { subscriptionMatch = null; } - if (message.getChannel().contains("-pnpres")) { + if (message.getChannel().endsWith("-pnpres")) { PresenceEnvelope presencePayload = mapper.convertValue(message.getPayload(), PresenceEnvelope.class); + String associatedChannel = message.getChannel(); + String associatedChannelGroup = message.getSubscriptionMatch(); + + if (associatedChannel != null) { + associatedChannel = PubNubUtil.replaceLast(associatedChannel, "-pnpres", ""); + } + if (associatedChannelGroup != null) { + associatedChannelGroup = PubNubUtil.replaceLast(associatedChannelGroup, "-pnpres", ""); + } + PNPresenceEventResult pnPresenceEventResult = PNPresenceEventResult.builder() .event(presencePayload.getAction()) + // deprecated .actualChannel((subscriptionMatch != null) ? channel : null) .subscribedChannel(subscriptionMatch != null ? subscriptionMatch : channel) + // deprecated + .channel(associatedChannel) + .channelGroup(associatedChannelGroup) .state(presencePayload.getData()) .timetoken(publishMetaData.getPublishTimetoken()) .occupancy(presencePayload.getOccupancy()) @@ -144,8 +159,12 @@ private void processIncomingPayload(final SubscribeMessage message) { PNMessageResult pnMessageResult = PNMessageResult.builder() .message(extractedMessage) + // deprecated .actualChannel((subscriptionMatch != null) ? channel : null) .subscribedChannel(subscriptionMatch != null ? subscriptionMatch : channel) + // deprecated + .channel(channel) + .channelGroup(subscriptionMatch) .timetoken(publishMetaData.getPublishTimetoken()) .build(); diff --git a/src/test/java/com/pubnub/api/PubNubTest.java b/src/test/java/com/pubnub/api/PubNubTest.java index c73e749ea..90797efe5 100644 --- a/src/test/java/com/pubnub/api/PubNubTest.java +++ b/src/test/java/com/pubnub/api/PubNubTest.java @@ -91,7 +91,7 @@ public void GetVersionAndTimeStamp() throws PubNubException { pubnub = new PubNub(pnConfiguration); String version = pubnub.getVersion(); int timeStamp = pubnub.getTimestamp(); - Assert.assertEquals("4.0.9", version); + Assert.assertEquals("4.0.10", version); Assert.assertTrue(timeStamp > 0); }