acp-ws
Version:
基于 WebSocket 的智能体通信库,提供智能体身份管理和实时通信功能
129 lines (128 loc) • 4.29 kB
JavaScript
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 };