feat(api): Enhance event mappers to include GameLobby in JSON serialization
This commit is contained in:
@@ -26,6 +26,7 @@ class UserSession(val user: User, val host: Boolean, val gameLobby: GameLobby) e
|
||||
else canInteract = Some(InteractionType.Card)
|
||||
case _ =>
|
||||
}
|
||||
websocketActor.foreach(_.transmitEventToClient(event))
|
||||
}
|
||||
|
||||
override def id: UUID = user.id
|
||||
|
||||
@@ -61,6 +61,10 @@ class UserWebsocketActor(
|
||||
))
|
||||
return
|
||||
}
|
||||
val statusOpt = (json \ "status").asOpt[String]
|
||||
if (statusOpt.isDefined) {
|
||||
return
|
||||
}
|
||||
val event = eventOpt.get
|
||||
val data = (json \ "data").asOpt[JsObject].getOrElse(Json.obj())
|
||||
val result = Try {
|
||||
@@ -83,12 +87,11 @@ class UserWebsocketActor(
|
||||
}
|
||||
|
||||
def transmitJsonToClient(jsonObj: JsObject): Unit = {
|
||||
out ! jsonObj.toString()
|
||||
transmitTextToClient(jsonObj.toString())
|
||||
}
|
||||
|
||||
def transmitEventToClient(event: SimpleEvent): Unit = {
|
||||
val jsonString = WebsocketEventMapper.toJson(event)
|
||||
out ! jsonString
|
||||
transmitJsonToClient(WebsocketEventMapper.toJson(event))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package util
|
||||
|
||||
import de.knockoutwhist.utils.events.SimpleEvent
|
||||
import logic.game.GameLobby
|
||||
import play.api.libs.json.{JsValue, Json}
|
||||
import tools.jackson.databind.json.JsonMapper
|
||||
import tools.jackson.module.scala.ScalaModule
|
||||
@@ -24,10 +25,15 @@ object WebsocketEventMapper {
|
||||
// Register all custom mappers here
|
||||
registerCustomMapper(ReceivedHandEventMapper)
|
||||
|
||||
def toJson(obj: SimpleEvent): JsValue = {
|
||||
val data = if (customMappers.contains(obj.id)) {
|
||||
return customMappers(obj.id).toJson(obj)
|
||||
}else Json.parse(mapper.writeValueAsString(obj))
|
||||
def toJson(obj: SimpleEvent, gameLobby: GameLobby): JsValue = {
|
||||
val data: Option[JsValue] = if (customMappers.contains(obj.id)) {
|
||||
Some(customMappers(obj.id).toJson(obj))
|
||||
}else {
|
||||
None
|
||||
}
|
||||
if (data.isEmpty) {
|
||||
return Json.obj()
|
||||
}
|
||||
Json.obj(
|
||||
"id" -> ("request-" + java.util.UUID.randomUUID().toString),
|
||||
"event" -> obj.id,
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
package util.mapper
|
||||
|
||||
import de.knockoutwhist.events.player.ReceivedHandEvent
|
||||
import logic.game.GameLobby
|
||||
import play.api.libs.json.{JsArray, JsObject, Json}
|
||||
import util.WebUIUtils
|
||||
|
||||
object ReceivedHandEventMapper extends SimpleEventMapper[ReceivedHandEvent] {
|
||||
|
||||
override def id: String = "ReceivedHandEvent"
|
||||
override def toJson(event: ReceivedHandEvent): JsObject = {
|
||||
override def toJson(event: ReceivedHandEvent, gameLobby: GameLobby): JsObject = {
|
||||
Json.obj(
|
||||
"dog" -> event.player.isInDogLife,
|
||||
"hand" -> event.player.currentHand().map(hand => WebUIUtils.handToJson(hand))
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package util.mapper
|
||||
|
||||
import de.knockoutwhist.utils.events.SimpleEvent
|
||||
import logic.game.GameLobby
|
||||
import play.api.libs.json.JsObject
|
||||
|
||||
trait SimpleEventMapper[T <: SimpleEvent] {
|
||||
|
||||
def id: String
|
||||
def toJson(event: T): JsObject
|
||||
def toJson(event: T, gameLobby: GameLobby): JsObject
|
||||
|
||||
}
|
||||
|
||||
@@ -41,8 +41,8 @@ function setupSocketHandlers(socket) {
|
||||
|
||||
if (id && eventType) {
|
||||
const handler = handlers.get(eventType);
|
||||
const sendResponse = (respData) => {
|
||||
const response = {id: id, event: eventType, data: respData === undefined ? {} : respData};
|
||||
const sendResponse = (result) => {
|
||||
const response = {id: id, event: eventType, status: result};
|
||||
if (socket && socket.readyState === WebSocket.OPEN) {
|
||||
socket.send(JSON.stringify(response));
|
||||
} else {
|
||||
@@ -58,10 +58,10 @@ function setupSocketHandlers(socket) {
|
||||
|
||||
try {
|
||||
Promise.resolve(handler(data === undefined ? {} : data))
|
||||
.then(result => sendResponse(result))
|
||||
.catch(err => sendResponse({error: err?.message ? err.message : String(err)}));
|
||||
.then(_ => sendResponse("success"))
|
||||
.catch(_ => sendResponse("error"));
|
||||
} catch (err) {
|
||||
sendResponse({error: err?.message ? err.message : String(err)});
|
||||
sendResponse("error");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user