diff --git a/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/JoinRoomUsecase.kt b/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/JoinRoomUsecase.kt index 8b5f323f..19825467 100644 --- a/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/JoinRoomUsecase.kt +++ b/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/JoinRoomUsecase.kt @@ -9,6 +9,10 @@ import tw.waterballsa.gaas.exceptions.PlatformException import tw.waterballsa.gaas.exceptions.enums.PlatformError.PLAYER_JOIN_ROOM_ERROR import tw.waterballsa.gaas.exceptions.enums.PlatformError.ROOM_FULL import tw.waterballsa.gaas.exceptions.enums.PlatformError.ROOM_PASSWORD_INCORRECT +import tw.waterballsa.gaas.events.PlayerJoinedRoomEvent +import tw.waterballsa.gaas.events.PlayerJoinedRoomEvent.Data +import tw.waterballsa.gaas.events.PlayerJoinedRoomEvent.Data.Player +import tw.waterballsa.gaas.events.enums.EventMessageType.USER_JOINED import javax.inject.Named @Named @@ -27,6 +31,9 @@ class JoinRoomUsecase( validateRoomPassword(password) ensureThatPlayerNotJoinFullRoom() joinPlayer(player) + + val playerJoinedRoomEvent = room.joinRoomEvent(player.id.value, player.nickname) + eventBus.broadcast(playerJoinedRoomEvent) } } @@ -57,6 +64,15 @@ class JoinRoomUsecase( return roomRepository.update(this) } + private fun Room.joinRoomEvent( + playerId: String, + nickname: String + ) : PlayerJoinedRoomEvent{ + val user = Player(playerId, nickname) + val data = Data(user, roomId!!.value) + return PlayerJoinedRoomEvent(USER_JOINED, data) + } + data class Request( val roomId: String, val userIdentity: String, diff --git a/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/LeaveRoomUsecase.kt b/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/LeaveRoomUsecase.kt index c1db801c..63ec471b 100644 --- a/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/LeaveRoomUsecase.kt +++ b/application/src/main/kotlin/tw/waterballsa/gaas/application/usecases/LeaveRoomUsecase.kt @@ -3,6 +3,11 @@ package tw.waterballsa.gaas.application.usecases import tw.waterballsa.gaas.application.eventbus.EventBus 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.PlayerLeavedRoomEvent +import tw.waterballsa.gaas.events.PlayerLeavedRoomEvent.Data +import tw.waterballsa.gaas.events.PlayerLeavedRoomEvent.Data.Player +import tw.waterballsa.gaas.events.enums.EventMessageType.USER_LEFT import javax.inject.Named @Named @@ -21,9 +26,21 @@ class LeaveRoomUsecase( room.isEmpty() -> roomRepository.closeRoom(room) else -> roomRepository.leaveRoom(room) } + + val playerLeavedRoomEvent = room.leaveRoomEvent(player.id.value, player.nickname) + eventBus.broadcast(playerLeavedRoomEvent) } } + private fun Room.leaveRoomEvent( + playerId: String, + nickname: String + ) : PlayerLeavedRoomEvent { + val user = Player(playerId, nickname) + val data = Data(user, roomId!!.value) + return PlayerLeavedRoomEvent(USER_LEFT, data) + } + data class Request( val roomId: String, val userIdentity: String, diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerJoinedRoomEvent.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerJoinedRoomEvent.kt new file mode 100644 index 00000000..1b6abe32 --- /dev/null +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerJoinedRoomEvent.kt @@ -0,0 +1,18 @@ +package tw.waterballsa.gaas.events + +import tw.waterballsa.gaas.events.enums.EventMessageType + +data class PlayerJoinedRoomEvent( + val type: EventMessageType, + val data: Data +) : DomainEvent() { + data class Data( + val user: Player, + val roomId: String + ) { + data class Player( + val id: String, + val nickname: String + ) + } +} \ No newline at end of file diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerLeavedRoomEvent.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerLeavedRoomEvent.kt new file mode 100644 index 00000000..b65f3742 --- /dev/null +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/PlayerLeavedRoomEvent.kt @@ -0,0 +1,18 @@ +package tw.waterballsa.gaas.events + +import tw.waterballsa.gaas.events.enums.EventMessageType + +data class PlayerLeavedRoomEvent( + val type: EventMessageType, + val data: Data +) : DomainEvent() { + data class Data( + val user: Player, + val roomId: String + ) { + data class Player( + val id: String, + val nickname: String + ) + } +} \ No newline at end of file diff --git a/domain/src/main/kotlin/tw/waterballsa/gaas/events/enums/EventMessageType.kt b/domain/src/main/kotlin/tw/waterballsa/gaas/events/enums/EventMessageType.kt index 6101c182..5e69f113 100644 --- a/domain/src/main/kotlin/tw/waterballsa/gaas/events/enums/EventMessageType.kt +++ b/domain/src/main/kotlin/tw/waterballsa/gaas/events/enums/EventMessageType.kt @@ -9,4 +9,6 @@ enum class EventMessageType( GAME_STARTED("GAME_STARTED"), USER_READY("USER_READY"), USER_NOT_READY("USER_NOT_READY"), + USER_JOINED("USER_JOINED"), + USER_LEFT("USER_LEFT"), }