UNPKG

acp-ws

Version:

基于 WebSocket 的智能体通信库,提供智能体身份管理和实时通信功能

129 lines (128 loc) 4.29 kB
import { WSClient } from "./websocket"; /** * AgentWS类 * 提供基于WebSocket的智能体通信功能,封装了WebSocket连接、会话创建和消息传递等操作 */ class AgentWS { /** * 构造函数 * @param aid 智能体ID * @param messageServer 消息服务器地址 * @param messageSignature 消息签名 */ constructor(aid, messageServer, messageSignature) { /** 心跳服务器地址(未使用) */ this.heartbeatServer = ''; // 存储回调函数 this.statusChangeCallback = null; this.messageCallback = null; this.aid = aid; this.messageServer = messageServer; this.messageSignature = messageSignature; this.msgClient = new WSClient(); // 在构造函数中设置回调代理 this.msgClient.onStatusChange((status) => { if (this.statusChangeCallback) { this.statusChangeCallback(status); } }); this.msgClient.onMessage((message) => { if (this.messageCallback) { this.messageCallback(message); } }); } /** * 连接到WebSocket服务器 * @throws Error 当连接失败时抛出错误 */ async startWebSocket() { if (this.aid.length == 0) { throw new Error("本地的aid不存在"); } if (this.messageSignature.length === 0 || this.messageServer.length === 0) { throw new Error("消息服务器不存在"); } await this.msgClient.connectToServer(this.messageServer, this.aid, this.messageSignature); } /** * 快捷连接到指定智能体,自动创建会话并发送邀请 * @param receiver 要连接的智能体ID * @param onSessionCreated 会话创建成功回调(可选) * @param onInviteStatus 邀请状态回调(可选) */ connectTo(receiver, onSessionCreated = null, onInviteStatus = null) { if (!receiver || receiver.length === 0) { throw new Error("receiver不能为空"); } // 先创建会话 this.createSession((sessionRes) => { // 会话创建成功后的处理 if (onSessionCreated) { onSessionCreated(sessionRes); } // 如果会话创建成功且返回了邀请码,发送邀请 if (sessionRes.sessionId && sessionRes.identifyingCode) { this.invite(receiver, sessionRes.sessionId, sessionRes.identifyingCode, onInviteStatus); } else { console.error("会话创建成功但未返回sessionId或identifyingCode"); } }); } /** * 创建会话 * @param cb 会话创建回调函数 */ createSession(cb) { this.msgClient.createSession(cb); } /** * 邀请智能体加入会话 * @param receiver 接收者智能体ID * @param sessionId 会话ID * @param identifyingCode 邀请码 * @param cb 邀请状态回调函数(可选) */ invite(receiver, sessionId, identifyingCode, cb = null) { if (!receiver || receiver.length === 0) { throw new Error("receiver不能为空"); } this.msgClient.invite(receiver, sessionId, identifyingCode, cb); } /** * 发送消息 * @param msg 要发送的消息内容 * @param to 接收者智能体ID * @param sessionId 会话ID * @param identifyingCode 邀请码 */ send(msg, to, sessionId, identifyingCode) { this.msgClient.send(msg, to, sessionId, identifyingCode); } /** * 设置WebSocket连接状态变更的监听函数 * @param cb 状态变更回调函数 */ onStatusChange(cb) { this.statusChangeCallback = cb; // 如果已经连接,立即触发当前状态 if (this.msgClient.getCurrentStatus) { cb(this.msgClient.getCurrentStatus()); } } /** * 设置消息接收的监听函数 * @param cb 消息接收回调函数 */ onMessage(cb) { this.messageCallback = cb; } /** * 断开WebSocket连接 */ disconnect() { this.msgClient.disconnect(); } } export { AgentWS };