在服务器端,我有一个WebSocket,它发出;会话对象";经常向其客户发送。
const session = {
...
}
io.emit("session_obj", session)
现在,在Android方面,我想在FlowBuilder中收集这个会话对象,并将会话对象发送到ViewModels中的收集器。
class MainRepositoryImpl @Inject constructor(
socket: Socket
) : MainRepository {
override fun getRealtimeSessionObject(): Flow<Command> {
/*
* socket.on("session_obj") {
* val session = it[0] as JSONObject
* }
*/
// But how will I return as a flow that can emit the data to ViewModels?
}
}
您可以使用SharedFlow
向ViewModel
发送数据,这是一个热数据流。用法示例:
private val dataFlow = MutableSharedFlow<Command>(extraBufferCapacity = 128)
fun getRealtimeSessionObject(): Flow<Command> {
socket.on("session_obj") {
val session = it[0] as JSONObject
// ...
dataFlow.tryEmit(command)
}
return dataFlow
}
extraBufferCapacity
—缓冲的值数。