package ws.wamplay.models; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.UUID; import com.fasterxml.jackson.databind.JsonNode; import play.Logger; import play.Logger.ALogger; import play.mvc.WebSocket; public class WAMPlayClient { static ALogger log = Logger.of(WAMPlayClient.class); final Set<String> topics; final Map<String, String> prefixes; final String ID; final WebSocket.Out<JsonNode> out; JsonNode lastSent; public WAMPlayClient(WebSocket.Out<JsonNode> out) { this.out = out; topics = new HashSet<String>(); prefixes = new HashMap<String, String>(); ID = UUID.randomUUID().toString(); } public void send(JsonNode response) { // Just for testing. if (out == null) { lastSent = response; return; } try { out.write(response); } catch (Exception e) { log.error("Cannot send, client dead!"); } } public void setPrefix(String prefix, String URI) { prefixes.put(prefix, URI); } private String convertCURIEToURI(String curie) { // TODO // if (prefixes.containsKey(prefix)){ // return prefixes.get(prefix); // } return curie; } public void subscribe(String topic) { topics.add(convertCURIEToURI(topic)); } public boolean isSubscribed(String topic) { return topics.contains(convertCURIEToURI(topic)); } public void unsubscribe(String topic) { topics.remove(convertCURIEToURI(topic)); } public String getSessionID() { return this.ID; } public void kill() { if (out != null) { out.close(); } } public JsonNode lastMessage() { return lastSent; } }