PsychomatrixBase/src/main/kotlin/com/github/insanusmokrassar/PsychomatrixBase/domain/interactors/CeilDescriptionInteractor.kt

41 lines
1.6 KiB
Kotlin

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<CeilDescriptionReady>(
16
)
private val ceilDescriptionRequestedBroadcastChannel = BroadcastChannel<CeilState>(
8
)
override fun openCeilDescriptionReadySubscription(): ReceiveChannel<CeilDescriptionReady> {
return ceilDescriptionReadyBroadcastChannel.openSubscription()
}
override fun openCeilDescriptionRequestedSubscription(): ReceiveChannel<CeilState> {
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
)
}
}
}