diff --git a/bin/main/com/github/insanusmokrassar/PsychomatrixBase/domain/interactors/CeilDescriptionInteractor.kt b/bin/main/com/github/insanusmokrassar/PsychomatrixBase/domain/interactors/CeilDescriptionInteractor.kt new file mode 100644 index 0000000..379c1fd --- /dev/null +++ b/bin/main/com/github/insanusmokrassar/PsychomatrixBase/domain/interactors/CeilDescriptionInteractor.kt @@ -0,0 +1,41 @@ +package com.github.insanusmokrassar.PsychomatrixBase.domain.interactors + +import com.github.insanusmokrassar.PsychomatrixBase.domain.UseCases.CeilDescriptionReady +import com.github.insanusmokrassar.PsychomatrixBase.domain.UseCases.CeilDescriptionUseCase +import com.github.insanusmokrassar.PsychomatrixBase.domain.entities.CeilInfo +import com.github.insanusmokrassar.PsychomatrixBase.domain.entities.CeilState +import kotlinx.coroutines.* +import kotlinx.coroutines.channels.BroadcastChannel +import kotlinx.coroutines.channels.ReceiveChannel + +class CeilDescriptionInteractor : CeilDescriptionUseCase { + private val scope = CoroutineScope(Dispatchers.Default) + private val ceilDescriptionReadyBroadcastChannel = BroadcastChannel( + 16 + ) + private val ceilDescriptionRequestedBroadcastChannel = BroadcastChannel( + 8 + ) + + override fun openCeilDescriptionReadySubscription(): ReceiveChannel { + return ceilDescriptionReadyBroadcastChannel.openSubscription() + } + + override fun openCeilDescriptionRequestedSubscription(): ReceiveChannel { + return ceilDescriptionRequestedBroadcastChannel.openSubscription() + } + + override fun descriptionReady(ceilState: CeilState, ceilInfo: CeilInfo) { + scope.launch { + ceilDescriptionReadyBroadcastChannel.send(ceilState to ceilInfo) + } + } + + override fun requestDescription(ceilState: CeilState) { + scope.launch { + ceilDescriptionRequestedBroadcastChannel.send( + ceilState + ) + } + } +} \ No newline at end of file