diff --git a/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/EndGameUseCase.kt b/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/EndGameUseCase.kt index 20a6d796..0a514125 100644 --- a/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/EndGameUseCase.kt +++ b/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/EndGameUseCase.kt @@ -5,7 +5,6 @@ import tw.waterballsa.gaas.application.repositories.RoomRepository import tw.waterballsa.gaas.application.repositories.UserRepository import tw.waterballsa.gaas.domain.Room import tw.waterballsa.gaas.events.EndedGameEvent -import tw.waterballsa.gaas.events.EndedGameEvent.Data import tw.waterballsa.gaas.events.enums.EventMessageType.GAME_ENDED import javax.inject.Named @@ -31,6 +30,6 @@ class EndGameUseCase( fun Room.endGameByGameService(): EndedGameEvent { val type = GAME_ENDED - val data = Data(roomId!!.value) + val data = EndedGameEvent.Data(roomId!!.value) return EndedGameEvent(type, data) } diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/EndedGameEvent.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/EndedGameEvent.kt index adff9db7..11b645cc 100644 --- a/domain/src/main/kotlin/tw/waterballsa/gaas/events/EndedGameEvent.kt +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/EndedGameEvent.kt @@ -2,11 +2,14 @@ package tw.waterballsa.gaas.events import tw.waterballsa.gaas.events.enums.EventMessageType -data class EndedGameEvent( - val type: EventMessageType, - val data: Data, -) : DomainEvent() { +class EndedGameEvent( + type: EventMessageType, + val data: Data +) : SocketIoResponseEvent(type) { data class Data( val roomId: String, ) + + + override fun getEventData(): Any = data } diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerJoinedRoomEvent.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerJoinedRoomEvent.kt index f69ce08d..4bf6c971 100644 --- a/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerJoinedRoomEvent.kt +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerJoinedRoomEvent.kt @@ -2,10 +2,10 @@ package tw.waterballsa.gaas.events import tw.waterballsa.gaas.events.enums.EventMessageType -data class PlayerJoinedRoomEvent( - val type: EventMessageType, - val data: Data, -) : DomainEvent() { +class PlayerJoinedRoomEvent( + type: EventMessageType, + val data: Data +) : SocketIoResponseEvent(type) { data class Data( val user: Player, val roomId: String, @@ -15,4 +15,8 @@ data class PlayerJoinedRoomEvent( val nickname: String, ) } + + + override fun getEventData(): Any = data + } diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerLeavedRoomEvent.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerLeavedRoomEvent.kt index a09a22a5..6a2adbbf 100644 --- a/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerLeavedRoomEvent.kt +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerLeavedRoomEvent.kt @@ -2,10 +2,10 @@ package tw.waterballsa.gaas.events import tw.waterballsa.gaas.events.enums.EventMessageType -data class PlayerLeavedRoomEvent( - val type: EventMessageType, - val data: Data, -) : DomainEvent() { +class PlayerLeavedRoomEvent( + type: EventMessageType, + val data: Data +) : SocketIoResponseEvent(type) { data class Data( val user: Player, val roomId: String, @@ -15,4 +15,8 @@ data class PlayerLeavedRoomEvent( val nickname: String, ) } + + + override fun getEventData(): Any = data + } diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerReadinessChangedEvent.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerReadinessChangedEvent.kt index 19b9c270..d1ba4cad 100644 --- a/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerReadinessChangedEvent.kt +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerReadinessChangedEvent.kt @@ -2,10 +2,10 @@ package tw.waterballsa.gaas.events import tw.waterballsa.gaas.events.enums.EventMessageType -data class PlayerReadinessChangedEvent( - val type: EventMessageType, - val data: Data, -) : DomainEvent() { +class PlayerReadinessChangedEvent( + type: EventMessageType, + val data: Data +) : SocketIoResponseEvent(type) { data class Data( val user: User, val roomId: String, @@ -15,4 +15,6 @@ data class PlayerReadinessChangedEvent( val nickname: String, ) } + + override fun getEventData(): Any = data } diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/SocketIoResponseData.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/SocketIoResponseData.kt new file mode 100644 index 00000000..7da185d1 --- /dev/null +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/SocketIoResponseData.kt @@ -0,0 +1,5 @@ +package tw.waterballsa.gaas.events + +interface SocketIoResponseData { + fun getEventData(): Any +} diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/SocketIoResponseEvent.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/SocketIoResponseEvent.kt new file mode 100644 index 00000000..99dbf6d1 --- /dev/null +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/SocketIoResponseEvent.kt @@ -0,0 +1,5 @@ +package tw.waterballsa.gaas.events + +import tw.waterballsa.gaas.events.enums.EventMessageType + +abstract class SocketIoResponseEvent(val type: EventMessageType) : DomainEvent(), SocketIoResponseData diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/StartedGameEvent.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/StartedGameEvent.kt index a0f7ca5c..ebd45c75 100644 --- a/domain/src/main/kotlin/tw/waterballsa/gaas/events/StartedGameEvent.kt +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/StartedGameEvent.kt @@ -3,13 +3,15 @@ package tw.waterballsa.gaas.events import tw.waterballsa.gaas.domain.Room import tw.waterballsa.gaas.events.enums.EventMessageType -data class StartedGameEvent( - val type: EventMessageType, - val data: Data, -) : DomainEvent() { - +class StartedGameEvent( + type: EventMessageType, + val data: Data +) : SocketIoResponseEvent(type) { data class Data( val gameUrl: String, val roomId: Room.Id, ) + + + override fun getEventData(): Any = data } diff --git a/spring/src/main/kotlin/tw/waterballsa/gaas/spring/eventbus/WebSocketEventBus.kt b/spring/src/main/kotlin/tw/waterballsa/gaas/spring/eventbus/WebSocketEventBus.kt index fd3415e9..8d7cd509 100644 --- a/spring/src/main/kotlin/tw/waterballsa/gaas/spring/eventbus/WebSocketEventBus.kt +++ b/spring/src/main/kotlin/tw/waterballsa/gaas/spring/eventbus/WebSocketEventBus.kt @@ -7,8 +7,7 @@ import org.springframework.stereotype.Component import tw.waterballsa.gaas.application.eventbus.EventBus import tw.waterballsa.gaas.events.* import tw.waterballsa.gaas.spring.controllers.viewmodel.SocketioViewModel - - +import kotlin.reflect.safeCast @Component class WebSocketEventBus( @@ -17,38 +16,10 @@ class WebSocketEventBus( private val logger: Logger = LoggerFactory.getLogger(WebSocketEventBus::class.java) - lateinit var viewModel: SocketioViewModel - - // TODO broadcast the events! override fun broadcast(events: Collection) { - - for (event in events) { - if (event is PlayerJoinedRoomEvent) { - val data = event.data - val type = event.type - socketIOServer.broadcastOperations.sendEvent(type.toString(), data) - } else if(event is PlayerLeavedRoomEvent){ - val data = event.data - val type = event.type - socketIOServer.broadcastOperations.sendEvent(type.toString(), data) - } else if(event is PlayerReadinessChangedEvent){ - val data = event.data - val type = event.type - socketIOServer.broadcastOperations.sendEvent(type.toString(), data) - } else if(event is StartedGameEvent){ - val data = event.data - val type = event.type - socketIOServer.broadcastOperations.sendEvent(type.toString(), data) - } else if(event is UserUpdatedEvent){ -// val data = event.data -// val type = event.type -// socketIOServer.broadcastOperations.sendEvent(type.toString(), data) - } - - } - - + events.asSequence() + .mapNotNull { SocketIoResponseEvent::class.safeCast(it) } + .forEach { socketIOServer.broadcastOperations.sendEvent(it.type.toString(), it.getEventData()) } } - -} \ No newline at end of file +}