fix(live-room): 잘못 사용 되어 효과가 없는 mutex 제거

This commit is contained in:
2025-11-06 13:25:15 +09:00
parent 0f30cf3880
commit 48eb959ab2
2 changed files with 20 additions and 31 deletions

View File

@@ -12,9 +12,9 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.Matrix
import android.graphics.Paint import android.graphics.Paint
import android.graphics.Path import android.graphics.Path
import android.graphics.Matrix
import android.graphics.Rect import android.graphics.Rect
import android.graphics.Typeface import android.graphics.Typeface
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
@@ -47,7 +47,6 @@ import androidx.core.content.ContextCompat
import androidx.core.graphics.toColorInt import androidx.core.graphics.toColorInt
import androidx.core.graphics.withTranslation import androidx.core.graphics.withTranslation
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import coil.transform.CircleCropTransformation import coil.transform.CircleCropTransformation
@@ -70,7 +69,6 @@ import io.agora.rtm.RtmEventListener
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import kotlinx.coroutines.launch
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.agora.Agora import kr.co.vividnext.sodalive.agora.Agora
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
@@ -1408,7 +1406,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
) )
) )
invalidateChat() invalidateChat()
lifecycleScope.launch { viewModel.addDonationCan(can) } viewModel.addDonationCan(can)
addSignature(signature) addSignature(signature)
} }
}, },
@@ -1656,9 +1654,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
) )
) )
invalidateChat() invalidateChat()
lifecycleScope.launch {
viewModel.addDonationCan(message.can) viewModel.addDonationCan(message.can)
}
if (message.signature != null) { if (message.signature != null) {
addSignature(message.signature) addSignature(message.signature)
@@ -1684,27 +1680,23 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
) )
) )
invalidateChat() invalidateChat()
lifecycleScope.launch {
viewModel.addDonationCan(message.can) viewModel.addDonationCan(message.can)
} }
} }
}
LiveRoomChatRawMessageType.HEART_DONATION -> { LiveRoomChatRawMessageType.HEART_DONATION -> {
handler.post { handler.post {
addHeartMessage(nickname) addHeartMessage(nickname)
viewModel.addHeartDonation()
addHeartAnimation() addHeartAnimation()
lifecycleScope.launch { viewModel.addHeartDonation() }
} }
} }
LiveRoomChatRawMessageType.BIG_HEART_DONATION -> { LiveRoomChatRawMessageType.BIG_HEART_DONATION -> {
handler.post { handler.post {
addHeartMessage(nickname) addHeartMessage(nickname)
addBigHeartAnimation()
lifecycleScope.launch {
viewModel.addHeartDonation(heartCount = message.can) viewModel.addHeartDonation(heartCount = message.can)
} addBigHeartAnimation()
} }
} }
@@ -2076,7 +2068,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
handler.post { handler.post {
addHeartMessage(nickname) addHeartMessage(nickname)
addHeartAnimation() addHeartAnimation()
lifecycleScope.launch { viewModel.addHeartDonation() } viewModel.addHeartDonation()
} }
}, },
onFailure = { onFailure = {
@@ -2129,7 +2121,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
handler.post { handler.post {
addHeartMessage(nickname) addHeartMessage(nickname)
addBigHeartAnimation() addBigHeartAnimation()
lifecycleScope.launch { viewModel.addHeartDonation(100) } viewModel.addHeartDonation(100)
} }
}, },
onFailure = { onFailure = {
@@ -2566,7 +2558,8 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
val v0 = 100f + (1500f * Math.random().toFloat()) // 200..3000 px/s (초기 속도) val v0 = 100f + (1500f * Math.random().toFloat()) // 200..3000 px/s (초기 속도)
val rotateEnabled = Math.random() < 0.3 val rotateEnabled = Math.random() < 0.3
val rotationSpeed = if (rotateEnabled) 300f * Math.random().toFloat() else 0f // deg/s val rotationSpeed =
if (rotateEnabled) 300f * Math.random().toFloat() else 0f // deg/s
val rotation0 = (-180f + 360f * Math.random().toFloat()) val rotation0 = (-180f + 360f * Math.random().toFloat())
@@ -2865,7 +2858,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
) )
) )
invalidateChat() invalidateChat()
lifecycleScope.launch { viewModel.addDonationCan(can) } viewModel.addDonationCan(can)
} }
}, },
onFailure = { onFailure = {

View File

@@ -7,8 +7,6 @@ import com.orhanobut.logger.Logger
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
@@ -100,8 +98,6 @@ class LiveRoomViewModel(
private val blockedMemberIdList: MutableList<Long> = mutableListOf() private val blockedMemberIdList: MutableList<Long> = mutableListOf()
val mutex = Mutex()
fun getUserNickname(memberId: Int): String { fun getUserNickname(memberId: Int): String {
for (manager in roomInfoResponse.managerList) { for (manager in roomInfoResponse.managerList) {
if (manager.id.toInt() == memberId) { if (manager.id.toInt() == memberId) {
@@ -569,7 +565,11 @@ class LiveRoomViewModel(
fun likeHeart(roomId: Long, heartCount: Int = 1, onSuccess: () -> Unit, onFailure: () -> Unit) { fun likeHeart(roomId: Long, heartCount: Int = 1, onSuccess: () -> Unit, onFailure: () -> Unit) {
compositeDisposable.add( compositeDisposable.add(
repository.likeHeart(roomId, heartCount = heartCount, token = "Bearer ${SharedPreferenceManager.token}") repository.likeHeart(
roomId,
heartCount = heartCount,
token = "Bearer ${SharedPreferenceManager.token}"
)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe( .subscribe(
@@ -676,17 +676,13 @@ class LiveRoomViewModel(
) )
} }
suspend fun addDonationCan(can: Int) { fun addDonationCan(can: Int) {
mutex.withLock {
_totalDonationCan.postValue(totalDonationCan.value!! + can) _totalDonationCan.postValue(totalDonationCan.value!! + can)
} }
}
suspend fun addHeartDonation(heartCount: Int = 1) { fun addHeartDonation(heartCount: Int = 1) {
mutex.withLock {
_totalHeartCount.postValue(totalHeartCount.value!! + heartCount) _totalHeartCount.postValue(totalHeartCount.value!! + heartCount)
} }
}
fun donationStatus(roomId: Long, onSuccess: (GetLiveRoomDonationStatusResponse) -> Unit) { fun donationStatus(roomId: Long, onSuccess: (GetLiveRoomDonationStatusResponse) -> Unit) {
_isLoading.value = true _isLoading.value = true