open class FlowMessage(val data:Any?)
class NetworkChangeMessage(data: Any?) : FlowMessage(data)
object SimpleFlowBus {
private const val TAG = "SimpleFlowBus"
private val mMessageFlow = MutableStateFlow(FlowMessage("init"))
private val mCoroutineScope = CoroutineScope(Dispatchers.Default + SupervisorJob())
@JvmStatic
fun sendMessage(message: FlowMessage) {
mCoroutineScope.launch {
mMessageFlow.value = message
}
}
@JvmStatic
fun receiveMessage(
dispatcher: CoroutineDispatcher = Dispatchers.Main,
callback: (FlowMessage) -> Unit
): Job {
return mCoroutineScope.launch {
mMessageFlow.onEach {
callback(it)
}.flowOn(dispatcher).catch {
Log.e(TAG, it.message)
}.collect()
}
}
@JvmStatic
fun jobCancel(job: Job?) {
try {
job?.cancel()
Log.d(TAG, "job cancel")
} catch (e: Exception) {
e.printStackTrace()
}
}
}