package services; import akka.actor.AbstractActor; import akka.japi.pf.ReceiveBuilder; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import models.LogMessage; import play.libs.Json; import play.mvc.WebSocket; /** * The broker between the WebSocket and the LogService. The UserService holds the connection and sends serialized * JSON data to the client. */ public class UserService extends AbstractActor { public UserService(WebSocket.Out<JsonNode> out) { receive(ReceiveBuilder .match(LogProtocol.Update.class, logUpdate -> { // Push message to client JsonNode json = Json.newObject() .put("type", "logupdate") .put("message", logUpdate.event.message) .put("level", logUpdate.event.level); out.write(json); }) .match(LogProtocol.History.class, logHistory -> { // Push log history to client ObjectNode json = Json.newObject() .put("type", "loghistory"); ArrayNode historyJson = json.putArray("history"); for (LogMessage event : logHistory.history) { ObjectNode jsonMessage = Json.newObject() .put("message", event.message) .put("level", event.level); historyJson.add(jsonMessage); } out.write(json); }) .build()); } }