Xeron
Xeron
感谢提问。 在使用ServiceFactory创建服务后,会返回IWebSocketService接口,接口中有Contexts属性,表示当前有效的上下文。 https://github.com/XeronOwO/Makabaka/blob/main/Makabaka%2FServices%2FIWebSocketService.cs#L43-L43 当存在有效的上下文时,可以通过调用上下文进行主动的消息操作,比如SendPrivateMessageAsync。
大致的运行逻辑如下: https://github.com/XeronOwO/Makabaka/blob/main/Makabaka/Services/ServiceFactory.cs#L17 通过ServiceFactory创建并返回IWebSocketService接口。这个接口负责启动、停止整体的服务。 https://github.com/XeronOwO/Makabaka/blob/main/Makabaka/Services/ForwardWebSocketService.cs#L58 当启动服务后,会创建对应的IWebSocketContext,保存到Contexts属性中,该IWebSocketContext负责处理Lagrange.Core的网络连接。 也就是说,**这个“上下文”指的是WebSocket这个连接,而不是指具体跟某个用户的聊天记录**。 所以IWebSocketService的Contexts其实就是WebSocket连接,直接调用其接口功能就行了。~~我也不记得当初为什么要用List来存,感觉用nullable就行了。~~ 这样解释好理解不
SendPrivateMessageAsync的本质就是向Lagrange.Core发送WebSocket数据。即 Makabaka --SendPacket --> Lagrange.Core 。 而OnPrivateMessage,是在接收到Lagrange.Core发来的数据并解析后,再调用,类似于C/C++的回调函数。即 Lagrange.Core --SendPacket --> Makabaka 。 这两个没有谁先谁后的要求。在成功连接上Lagrange.Core后,就可以使用SendPrivateMessageAsync发送消息,不需要OnPrivateMessage事件。
这个的问题是操作太快了,这还没连接上就发送数据了。 而且连接上之后,需要握手鉴权,如果没有鉴权或者鉴权失败,是会直接断开连接的。 可以用下`OnLifeCycle`事件,具体的`EventArgs`可以参考 [Onebot生命周期](https://github.com/botuniverse/onebot-11/blob/master/event/meta.md#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F) 。
这个看样子是“正在输入”的数据包,我还没写解析,不过不影响运行。感觉这个数据包一般也用不上吧,要支持解析倒也不难,DataProcessor里面添加处理函数就行。主要是最近比较忙,也没啥时间维护项目了
Hello. I found a **temporary** solution: `--disable-web-security`. It is not perfect but it just works.