package io.netty.protocol.wamp.server; import com.fasterxml.jackson.core.TreeNode; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; import io.netty.protocol.wamp.messages.EventMessage; import java.util.Collections; import java.util.Set; import java.util.WeakHashMap; public class Topic { public final String topicURI; //private final Set<Session> subscribers = Collections.newSetFromMap(Collections.synchronizedMap(new WeakHashMap<Session, Boolean>())); private final Set<Session> subscribers = Collections.synchronizedSet(Collections.newSetFromMap(new WeakHashMap<Session, Boolean>())); private Boolean notify = false; public Topic(final String topicURI) { this.topicURI = topicURI; } public Topic(final String topicURI, final Boolean notify) { this.topicURI = topicURI; this.notify = notify; } public void add(Session session) { if (!subscribers.add(session)) return; if (notify) post(new ObjectNode(JsonNodeFactory.instance).put("partyJoined", session.id), session); } public void remove(final Session session) { if (!subscribers.remove(session)) return; if (notify) post(new ObjectNode(JsonNodeFactory.instance).put("partyLeft", session.id), session); } public void post(final TreeNode event, final Session who) { EventMessage msg = new EventMessage(topicURI, event); synchronized (subscribers) { for (Session s : subscribers) s.write(msg); } } }