Skip to content

Commit

Permalink
feat: [websocket] 看見其他玩家加入/離開(#154)" (#183)
Browse files Browse the repository at this point in the history
* feat: [websocket] 看見其他玩家加入/離開(#154)"

* fix: 第一次code review修正
  • Loading branch information
cooper-car authored Oct 16, 2023
1 parent 4086edc commit 863ab3e
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -27,6 +31,9 @@ class JoinRoomUsecase(
validateRoomPassword(password)
ensureThatPlayerNotJoinFullRoom()
joinPlayer(player)

val playerJoinedRoomEvent = room.joinRoomEvent(player.id.value, player.nickname)
eventBus.broadcast(playerJoinedRoomEvent)
}
}

Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
)
}
}
Original file line number Diff line number Diff line change
@@ -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
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
}

0 comments on commit 863ab3e

Please sign in to comment.