refactor(dm): 채팅 저장소를 WebSocket 기준으로 전환한다
This commit is contained in:
@@ -186,9 +186,8 @@ import kr.co.vividnext.sodalive.v2.main.chat.data.ChatRoomApi
|
||||
import kr.co.vividnext.sodalive.v2.main.chat.data.ChatRoomRepository
|
||||
import kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModel
|
||||
import kr.co.vividnext.sodalive.v2.main.chat.dm.data.DmChatApi
|
||||
import kr.co.vividnext.sodalive.v2.main.chat.dm.data.DmChatEventClient
|
||||
import kr.co.vividnext.sodalive.v2.main.chat.dm.data.DmChatRealtimeClient
|
||||
import kr.co.vividnext.sodalive.v2.main.chat.dm.data.DmChatRepository
|
||||
import kr.co.vividnext.sodalive.v2.main.chat.dm.data.DmChatSocketClient
|
||||
import kr.co.vividnext.sodalive.v2.main.home.HomeCreatorRankingViewModel
|
||||
import kr.co.vividnext.sodalive.v2.main.home.HomeRecommendationViewModel
|
||||
import kr.co.vividnext.sodalive.v2.main.home.data.HomeCreatorRankingApi
|
||||
@@ -313,7 +312,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
|
||||
single { ApiBuilder().build(get(), CharacterCommentApi::class.java) }
|
||||
single { ApiBuilder().build(get(), OriginalWorkApi::class.java) }
|
||||
single { ApiBuilder().build(get<Retrofit>(named("agoraRetrofit")), V2vApi::class.java) }
|
||||
single<DmChatRealtimeClient> { DmChatEventClient(okHttpClient = get(), gson = get(), baseUrl = baseUrl) }
|
||||
single { DmChatSocketClient(okHttpClient = get(), gson = get(), baseUrl = baseUrl) }
|
||||
}
|
||||
|
||||
private val viewModelModule = module {
|
||||
@@ -462,7 +461,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
|
||||
factory { PointStatusRepository(get()) }
|
||||
factory { HomeRepository(get()) }
|
||||
factory { ChatRoomRepository(get()) }
|
||||
factory { DmChatRepository(api = get(), realtimeClient = get()) }
|
||||
factory { DmChatRepository(api = get(), socketClient = get()) }
|
||||
factory { HomeCreatorRankingRepository(get()) }
|
||||
factory { HomeRecommendationRepository(get()) }
|
||||
factory {
|
||||
|
||||
@@ -30,17 +30,4 @@ interface DmChatApi {
|
||||
@Query("cursor") cursor: Long?,
|
||||
@Query("limit") limit: Int = 20
|
||||
): Single<ApiResponse<DmChatMessagesPageResponse>>
|
||||
|
||||
@POST("/api/v2/user-creator-chat/rooms/{roomId}/messages/text")
|
||||
fun sendDmTextMessage(
|
||||
@Header("Authorization") authHeader: String,
|
||||
@Path("roomId") roomId: Long,
|
||||
@Body request: SendDmTextMessageRequest
|
||||
): Single<ApiResponse<SendDmChatMessageResponse>>
|
||||
|
||||
@POST("/api/v2/user-creator-chat/rooms/{roomId}/events/disconnect")
|
||||
fun disconnectRealtime(
|
||||
@Header("Authorization") authHeader: String,
|
||||
@Path("roomId") roomId: Long
|
||||
): Single<ApiResponse<Boolean>>
|
||||
}
|
||||
|
||||
@@ -42,15 +42,3 @@ data class DmChatMessageResponse(
|
||||
@SerializedName("senderNickname") val senderNickname: String,
|
||||
@SerializedName("senderProfileImageUrl") val senderProfileImageUrl: String
|
||||
)
|
||||
|
||||
@Keep
|
||||
data class SendDmTextMessageRequest(
|
||||
@SerializedName("textMessage") val textMessage: String
|
||||
)
|
||||
|
||||
@Keep
|
||||
data class SendDmChatMessageResponse(
|
||||
@SerializedName("message") val message: DmChatMessageResponse,
|
||||
@SerializedName("deliveredRealtime") val deliveredRealtime: Boolean,
|
||||
@SerializedName("pushSent") val pushSent: Boolean
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@ import kr.co.vividnext.sodalive.common.ApiResponse
|
||||
|
||||
class DmChatRepository(
|
||||
private val api: DmChatApi,
|
||||
private val realtimeClient: DmChatRealtimeClient? = null
|
||||
private val socketClient: DmChatSocketClient? = null
|
||||
) {
|
||||
fun createOrGetRoom(
|
||||
token: String,
|
||||
@@ -37,34 +37,31 @@ class DmChatRepository(
|
||||
limit = limit
|
||||
)
|
||||
|
||||
fun sendTextMessage(
|
||||
fun connectSocket(
|
||||
token: String,
|
||||
roomId: Long,
|
||||
textMessage: String
|
||||
): Single<ApiResponse<SendDmChatMessageResponse>> = api.sendDmTextMessage(
|
||||
authHeader = bearer(token),
|
||||
roomId = roomId,
|
||||
request = SendDmTextMessageRequest(textMessage = textMessage)
|
||||
)
|
||||
|
||||
fun disconnectRealtime(
|
||||
token: String,
|
||||
roomId: Long
|
||||
): Single<ApiResponse<Boolean>> = api.disconnectRealtime(
|
||||
authHeader = bearer(token),
|
||||
roomId = roomId
|
||||
)
|
||||
|
||||
fun connectRealtime(
|
||||
token: String,
|
||||
roomId: Long,
|
||||
listener: DmChatEventClient.Listener
|
||||
listener: DmChatSocketClient.Listener
|
||||
) {
|
||||
realtimeClient?.connect(token = token, roomId = roomId, listener = listener)
|
||||
socketClient?.connect(token = token, listener = listener)
|
||||
}
|
||||
|
||||
fun cancelRealtime() {
|
||||
realtimeClient?.cancel()
|
||||
fun sendJoinRoom(roomId: Long): Boolean = socketClient?.sendJoinRoom(roomId = roomId) ?: false
|
||||
|
||||
fun sendLeaveRoom(roomId: Long): Boolean = socketClient?.sendLeaveRoom(roomId = roomId) ?: false
|
||||
|
||||
fun sendSocketText(
|
||||
roomId: Long,
|
||||
requestId: String,
|
||||
textMessage: String
|
||||
): Boolean = socketClient?.sendText(
|
||||
roomId = roomId,
|
||||
requestId = requestId,
|
||||
textMessage = textMessage
|
||||
) ?: false
|
||||
|
||||
fun sendPing(): Boolean = socketClient?.sendPing() ?: false
|
||||
|
||||
fun closeSocket() {
|
||||
socketClient?.close()
|
||||
}
|
||||
|
||||
private fun bearer(token: String) = "Bearer $token"
|
||||
|
||||
Reference in New Issue
Block a user