UNPKG

@coze/uniapp-api

Version:

Official Coze UniApp SDK for seamless AI integration into your applications | 扣子官方 UniApp SDK,助您轻松集成 AI 能力到应用中

258 lines (257 loc) 7.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UniAppWebSocket = void 0; /* eslint-disable @typescript-eslint/no-explicit-any */ // UniApp WebSocket 适配器 class UniAppWebSocket { constructor(url, protocols, options) { Object.defineProperty(this, "ws", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "eventListeners", { enumerable: true, configurable: true, writable: true, value: { open: [], message: [], close: [], error: [], } }); Object.defineProperty(this, "CONNECTING", { enumerable: true, configurable: true, writable: true, value: 0 }); Object.defineProperty(this, "OPEN", { enumerable: true, configurable: true, writable: true, value: 1 }); Object.defineProperty(this, "CLOSING", { enumerable: true, configurable: true, writable: true, value: 2 }); Object.defineProperty(this, "CLOSED", { enumerable: true, configurable: true, writable: true, value: 3 }); Object.defineProperty(this, "url", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "protocol", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "readyState", { enumerable: true, configurable: true, writable: true, value: this.CLOSED }); Object.defineProperty(this, "bufferedAmount", { enumerable: true, configurable: true, writable: true, value: 0 }); Object.defineProperty(this, "extensions", { enumerable: true, configurable: true, writable: true, value: '' }); Object.defineProperty(this, "binaryType", { enumerable: true, configurable: true, writable: true, value: 'blob' }); // 事件处理器 Object.defineProperty(this, "onopen", { enumerable: true, configurable: true, writable: true, value: null }); Object.defineProperty(this, "onmessage", { enumerable: true, configurable: true, writable: true, value: null }); Object.defineProperty(this, "onclose", { enumerable: true, configurable: true, writable: true, value: null }); Object.defineProperty(this, "onerror", { enumerable: true, configurable: true, writable: true, value: null }); // 如需要,将 URL 对象转换为字符串 this.url = typeof url === 'string' ? url : url.toString(); this.protocol = Array.isArray(protocols) ? protocols[0] : protocols || ''; this.readyState = this.CONNECTING; // Create the UniApp WebSocket this.ws = uni.connectSocket({ url: this.url.replace(/ /g, '%20'), // 微信小程序,url 不能有空格 protocols: Array.isArray(protocols) ? protocols : protocols ? [protocols] : [], success: () => { // WebSocket 连接已初始化,但尚未连接 }, fail: (error) => { this.dispatchEvent({ type: 'error', error, target: this, }); }, }); // Register event handlers this.ws.onOpen(() => { this.readyState = this.OPEN; this.dispatchEvent({ type: 'open', target: this, }); }); this.ws.onMessage((res) => { this.dispatchEvent({ type: 'message', data: res.data, target: this, }); }); this.ws.onClose((res) => { this.readyState = this.CLOSED; this.dispatchEvent({ type: 'close', code: res.code || 1000, reason: res.reason || '', wasClean: true, target: this, }); }); this.ws.onError((res) => { console.log('WebSocket error:', res); this.dispatchEvent({ type: 'error', error: res, target: this, }); }); } send(data) { if (this.readyState !== this.OPEN) { throw new Error('WebSocket is not open'); } this.ws.send({ data, success: () => { // 数据发送成功 }, fail: (error) => { this.dispatchEvent({ type: 'error', error, target: this, }); }, }); } close(code, reason) { if (this.readyState === this.CLOSED) { return; } this.readyState = this.CLOSING; this.ws.close({ code: code || 1000, reason: reason || '', success: () => { // 连接已成功关闭 }, fail: (error) => { this.dispatchEvent({ type: 'error', error, target: this, }); }, }); } addEventListener(type, listener) { if (!this.eventListeners[type]) { this.eventListeners[type] = []; } this.eventListeners[type].push(listener); } removeEventListener(type, listener) { if (!this.eventListeners[type]) { return; } this.eventListeners[type] = this.eventListeners[type].filter(l => l !== listener); } dispatchEvent(event) { const listeners = this.eventListeners[event.type] || []; listeners.forEach(listener => { listener(event); }); // 如果定义了 on* 处理函数,则调用它 const handlerName = `on${event.type}`; const handler = this[handlerName]; if (handler && typeof handler === 'function') { handler.call(this, event); } return true; } } exports.UniAppWebSocket = UniAppWebSocket; Object.defineProperty(UniAppWebSocket, "CONNECTING", { enumerable: true, configurable: true, writable: true, value: 0 }); Object.defineProperty(UniAppWebSocket, "OPEN", { enumerable: true, configurable: true, writable: true, value: 1 }); Object.defineProperty(UniAppWebSocket, "CLOSING", { enumerable: true, configurable: true, writable: true, value: 2 }); Object.defineProperty(UniAppWebSocket, "CLOSED", { enumerable: true, configurable: true, writable: true, value: 3 }); // 导出适配器 exports.default = UniAppWebSocket;