UNPKG

@yuzaijs/extension-ws

Version:

WebSocket extension for Yuzai bot framework

30 lines (23 loc) 1.49 kB
# 雨仔 WebSocket 扩展 正常来说,Yuzai 不关心 Adapter 的具体实现,因此 Adapter 应该自己维护 WebSocket 服务器。 但鉴于反向 WebSocket 在各种协议中非常常见,以及出于兼容性考虑,这里以扩展的形式提供一个反向 WebSocket 服务器。 适配器注册的流程为: 1. `import { importExtension } from "yuzai/extensions"; const { addWsPath } = importExtension("ws");` 2. 调用 `addWsPath(path, onConnectHandler)`,注册一个 WebSocket 路径和连接处理函数。 3. WebSocketServer 会在收到 WebSocket 升级请求时调用 `onConnectHandler`,并传递 WebSocket 实例,适配器应保存该实例。 4. `onConnectHandler` 应返回一个处理函数 `wsHandler`,WS 会在收到消息时调用该函数,并传递消息和 WebSocket 实例。 5. 适配器可以在 wsHandler 中处理消息,并通过 WebSocket 实例的 `sendMessage()` 方法发送消息。 相关方法类型注释如下: ```typescript type wsHandler = ( message: WebSocket.RawData, ws: WebSocket & { sendMessage: (data: object) => void }, ) => void; type onConnectHandler = ( ws: WebSocket & { sendMessage: (data: object) => void }, path: string, ) => wsHandler; type addPath = (path: string, onConnectHandler: onConnectHandler) => void; ``` 传递给适配器的 WebSocket 实例包含包装日志后的 `sendMessage()` 方法,建议用此发送消息。 可以参考 `yuzai-adapter-builtin/OneBotv11.ts` 中的实现。