【m】增加多用户连接
This commit is contained in:
@@ -42,7 +42,7 @@ export default class Peer extends EventTarget {
|
||||
|
||||
this.pc.oniceconnectionstatechange = () => {
|
||||
_this.log(`iceConnectionState changed:${_this.pc.iceConnectionState}`);
|
||||
if (_this.pc.iceConnectionState === 'disconnected') {
|
||||
if (_this.pc.iceConnectionState === 'failed') {
|
||||
this.dispatchEvent(new Event('disconnect'));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -23,6 +23,8 @@ export class RenderStreaming {
|
||||
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.onParticipantLeft = function (connectionId) { Logger.log(`Participant left on ${connectionId}.`); };
|
||||
this.onNewPeer = function (connectionId) { Logger.log(`New peer created for ${connectionId}.`); };
|
||||
this._config = config;
|
||||
this._signaling = signaling;
|
||||
this._signaling.addEventListener('connect', this._onConnect.bind(this));
|
||||
@@ -31,13 +33,14 @@ export class RenderStreaming {
|
||||
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));
|
||||
this._signaling.addEventListener('participant-left', this._onParticipantLeft.bind(this));
|
||||
}
|
||||
|
||||
async _onConnect(e) {
|
||||
const data = e.detail;
|
||||
if (this._connectionId == data.connectionId) {
|
||||
this._preparePeerConnection(this._connectionId, data.polite);
|
||||
this.onConnect(data.connectionId);
|
||||
this.onConnect(data.connectionId, data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +57,12 @@ export class RenderStreaming {
|
||||
|
||||
async _onOffer(e) {
|
||||
const offer = e.detail;
|
||||
// 如果已有Peer但ICE连接已断开,需要重建Peer
|
||||
if (this._peer && this._peer.pc && this._peer.pc.iceConnectionState === 'disconnected') {
|
||||
Logger.log('ICE disconnected, resetting PeerConnection for new offer');
|
||||
this._peer.close();
|
||||
this._peer = null;
|
||||
}
|
||||
if (!this._peer) {
|
||||
this._preparePeerConnection(offer.connectionId, offer.polite);
|
||||
}
|
||||
@@ -91,6 +100,12 @@ export class RenderStreaming {
|
||||
const data = e.detail;
|
||||
this.onMessage(data);
|
||||
}
|
||||
|
||||
async _onParticipantLeft(e) {
|
||||
const data = e.detail;
|
||||
Logger.log(`Participant left: ${data.connectionId}`);
|
||||
this.onParticipantLeft(data.connectionId);
|
||||
}
|
||||
/**
|
||||
* if not set argument, a generated uuid is used.
|
||||
* @param {string | null} connectionId
|
||||
@@ -114,9 +129,9 @@ export class RenderStreaming {
|
||||
|
||||
// Create peerConnection with proxy server and set up handlers
|
||||
this._peer = new Peer(connectionId, polite, this._config);
|
||||
this._peer.addEventListener('disconnect', () => {
|
||||
this.onDisconnect(`Receive disconnect message from peer. connectionId:${connectionId}`);
|
||||
});
|
||||
// this._peer.addEventListener('disconnect', () => {
|
||||
// this.onDisconnect(`Receive disconnect message from peer. connectionId:${connectionId}`);
|
||||
// });
|
||||
this._peer.addEventListener('trackevent', (e) => {
|
||||
const data = e.detail;
|
||||
this.onTrackEvent(data);
|
||||
@@ -145,6 +160,7 @@ export class RenderStreaming {
|
||||
const candidate = e.detail;
|
||||
this._signaling.sendCandidate(candidate.connectionId, candidate.candidate, candidate.sdpMid, candidate.sdpMLineIndex);
|
||||
});
|
||||
this.onNewPeer(connectionId);
|
||||
return this._peer;
|
||||
}
|
||||
|
||||
|
||||
@@ -193,6 +193,9 @@ export class WebSocketSignaling extends EventTarget {
|
||||
case "on-message":
|
||||
this.dispatchEvent(new CustomEvent('on-message', { detail: msg.data }));
|
||||
break;
|
||||
case "participant-left":
|
||||
this.dispatchEvent(new CustomEvent('participant-left', { detail: msg }));
|
||||
break;
|
||||
case "broadcast":
|
||||
// 处理服务器广播的消息
|
||||
this.dispatchEvent(new CustomEvent('on-message', { detail: msg.message }));
|
||||
|
||||
Reference in New Issue
Block a user