Skip to content

Commit

Permalink
♻️ 重構 WebSocketEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
frankvicky committed Dec 16, 2023
1 parent 80abb0a commit 51df021
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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)
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -15,4 +15,8 @@ data class PlayerJoinedRoomEvent(
val nickname: String,
)
}


override fun getEventData(): Any = data

}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -15,4 +15,8 @@ data class PlayerLeavedRoomEvent(
val nickname: String,
)
}


override fun getEventData(): Any = data

}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -15,4 +15,6 @@ data class PlayerReadinessChangedEvent(
val nickname: String,
)
}

override fun getEventData(): Any = data
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package tw.waterballsa.gaas.events

interface SocketIoResponseData {
fun getEventData(): Any
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package tw.waterballsa.gaas.events

import tw.waterballsa.gaas.events.enums.EventMessageType

abstract class SocketIoResponseEvent(val type: EventMessageType) : DomainEvent(), SocketIoResponseData
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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<DomainEvent>) {

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()) }
}

}
}

0 comments on commit 51df021

Please sign in to comment.