From f08c481807f75a3fa53562beeb00bf8c1fd1cb62 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 27 Oct 2025 23:07:06 +0900 Subject: [PATCH] =?UTF-8?q?refactor(agora):=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=ED=8C=8C=EC=95=85=EC=9D=84=20=EC=A2=80=20=EB=8D=94=20=EC=89=BD?= =?UTF-8?q?=EA=B2=8C=20=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=9E=AC=EB=B0=B0=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/agora/Agora.kt | 142 ++++++++++-------- .../sodalive/live/room/chat/LiveRoomChat.kt | 4 - 2 files changed, 81 insertions(+), 65 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/agora/Agora.kt b/app/src/main/java/kr/co/vividnext/sodalive/agora/Agora.kt index bed12139..14b51379 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/agora/Agora.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/agora/Agora.kt @@ -35,62 +35,34 @@ class Agora( private fun initAgoraEngine() { try { - rtcEngine = RtcEngine.create( - context, - BuildConfig.AGORA_APP_ID, - rtcEventHandler - ) - - rtcEngine!!.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING) - rtcEngine!!.setAudioProfile( - Constants.AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO, - Constants.AUDIO_SCENARIO_GAME_STREAMING - ) - rtcEngine!!.enableAudio() - rtcEngine!!.enableAudioVolumeIndication(500, 3, true) - - rtmClient = RtmClient.createInstance( - context, - BuildConfig.AGORA_APP_ID, - rtmClientListener - ) + initRtcEngine() + initRtmClient() } catch (e: Exception) { e.printStackTrace() } } fun deInitAgoraEngine() { - if (rtcEngine != null) { - rtcEngine!!.leaveChannel() - - thread { - RtcEngine.destroy() - rtcEngine = null - } - } - - rtmChannel?.leave(null) - rtmChannel?.release() - rtmClient?.logout(null) + deInitRtcEngine() + deInitRtmChannelAndClient() } - fun inputChat(message: String) { - val rtmMessage = rtmClient!!.createMessage() - rtmMessage.text = message - - rtmChannel!!.sendMessage( - rtmMessage, - object : ResultCallback { - override fun onSuccess(p0: Void?) { - Logger.e("sendMessage - onSuccess") - } - - override fun onFailure(p0: ErrorInfo) { - Logger.e("sendMessage fail - ${p0.errorCode}") - Logger.e("sendMessage fail - ${p0.errorDescription}") - } - } + // region RtcEngine + @Throws(Exception::class) + private fun initRtcEngine() { + rtcEngine = RtcEngine.create( + context, + BuildConfig.AGORA_APP_ID, + rtcEventHandler ) + + rtcEngine!!.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING) + rtcEngine!!.setAudioProfile( + Constants.AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO, + Constants.AUDIO_SCENARIO_GAME_STREAMING + ) + rtcEngine!!.enableAudio() + rtcEngine!!.enableAudioVolumeIndication(500, 3, true) } fun joinRtcChannel(uid: Int, rtcToken: String, channelName: String) { @@ -102,6 +74,44 @@ class Agora( ) } + fun setClientRole(role: Int) { + rtcEngine!!.setClientRole(role) + } + + fun muteLocalAudioStream(muted: Boolean) { + rtcEngine?.muteLocalAudioStream(muted) + } + + fun muteAllRemoteAudioStreams(mute: Boolean) { + rtcEngine?.muteAllRemoteAudioStreams(mute) + } + + fun getConnectionState(): Int { + return rtcEngine!!.connectionState + } + + fun deInitRtcEngine() { + if (rtcEngine != null) { + rtcEngine!!.leaveChannel() + + thread { + RtcEngine.destroy() + rtcEngine = null + } + } + } + // endregion + + // region RtmClient + @Throws(Exception::class) + private fun initRtmClient() { + rtmClient = RtmClient.createInstance( + context, + BuildConfig.AGORA_APP_ID, + rtmClientListener + ) + } + fun createRtmChannelAndLogin( uid: String, rtmToken: String, @@ -134,6 +144,25 @@ class Agora( ) } + fun inputChat(message: String) { + val rtmMessage = rtmClient!!.createMessage() + rtmMessage.text = message + + rtmChannel!!.sendMessage( + rtmMessage, + object : ResultCallback { + override fun onSuccess(p0: Void?) { + Logger.e("sendMessage - onSuccess") + } + + override fun onFailure(p0: ErrorInfo) { + Logger.e("sendMessage fail - ${p0.errorCode}") + Logger.e("sendMessage fail - ${p0.errorDescription}") + } + } + ) + } + fun sendRawMessageToGroup( rawMessage: ByteArray, onSuccess: (() -> Unit)? = null, @@ -158,18 +187,6 @@ class Agora( ) } - fun setClientRole(role: Int) { - rtcEngine!!.setClientRole(role) - } - - fun muteLocalAudioStream(muted: Boolean) { - rtcEngine?.muteLocalAudioStream(muted) - } - - fun muteAllRemoteAudioStreams(mute: Boolean) { - rtcEngine?.muteAllRemoteAudioStreams(mute) - } - fun sendRawMessageToPeer( receiverUid: String, requestType: LiveRoomRequestType? = null, @@ -200,7 +217,10 @@ class Agora( return rtmChannel == null } - fun getConnectionState(): Int { - return rtcEngine!!.connectionState + fun deInitRtmChannelAndClient() { + rtmChannel?.leave(null) + rtmChannel?.release() + rtmClient?.logout(null) } + // endregion } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChat.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChat.kt index 27414374..db0cd649 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChat.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChat.kt @@ -5,7 +5,6 @@ import android.content.Context import android.graphics.Typeface import android.text.SpannableString import android.text.Spanned -import android.text.TextUtils import android.text.style.ForegroundColorSpan import android.text.style.StyleSpan import android.view.View @@ -21,11 +20,8 @@ import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.common.CustomTypefaceSpan import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.databinding.ItemLiveRoomChatBinding -import kr.co.vividnext.sodalive.databinding.ItemLiveRoomDonationStatusChatBinding import kr.co.vividnext.sodalive.databinding.ItemLiveRoomJoinChatBinding import kr.co.vividnext.sodalive.extensions.dpToPx -import kr.co.vividnext.sodalive.extensions.moneyFormat -import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationStatusResponse enum class LiveRoomChatType { @SerializedName("CHAT")