Skip to content

Commit 5c484c4

Browse files
authored
Merge pull request #332 from pusher/SubscriptionCountEvent
Add Subscription count event
2 parents fc4dd05 + 1db3852 commit 5c484c4

File tree

6 files changed

+50
-4
lines changed

6 files changed

+50
-4
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# pusher-websocket-java changelog
22

3+
### Version 2.4.0 - 15th July 2022
4+
* Add support for Subscription count events
5+
36
### Version 2.3.0 - 4th July 2022
47
* Added support for user sign in and server to user messages
58
* Fixed issue with calling disconnect while the client is attempting reconnection

README.md

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ The pusher-java-client is available in Maven Central.
7474
<dependency>
7575
<groupId>com.pusher</groupId>
7676
<artifactId>pusher-java-client</artifactId>
77-
<version>2.3.0-beta</version>
77+
<version>2.4.0</version>
7878
</dependency>
7979
</dependencies>
8080
```
@@ -83,7 +83,7 @@ The pusher-java-client is available in Maven Central.
8383

8484
```groovy
8585
dependencies {
86-
compile 'com.pusher:pusher-java-client:2.3.0-beta'
86+
compile 'com.pusher:pusher-java-client:2.4.0'
8787
}
8888
```
8989

@@ -256,6 +256,19 @@ Channel channel = pusher.subscribe("my-channel", new ChannelEventListener() {
256256

257257
// Other ChannelEventListener methods
258258
});
259+
```
260+
If you wish to be informed for subscription count events, use the `bind` function to listen to event type `pusher:subscription_count`:
261+
262+
```java
263+
Channel channel = pusher.subscribe("my-channel");
264+
channel.bind("pusher:subscription_count", new SubscriptionEventListener() {
265+
@Override
266+
public void onEvent(PusherEvent event) {
267+
System.out.println("Received event with data: " + event.toString());
268+
System.out.println("Subscription Count is: " + channel.getCount());
269+
}
270+
});
271+
259272
```
260273

261274
### Private channels

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def getProperty = { property ->
2626
}
2727

2828
group = "com.pusher"
29-
version = "2.3.0-beta"
29+
version = "2.4.0"
3030
sourceCompatibility = "1.8"
3131
targetCompatibility = "1.8"
3232

src/main/java/com/pusher/client/channel/impl/BaseChannel.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.HashMap;
44
import java.util.HashSet;
5-
import java.util.LinkedHashMap;
65
import java.util.Map;
76
import java.util.Set;
87

@@ -11,19 +10,23 @@
1110
import com.google.gson.GsonBuilder;
1211
import com.pusher.client.channel.*;
1312
import com.pusher.client.channel.impl.message.SubscribeMessage;
13+
import com.pusher.client.channel.impl.message.SubscriptionCountData;
1414
import com.pusher.client.channel.impl.message.UnsubscribeMessage;
1515
import com.pusher.client.util.Factory;
1616

1717
public abstract class BaseChannel implements InternalChannel {
1818
protected final Gson GSON;
1919
private static final String INTERNAL_EVENT_PREFIX = "pusher_internal:";
2020
protected static final String SUBSCRIPTION_SUCCESS_EVENT = "pusher_internal:subscription_succeeded";
21+
protected static final String SUBSCRIPTION_COUNT_EVENT = "pusher_internal:subscription_count";
22+
protected static final String PUBLIC_SUBSCRIPTION_COUNT_EVENT = "pusher:subscription_count";
2123
private Set<SubscriptionEventListener> globalListeners = new HashSet<SubscriptionEventListener>();
2224
private final Map<String, Set<SubscriptionEventListener>> eventNameToListenerMap = new HashMap<String, Set<SubscriptionEventListener>>();
2325
protected volatile ChannelState state = ChannelState.INITIAL;
2426
private ChannelEventListener eventListener;
2527
private final Factory factory;
2628
private final Object lock = new Object();
29+
private Integer subscriptionCount;
2730

2831
public BaseChannel(final Factory factory) {
2932
GsonBuilder gsonBuilder = new GsonBuilder();
@@ -37,6 +40,11 @@ public BaseChannel(final Factory factory) {
3740
@Override
3841
abstract public String getName();
3942

43+
@Override
44+
public Integer getCount() {
45+
return subscriptionCount;
46+
}
47+
4048
@Override
4149
public void bind(final String eventName, final SubscriptionEventListener listener) {
4250
validateArguments(eventName, listener);
@@ -112,6 +120,8 @@ public PusherEvent prepareEvent(String event, String message) {
112120
public void onMessage(String event, String message) {
113121
if (event.equals(SUBSCRIPTION_SUCCESS_EVENT)) {
114122
updateState(ChannelState.SUBSCRIBED);
123+
}else if (event.equals(SUBSCRIPTION_COUNT_EVENT)) {
124+
handleSubscriptionCountEvent(message);
115125
} else {
116126
final Set<SubscriptionEventListener> listeners = getInterestedListeners(event);
117127
if (listeners != null) {
@@ -184,6 +194,12 @@ private void validateArguments(final String eventName, final SubscriptionEventLi
184194
}
185195
}
186196

197+
private void handleSubscriptionCountEvent(final String message) {
198+
final SubscriptionCountData subscriptionCountMessage = GSON.fromJson(message, SubscriptionCountData.class);
199+
subscriptionCount = subscriptionCountMessage.getCount();
200+
onMessage(PUBLIC_SUBSCRIPTION_COUNT_EVENT, message);
201+
}
202+
187203
protected Set<SubscriptionEventListener> getInterestedListeners(String event) {
188204
synchronized (lock) {
189205
Set<SubscriptionEventListener> listeners = new HashSet<SubscriptionEventListener>();

src/main/java/com/pusher/client/channel/impl/InternalChannel.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ public interface InternalChannel extends Channel, Comparable<InternalChannel> {
1111

1212
String toUnsubscribeMessage();
1313

14+
Integer getCount();
15+
1416
PusherEvent prepareEvent(String event, String message);
1517

1618
void onMessage(String event, String message);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.pusher.client.channel.impl.message;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
5+
public class SubscriptionCountData {
6+
@SerializedName("subscription_count")
7+
public Integer count;
8+
9+
public int getCount(){
10+
return count;
11+
}
12+
}

0 commit comments

Comments
 (0)