【m】聊天消息接入
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user