【m】聊天消息接入

This commit is contained in:
zhangzheng
2026-03-12 12:10:40 +08:00
parent b4c41e42c9
commit e9f7b3ad5c
7 changed files with 425 additions and 359 deletions

View File

@@ -22,7 +22,7 @@ export class RenderStreaming {
this.onGotAnswer = function (connectionId) { Logger.log(`On got Answer on ${connectionId}.`); };
this.onTrackEvent = function (data) { Logger.log(`OnTrack event peer with data:${data}`); };
this.onAddChannel = function (data) { Logger.log(`onAddChannel event peer with data:${data}`); };
this.onMessage = function (data) { Logger.log(`On message: ${data}`); };
this._config = config;
this._signaling = signaling;
this._signaling.addEventListener('connect', this._onConnect.bind(this));
@@ -30,6 +30,7 @@ export class RenderStreaming {
this._signaling.addEventListener('offer', this._onOffer.bind(this));
this._signaling.addEventListener('answer', this._onAnswer.bind(this));
this._signaling.addEventListener('candidate', this._onIceCandidate.bind(this));
this._signaling.addEventListener('on-message', this._onMessage.bind(this));
}
async _onConnect(e) {
@@ -85,7 +86,11 @@ export class RenderStreaming {
await this._peer.onGotCandidate(candidate.connectionId, iceCandidate);
}
}
// 在 RenderStreaming 类中添加
async _onMessage(e) {
const data = e.detail;
this.onMessage(data);
}
/**
* if not set argument, a generated uuid is used.
* @param {string | null} connectionId
@@ -98,6 +103,7 @@ export class RenderStreaming {
async deleteConnection() {
await this._signaling.deleteConnection(this._connectionId);
}
// 在 RenderStreaming 类中添加
_preparePeerConnection(connectionId, polite) {
if (this._peer) {
@@ -182,6 +188,11 @@ export class RenderStreaming {
return this._peer.getTransceivers(this._connectionId);
}
sendMessage(message) {
if (this._signaling && this._connectionId) {
this._signaling.sendMessage(this._connectionId, message);
}
}
async start() {
await this._signaling.start();
}

View File

@@ -18,17 +18,17 @@ export class Signaling extends EventTarget {
}
}
url(method, parameter='') {
url(method, parameter = '') {
let ret = location.origin + '/signaling';
if(method)
if (method)
ret += '/' + method;
if(parameter)
if (parameter)
ret += '?' + parameter;
return ret;
}
async start() {
if(this.running) {
if (this.running) {
return;
}
@@ -55,7 +55,7 @@ export class Signaling extends EventTarget {
const messages = data.messages;
for(const msg of messages) {
for (const msg of messages) {
switch (msg.type) {
case "connect":
break;
@@ -63,14 +63,17 @@ export class Signaling extends EventTarget {
this.dispatchEvent(new CustomEvent('disconnect', { detail: msg }));
break;
case "offer":
this.dispatchEvent(new CustomEvent('offer', { detail: msg } ));
this.dispatchEvent(new CustomEvent('offer', { detail: msg }));
break;
case "answer":
this.dispatchEvent(new CustomEvent('answer', { detail: msg } ));
this.dispatchEvent(new CustomEvent('answer', { detail: msg }));
break;
case "candidate":
this.dispatchEvent(new CustomEvent('candidate', { detail: msg }));
break;
case "on-message":
this.dispatchEvent(new CustomEvent('on-message', { detail: msg.data }));
break;
default:
break;
}
@@ -125,7 +128,14 @@ export class Signaling extends EventTarget {
Logger.log('sendCandidate:' + data);
await fetch(this.url('candidate'), { method: 'POST', headers: this.headers(), body: JSON.stringify(data) });
}
// 在 Signaling 类中添加
async sendMessage(connectionId, message) {
const data = {
'message': message,
'connectionId': connectionId
};
await fetch(this.url('on-message'), { method: 'POST', headers: this.headers(), body: JSON.stringify(data) });
}
async getAll(fromTime = 0) {
return await fetch(this.url(``, `fromtime=${fromTime}`), { method: 'GET', headers: this.headers() });
}
@@ -180,6 +190,8 @@ export class WebSocketSignaling extends EventTarget {
case "candidate":
this.dispatchEvent(new CustomEvent('candidate', { detail: { connectionId: msg.from, candidate: msg.data.candidate, sdpMLineIndex: msg.data.sdpMLineIndex, sdpMid: msg.data.sdpMid } }));
break;
case "on-message":
this.dispatchEvent(new CustomEvent('on-message', { detail: msg.data }));
default:
break;
}
@@ -236,4 +248,15 @@ export class WebSocketSignaling extends EventTarget {
Logger.log(sendJson);
this.websocket.send(sendJson);
}
// 在 WebSocketSignaling 类中添加
sendMessage(connectionId, message) {
const data = {
'message': message,
'senderId': message.senderId,
'connectionId': connectionId
};
const sendJson = JSON.stringify({ type: "on-message", data: data });
Logger.log(sendJson);
this.websocket.send(sendJson);
}
}