import Taro from '../../index' declare module '../../index' { namespace sendSocketMessage { interface Option { /** 需要发送的内容 */ data: string | ArrayBuffer /** 接口调用结束的回调函数(调用成功、失败都会执行) */ complete?: (res: TaroGeneral.CallbackResult) => void /** 接口调用失败的回调函数 */ fail?: (res: TaroGeneral.CallbackResult) => void /** 接口调用成功的回调函数 */ success?: (res: TaroGeneral.CallbackResult) => void } } namespace onSocketOpen { /** WebSocket 连接打开事件的回调函数 */ type Callback = (result: OpenCallbackResult) => void interface OpenCallbackResult { /** 连接成功的 HTTP 响应 Header */ header: TaroGeneral.IAnyObject } } namespace onSocketMessage { /** WebSocket 接受到服务器的消息事件的回调函数 */ type Callback = (result: CallbackResult) => void interface CallbackResult { /** 服务器返回的消息 */ data: T } } namespace onSocketError { /** WebSocket 错误事件的回调函数 */ type Callback = (result: CallbackResult) => void interface CallbackResult extends TaroGeneral.CallbackResult { /** 错误信息 */ errMsg: string } } namespace onSocketClose { /** WebSocket 连接关闭事件的回调函数 */ type Callback = (result: CallbackResult) => void interface CallbackResult { /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ code: number /** 一个可读的字符串,表示连接被关闭的原因。 */ reason: string } } namespace connectSocket { interface Option { /** 开发者服务器 wss 接口地址 */ url: string /** 接口调用结束的回调函数(调用成功、失败都会执行) */ complete?: (res: TaroGeneral.CallbackResult) => void /** 接口调用失败的回调函数 */ fail?: (res: TaroGeneral.CallbackResult) => void /** HTTP Header,Header 中不能设置 Referer */ header?: TaroGeneral.IAnyObject /** 子协议数组 */ protocols?: string[] /** 接口调用成功的回调函数 */ success?: (res: TaroGeneral.CallbackResult) => void /** 建立 TCP 连接的时候的 TCP_NODELAY 设置 */ tcpNoDelay?: boolean } } namespace closeSocket { interface Option { /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ code?: number /** 接口调用结束的回调函数(调用成功、失败都会执行) */ complete?: (res: TaroGeneral.CallbackResult) => void /** 接口调用失败的回调函数 */ fail?: (res: TaroGeneral.CallbackResult) => void /** 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。 */ reason?: string /** 接口调用成功的回调函数 */ success?: (res: TaroGeneral.CallbackResult) => void } } namespace SocketTask { interface CloseOption { /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ code?: number /** 接口调用结束的回调函数(调用成功、失败都会执行) */ complete?: (res: TaroGeneral.CallbackResult) => void /** 接口调用失败的回调函数 */ fail?: (res: TaroGeneral.CallbackResult) => void /** 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。 */ reason?: string /** 接口调用成功的回调函数 */ success?: (res: TaroGeneral.CallbackResult) => void } /** WebSocket 连接关闭事件的回调函数 */ type OnCloseCallback = (result: OnCloseCallbackResult) => void interface OnCloseCallbackResult { /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ code: number /** 一个可读的字符串,表示连接被关闭的原因。 */ reason: string } /** WebSocket 错误事件的回调函数 */ type OnErrorCallback = (result: OnErrorCallbackResult) => void interface OnErrorCallbackResult extends TaroGeneral.CallbackResult { /** 错误信息 */ errMsg: string } /** WebSocket 接受到服务器的消息事件的回调函数 */ type OnMessageCallback = (result: OnMessageCallbackResult) => void interface OnMessageCallbackResult { /** 服务器返回的消息 */ data: T } /** WebSocket 连接打开事件的回调函数 */ type OnOpenCallback = (result: OnOpenCallbackResult) => void interface OnOpenCallbackResult { /** 连接成功的 HTTP 响应 Header*/ header: TaroGeneral.IAnyObject } interface SendOption { /** 需要发送的内容 */ data: string | ArrayBuffer /** 接口调用结束的回调函数(调用成功、失败都会执行) */ complete?: (res: TaroGeneral.CallbackResult) => void /** 接口调用失败的回调函数 */ fail?: (res: TaroGeneral.CallbackResult) => void /** 接口调用成功的回调函数 */ success?: (res: TaroGeneral.CallbackResult) => void } } /** WebSocket 任务,可通过 [Taro.connectSocket()](/docs/apis/network/websocket/SocketTask) 接口创建返回。 * @supported weapp, h5, rn, alipay, swan, harmony_hybrid * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html */ interface SocketTask { /** 通过 WebSocket 连接发送数据 * @supported weapp, h5, rn, alipay, swan, tt, harmony_hybrid * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.send.html */ send(option: SocketTask.SendOption): void /** 关闭 WebSocket 连接 * @supported weapp, h5, rn, alipay, swan, tt, harmony_hybrid * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.close.html */ close(option: SocketTask.CloseOption): void /** 监听 WebSocket 连接打开事件 * @supported weapp, h5, rn, alipay, swan, tt, harmony_hybrid * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onOpen.html */ onOpen( /** WebSocket 连接打开事件的回调函数 */ callback: SocketTask.OnOpenCallback ): void /** 监听 WebSocket 连接关闭事件 * @supported weapp, h5, rn, alipay, swan, tt, harmony_hybrid * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onClose.html */ onClose( /** WebSocket 连接关闭事件的回调函数 */ callback: SocketTask.OnCloseCallback ): void /** 监听 WebSocket 错误事件 * @supported weapp, h5, rn, alipay, swan, tt, harmony_hybrid * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onError.html */ onError( /** WebSocket 错误事件的回调函数 */ callback: SocketTask.OnErrorCallback ): void /** 监听 WebSocket 接受到服务器的消息事件 * @supported weapp, h5, rn, alipay, swan, tt, harmony_hybrid * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onMessage.html */ onMessage( /** WebSocket 接受到服务器的消息事件的回调函数 */ callback: SocketTask.OnMessageCallback ): void /** websocket 当前的连接 ID。 */ readonly socketTaskId: number /** websocket 当前的连接状态。 */ readonly readyState: number /** websocket 接口调用结果。 */ readonly errMsg: string /** websocket 状态值:连接中。 */ readonly CONNECTING: number /** websocket 状态值:已连接。 */ readonly OPEN: number /** websocket 状态值:关闭中。 */ readonly CLOSING: number /** websocket 状态值:已关闭。 */ readonly CLOSED: number /** 浏览器 websocket 实例。(h5 端独有) */ readonly ws: WebSocket } interface TaroStatic { /** 通过 WebSocket 连接发送数据。需要先 Taro.connectSocket,并在 Taro.onSocketOpen 回调之后才能发送。 * @supported weapp, alipay, swan * @example * ```tsx * let socketOpen = false * const socketMsgQueue = [] * Taro.connectSocket({ * url: 'test.php' * }) * Taro.onSocketOpen(function(res) { * socketOpen = true * for (let i = 0; i < socketMsgQueue.length; i++){ * sendSocketMessage(socketMsgQueue[i]) * } * socketMsgQueue = [] * }) * function sendSocketMessage(msg) { * if (socketOpen) { * Taro.sendSocketMessage({ * data:msg * }) * } else { * socketMsgQueue.push(msg) * } * } * ``` @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.sendSocketMessage.html */ sendSocketMessage(option: sendSocketMessage.Option): Promise /** 监听 WebSocket 连接打开事件 * @supported weapp, alipay, swan * @example * ```tsx * Taro.connectSocket({ * url: 'test.php' * }) * Taro.onSocketOpen(function (res) { * console.log('WebSocket连接已打开!') * }) * ``` * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketOpen.html */ onSocketOpen( /** WebSocket 连接打开事件的回调函数 */ callback: onSocketOpen.Callback ): void /** 监听 WebSocket 接受到服务器的消息事件 * @supported weapp, alipay, swan * @example * ```tsx * Taro.connectSocket({ * url: 'test.php' * }) * Taro.onSocketMessage(function (res) { * console.log('收到服务器内容:' + res.data) * }) * ``` * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketMessage.html */ onSocketMessage( /** WebSocket 接受到服务器的消息事件的回调函数 */ callback: onSocketMessage.Callback ): void /** 监听 WebSocket 错误事件 * @supported weapp, alipay, swan * @example * ```tsx * Taro.connectSocket({ * url: 'test.php' * }) * Taro.onSocketOpen(function (res){ * console.log('WebSocket连接已打开!') * }) * Taro.onSocketError(function (res){ * console.log('WebSocket连接打开失败,请检查!') * }) * ``` * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketError.html */ onSocketError( /** WebSocket 错误事件的回调函数 */ callback: onSocketError.Callback ): void /** 监听 WebSocket 连接关闭事件 * @supported weapp, alipay, swan * @example * ```tsx * Taro.connectSocket({ * url: 'test.php' * }) * //注意这里有时序问题, * //如果 Taro.connectSocket 还没回调 Taro.onSocketOpen,而先调用 Taro.closeSocket,那么就做不到关闭 WebSocket 的目的。 * //必须在 WebSocket 打开期间调用 Taro.closeSocket 才能关闭。 * Taro.onSocketOpen(function () { * Taro.closeSocket() * }) * Taro.onSocketClose(function (res) { * console.log('WebSocket 已关闭!') * }) * ``` * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketClose.html */ onSocketClose( /** WebSocket 连接关闭事件的回调函数 */ callback: onSocketClose.Callback ): void /** 创建一个 WebSocket 连接。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 * * **并发数** * - 1.7.0 及以上版本,最多可以同时存在 5 个 WebSocket 连接。 * - 1.7.0 以下版本,一个小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接。 * @supported weapp, h5, rn, alipay, swan, harmony_hybrid * @example * ```tsx * Taro.connectSocket({ * url: 'wss://example.qq.com', * header:{ * 'content-type': 'application/json' * }, * protocols: ['protocol1'] * }) * ``` * @example * ```tsx * Taro.connectSocket({ * url: 'ws://echo.websocket.org/echo', * success: function () { * console.log('connect success') * } * }).then(task => { * task.onOpen(function () { * console.log('onOpen') * task.send({ data: 'xxx' }) * }) * task.onMessage(function (msg) { * console.log('onMessage: ', msg) * task.close() * }) * task.onError(function () { * console.log('onError') * }) * task.onClose(function (e) { * console.log('onClose: ', e) * }) * }) * ``` * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.connectSocket.html */ connectSocket(option: connectSocket.Option): Promise /** 关闭 WebSocket 连接 * @supported weapp, alipay, swan * @example * ```tsx * Taro.connectSocket({ * url: 'test.php' * }) * //注意这里有时序问题, * //如果 Taro.connectSocket 还没回调 Taro.onSocketOpen,而先调用 Taro.closeSocket,那么就做不到关闭 WebSocket 的目的。 * //必须在 WebSocket 打开期间调用 Taro.closeSocket 才能关闭。 * Taro.onSocketOpen(function() { * Taro.closeSocket() * }) * Taro.onSocketClose(function(res) { * console.log('WebSocket 已关闭!') * }) * ``` * @see https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.closeSocket.html */ closeSocket(option?: closeSocket.Option): Promise } }