我已经在我的应用程序中集成了Scarlet WebSockets。使用Koin DI,我提供了如下FlowSocketApi
single {
return@single AndroidLifecycle.ofApplicationForeground(androidApplication())
}
single {
return@single Scarlet.Builder()
.webSocketFactory(get<OkHttpClient>().newWebSocketFactory(Wss))
.lifecycle(get())
.backoffStrategy(LinearBackoffStrategy(10000))
.addMessageAdapterFactory(GsonMessageAdapter.Factory(get()))
.addStreamAdapterFactory(CoroutinesStreamAdapterFactory())
.build()
.create(FlowSocketApi::class.java)
}Api接口是
interface FlowSocketApi {
@Receive
fun observeEvents(): ReceiveChannel<WebSocket.Event>
@Send
fun send(message: Any): Boolean
@Receive
fun observeApiMessage(): ReceiveChannel<FlowSocketResponse>
}我还有一个实现上述功能的FlowSocketService。因此,当我想要获取结果时,尽管observeEvents和send方法可以正常工作,但当服务器向send发送应答时,observerApiMessage永远不会被触发。
// Works fine
flowSocketService.observeEvents().consumeAsFlow().asLiveData().observeForever {
it?.let {
println(it)
}
}
// Does not work
flowSocketService.observeApiMessage().consumeAsFlow().asLiveData().observeForever {
it?.let {
println("flowMessagesObserver result")
println(it)
} ?: run {
println("flowMessagesObserver null")
}
}为什么会发生这种情况?
发布于 2021-04-05 02:01:29
尝试从observeEvents()手动解码消息
`Json.decodeFromString<YourApiMessagePOJO>((it.message as Message.Text).value)`如果这是错误的位置,那么logcat将指出发生了什么。
https://stackoverflow.com/questions/64415552
复制相似问题