[mirotalksfu] - refactoring, update dep
هذا الالتزام موجود في:
@@ -79,6 +79,14 @@ module.exports = class Peer {
|
||||
return JSON.parse(JSON.stringify([...this.transports]));
|
||||
}
|
||||
|
||||
getTransport(transport_id) {
|
||||
return this.transports.get(transport_id);
|
||||
}
|
||||
|
||||
delTransport(transport_id) {
|
||||
this.transports.delete(transport_id);
|
||||
}
|
||||
|
||||
addTransport(transport) {
|
||||
this.transports.set(transport.id, transport);
|
||||
}
|
||||
@@ -96,7 +104,14 @@ module.exports = class Peer {
|
||||
}
|
||||
|
||||
close() {
|
||||
this.transports.forEach((transport) => transport.close());
|
||||
this.transports.forEach((transport, transport_id) => {
|
||||
log.debug('Close and delete peer transports', {
|
||||
transport_id: transport_id,
|
||||
//transportInternal: transport.internal,
|
||||
});
|
||||
transport.close();
|
||||
this.delTransport(transport_id);
|
||||
});
|
||||
}
|
||||
|
||||
// ####################################################
|
||||
@@ -111,6 +126,10 @@ module.exports = class Peer {
|
||||
return this.producers.get(producer_id);
|
||||
}
|
||||
|
||||
delProducer(producer_id) {
|
||||
this.producers.delete(producer_id);
|
||||
}
|
||||
|
||||
async createProducer(producerTransportId, producer_rtpParameters, producer_kind, producer_type) {
|
||||
try {
|
||||
if (!producerTransportId) {
|
||||
@@ -152,10 +171,7 @@ module.exports = class Peer {
|
||||
}
|
||||
|
||||
producer.on('transportclose', () => {
|
||||
log.debug('Producer transport closed', {
|
||||
peer_name: this.peer_name,
|
||||
producer_id: id,
|
||||
});
|
||||
log.debug('Producer "transportclose" event');
|
||||
this.closeProducer(id);
|
||||
});
|
||||
|
||||
@@ -168,13 +184,25 @@ module.exports = class Peer {
|
||||
|
||||
closeProducer(producer_id) {
|
||||
if (!this.producers.has(producer_id)) return;
|
||||
|
||||
const producer = this.getProducer(producer_id);
|
||||
const { id, kind, type, appData } = producer;
|
||||
|
||||
try {
|
||||
this.producers.get(producer_id).close();
|
||||
producer.close();
|
||||
} catch (error) {
|
||||
log.warn('Close Producer', error.message);
|
||||
}
|
||||
this.producers.delete(producer_id);
|
||||
log.debug('Producer closed and deleted', { producer_id });
|
||||
|
||||
this.delProducer(producer_id);
|
||||
|
||||
log.debug('Producer closed and deleted', {
|
||||
peer_name: this.peer_name,
|
||||
kind: kind,
|
||||
type: type,
|
||||
appData: appData,
|
||||
producer_id: id,
|
||||
});
|
||||
}
|
||||
|
||||
// ####################################################
|
||||
@@ -189,6 +217,10 @@ module.exports = class Peer {
|
||||
return this.consumers.get(consumer_id);
|
||||
}
|
||||
|
||||
delConsumer(consumer_id) {
|
||||
this.consumers.delete(consumer_id);
|
||||
}
|
||||
|
||||
async createConsumer(consumer_transport_id, producer_id, rtpCapabilities) {
|
||||
try {
|
||||
if (!consumer_transport_id) {
|
||||
@@ -239,10 +271,7 @@ module.exports = class Peer {
|
||||
this.consumers.set(id, consumer);
|
||||
|
||||
consumer.on('transportclose', () => {
|
||||
log.debug('Consumer transport close', {
|
||||
peer_name: this.peer_name,
|
||||
consumer_id: id,
|
||||
});
|
||||
log.debug('Consumer "transportclose" event');
|
||||
this.removeConsumer(id);
|
||||
});
|
||||
|
||||
@@ -264,14 +293,24 @@ module.exports = class Peer {
|
||||
}
|
||||
|
||||
removeConsumer(consumer_id) {
|
||||
if (this.consumers.has(consumer_id)) {
|
||||
try {
|
||||
this.consumers.get(consumer_id).close();
|
||||
} catch (error) {
|
||||
log.warn('Close Consumer', error.message);
|
||||
}
|
||||
this.consumers.delete(consumer_id);
|
||||
log.debug('Consumer closed and deleted', { consumer_id });
|
||||
if (!this.consumers.has(consumer_id)) return;
|
||||
|
||||
const consumer = this.getConsumer(consumer_id);
|
||||
const { id, kind, type } = consumer;
|
||||
|
||||
try {
|
||||
consumer.close();
|
||||
} catch (error) {
|
||||
log.warn('Close Consumer', error.message);
|
||||
}
|
||||
|
||||
this.delConsumer(consumer_id);
|
||||
|
||||
log.debug('Consumer closed and deleted', {
|
||||
peer_name: this.peer_name,
|
||||
kind: kind,
|
||||
type: type,
|
||||
consumer_id: id,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -210,11 +210,6 @@ module.exports = class Room {
|
||||
|
||||
const peer = this.peers.get(socket_id);
|
||||
|
||||
if (!peer || typeof peer !== 'object') {
|
||||
log.error('---> Peer object not found for socket ID', socket_id);
|
||||
return null;
|
||||
}
|
||||
|
||||
return peer;
|
||||
}
|
||||
|
||||
@@ -251,6 +246,14 @@ module.exports = class Room {
|
||||
|
||||
const { id, peer_name } = peer;
|
||||
|
||||
peer.close();
|
||||
|
||||
this.peers.delete(socket_id);
|
||||
|
||||
if (this.getPeers().size === 0) {
|
||||
this.closeRouter();
|
||||
}
|
||||
|
||||
const peerTransports = peer.getTransports();
|
||||
const peerProducers = peer.getProducers();
|
||||
const peerConsumers = peer.getConsumers();
|
||||
@@ -262,14 +265,6 @@ module.exports = class Room {
|
||||
peerProducers: peerProducers,
|
||||
peerConsumers: peerConsumers,
|
||||
});
|
||||
|
||||
peer.close();
|
||||
|
||||
this.peers.delete(socket_id);
|
||||
|
||||
if (this.getPeers().size === 0) {
|
||||
this.closeRouter();
|
||||
}
|
||||
}
|
||||
|
||||
// ####################################################
|
||||
@@ -318,6 +313,7 @@ module.exports = class Room {
|
||||
if (iceState === 'disconnected' || iceState === 'closed') {
|
||||
log.debug('Transport closed "icestatechange" event', {
|
||||
peer_name: peer_name,
|
||||
transport_id: id,
|
||||
iceState: iceState,
|
||||
});
|
||||
transport.close();
|
||||
@@ -327,6 +323,7 @@ module.exports = class Room {
|
||||
transport.on('sctpstatechange', (sctpState) => {
|
||||
log.debug('Transport "sctpstatechange" event', {
|
||||
peer_name: peer_name,
|
||||
transport_id: id,
|
||||
sctpState: sctpState,
|
||||
});
|
||||
});
|
||||
@@ -335,6 +332,7 @@ module.exports = class Room {
|
||||
if (dtlsState === 'failed' || dtlsState === 'closed') {
|
||||
log.debug('Transport closed "dtlsstatechange" event', {
|
||||
peer_name: peer_name,
|
||||
transport_id: id,
|
||||
dtlsState: dtlsState,
|
||||
});
|
||||
transport.close();
|
||||
@@ -345,10 +343,10 @@ module.exports = class Room {
|
||||
log.debug('Transport closed', { peer_name: peer_name, transport_id: transport.id });
|
||||
});
|
||||
|
||||
log.debug('Adding transport', { transportId: id });
|
||||
|
||||
peer.addTransport(transport);
|
||||
|
||||
log.debug('Transport created', { transportId: id });
|
||||
|
||||
return {
|
||||
id: id,
|
||||
iceParameters: iceParameters,
|
||||
@@ -421,6 +419,18 @@ module.exports = class Room {
|
||||
return id;
|
||||
}
|
||||
|
||||
closeProducer(socket_id, producer_id) {
|
||||
if (!socket_id || !producer_id) return;
|
||||
|
||||
const peer = this.getPeer(socket_id);
|
||||
|
||||
if (!peer || typeof peer !== 'object') {
|
||||
return;
|
||||
}
|
||||
|
||||
peer.closeProducer(producer_id);
|
||||
}
|
||||
|
||||
// ####################################################
|
||||
// CONSUME
|
||||
// ####################################################
|
||||
@@ -457,13 +467,8 @@ module.exports = class Room {
|
||||
|
||||
const { id, kind } = consumer;
|
||||
|
||||
const { peer_name } = peer;
|
||||
|
||||
consumer.on('producerclose', () => {
|
||||
log.debug('Consumer closed due to producerclose event', {
|
||||
peer_name: peer_name,
|
||||
consumer_id: id,
|
||||
});
|
||||
log.debug('Consumer closed due to "producerclose" event');
|
||||
peer.removeConsumer(id);
|
||||
|
||||
// Notify the client that consumer is closed
|
||||
@@ -480,20 +485,6 @@ module.exports = class Room {
|
||||
}
|
||||
}
|
||||
|
||||
closeProducer(socket_id, producer_id) {
|
||||
if (!socket_id || !producer_id) return;
|
||||
|
||||
const peer = this.getPeer(socket_id);
|
||||
|
||||
if (!peer || typeof peer !== 'object') {
|
||||
return;
|
||||
}
|
||||
|
||||
peer.closeProducer(producer_id);
|
||||
|
||||
log.debug('Producer closed', producer_id);
|
||||
}
|
||||
|
||||
// ####################################################
|
||||
// HANDLE BANNED PEERS
|
||||
// ####################################################
|
||||
|
||||
@@ -41,7 +41,7 @@ dependencies: {
|
||||
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
|
||||
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
|
||||
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
|
||||
* @version 1.4.12
|
||||
* @version 1.4.13
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -1041,6 +1041,7 @@ function startServer() {
|
||||
const room = roomList.get(socket.room_id);
|
||||
|
||||
log.debug('Create WebRtc transport', getPeerName(room));
|
||||
|
||||
try {
|
||||
const createWebRtcTransport = await room.createWebRtcTransport(socket.id);
|
||||
|
||||
@@ -1080,6 +1081,37 @@ function startServer() {
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('restartIce', async ({ transport_id }, callback) => {
|
||||
if (!roomList.has(socket.room_id)) {
|
||||
return callback({ error: 'Room not found' });
|
||||
}
|
||||
|
||||
const room = roomList.get(socket.room_id);
|
||||
|
||||
const peer = room.getPeer(socket.id);
|
||||
|
||||
const peer_name = getPeerName(room, false);
|
||||
|
||||
log.debug('Restart ICE', { peer_name: peer_name, transport_id: transport_id });
|
||||
|
||||
try {
|
||||
const transport = peer.getTransport(transport_id);
|
||||
|
||||
if (!transport) throw new Error(`Restart ICE, transport with id "${transport_id}" not found`);
|
||||
|
||||
const iceParameters = await transport.restartIce();
|
||||
|
||||
log.debug('Restart ICE callback', { callback: iceParameters });
|
||||
|
||||
callback(iceParameters);
|
||||
} catch (err) {
|
||||
log.error('Restart ICE error', err.message);
|
||||
callback({
|
||||
error: err.message,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('produce', async ({ producerTransportId, kind, appData, rtpParameters }, callback, errback) => {
|
||||
if (!roomList.has(socket.room_id)) {
|
||||
return callback({ error: 'Room not found' });
|
||||
@@ -1170,8 +1202,6 @@ function startServer() {
|
||||
socket.on('producerClosed', (data) => {
|
||||
if (!roomList.has(socket.room_id)) return;
|
||||
|
||||
log.debug('Producer close', data);
|
||||
|
||||
const room = roomList.get(socket.room_id);
|
||||
|
||||
const peer = room.getPeer(socket.id);
|
||||
|
||||
المرجع في مشكلة جديدة
حظر مستخدم