fix(user-creator-chat): Redis 전달 예외 fallback 범위를 좁힌다
This commit is contained in:
@@ -29,8 +29,10 @@ import kr.co.vividnext.sodalive.v2.usercreatorchat.repository.UserCreatorChatRoo
|
||||
import kr.co.vividnext.sodalive.v2.usercreatorchat.websocket.UserCreatorChatPresenceService
|
||||
import kr.co.vividnext.sodalive.v2.usercreatorchat.websocket.UserCreatorChatRoomMessageBroker
|
||||
import kr.co.vividnext.sodalive.v2.usercreatorchat.websocket.UserCreatorChatWebSocketMessageType
|
||||
import org.slf4j.LoggerFactory
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.context.ApplicationEventPublisher
|
||||
import org.springframework.dao.DataAccessException
|
||||
import org.springframework.data.domain.PageRequest
|
||||
import org.springframework.stereotype.Service
|
||||
import org.springframework.transaction.annotation.Transactional
|
||||
@@ -119,14 +121,8 @@ class UserCreatorChatService(
|
||||
val message = saveTextMessage(context, textMessage)
|
||||
val senderMessage = toMessageItemDto(message, sender)
|
||||
val opponent = context.opponentParticipant.member
|
||||
if (presenceService.hasPresence(roomId, opponent.id!!)) {
|
||||
val opponentMessage = toMessageItemDto(message, opponent)
|
||||
roomMessageBroker.publish(
|
||||
roomId = roomId,
|
||||
memberId = opponent.id!!,
|
||||
payload = websocketMessagePayload(UserCreatorChatWebSocketMessageType.MESSAGE, roomId, opponentMessage)
|
||||
)
|
||||
} else {
|
||||
val deliveredRealtime = deliverRealtime(message, opponent)
|
||||
if (!deliveredRealtime) {
|
||||
publishMessagePush(message, sender, opponent)
|
||||
}
|
||||
return senderMessage
|
||||
@@ -190,18 +186,8 @@ class UserCreatorChatService(
|
||||
): SendUserCreatorChatMessageResponse {
|
||||
val opponent = opponentParticipant.member
|
||||
val item = toMessageItemDto(message, member)
|
||||
val opponentPresent = presenceService.hasPresence(message.chatRoom.id!!, opponent.id!!)
|
||||
if (opponentPresent) {
|
||||
val opponentMessage = toMessageItemDto(message, opponent)
|
||||
roomMessageBroker.publish(
|
||||
roomId = message.chatRoom.id!!,
|
||||
memberId = opponent.id!!,
|
||||
payload = websocketMessagePayload(
|
||||
UserCreatorChatWebSocketMessageType.MESSAGE,
|
||||
message.chatRoom.id!!,
|
||||
opponentMessage
|
||||
)
|
||||
)
|
||||
val deliveredRealtime = deliverRealtime(message, opponent)
|
||||
if (deliveredRealtime) {
|
||||
return SendUserCreatorChatMessageResponse(message = item, deliveredRealtime = true, pushSent = false)
|
||||
}
|
||||
|
||||
@@ -209,6 +195,31 @@ class UserCreatorChatService(
|
||||
return SendUserCreatorChatMessageResponse(message = item, deliveredRealtime = false, pushSent = true)
|
||||
}
|
||||
|
||||
private fun deliverRealtime(message: UserCreatorChatMessage, opponent: Member): Boolean {
|
||||
val roomId = message.chatRoom.id!!
|
||||
val opponentId = opponent.id!!
|
||||
return try {
|
||||
if (!presenceService.hasPresence(roomId, opponentId)) {
|
||||
return false
|
||||
}
|
||||
val opponentMessage = toMessageItemDto(message, opponent)
|
||||
roomMessageBroker.publish(
|
||||
roomId = roomId,
|
||||
memberId = opponentId,
|
||||
payload = websocketMessagePayload(UserCreatorChatWebSocketMessageType.MESSAGE, roomId, opponentMessage)
|
||||
)
|
||||
true
|
||||
} catch (e: DataAccessException) {
|
||||
logger.warn(
|
||||
"유저-크리에이터 채팅 실시간 전달 Redis 오류로 푸시 fail-open 처리: roomId={}, opponentId={}, cause={}",
|
||||
roomId,
|
||||
opponentId,
|
||||
e.message
|
||||
)
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
private fun publishMessagePush(message: UserCreatorChatMessage, sender: Member, opponent: Member) {
|
||||
val messageKey = if (message.messageType == UserCreatorChatMessageType.VOICE) {
|
||||
"message.fcm.voice_received"
|
||||
@@ -287,4 +298,8 @@ class UserCreatorChatService(
|
||||
val senderParticipant: UserCreatorChatParticipant,
|
||||
val opponentParticipant: UserCreatorChatParticipant
|
||||
)
|
||||
|
||||
companion object {
|
||||
private val logger = LoggerFactory.getLogger(UserCreatorChatService::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user