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