@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
JavaScript
"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;