whileSelectMessages

inline suspend fun <T : MessageEvent> T.whileSelectMessages(    timeoutMillis: Long = -1,     filterContext: Boolean = true,     priority: EventPriority = EventPriority.MONITOR,     crossinline selectBuilder: MessageSelectBuilder<T, Boolean>.() -> Unit)

挂起当前协程, 等待任意一个事件监听器返回 false 后返回.

创建的所有事件监听器都会判断发送人信息 (isContextIdenticalWith), 监听之后的所有消息.

selectBuilder DSL 类似于 EventChannel.subscribeMessages 的 DSL, 屏蔽了一些 reply DSL 以确保类型安全

reply("开启复读模式")

whileSelectMessages {
"stop" {
reply("已关闭复读")
false // 停止循环
}
// 也可以使用 startsWith("") { true } 等 DSL
default {
reply(message)
true // 继续循环
}
timeout(3000) {
// on
true
}
} // 等待直到 `false`

reply("复读模式结束")

See also

Parameters

timeoutMillis

超时. 单位为毫秒. -1 为不限制