[mirotalksfu] - Improve is presenter logic

هذا الالتزام موجود في:
Miroslav Pejic
2023-04-10 09:36:12 +02:00
الأصل 7e66fa6253
التزام bf953c3448
4 ملفات معدلة مع 65 إضافات و5 حذوفات

عرض الملف

@@ -8,6 +8,7 @@ module.exports = class Peer {
this.id = socket_id;
this.peer_info = data.peer_info;
this.peer_name = data.peer_info.peer_name;
this.peer_presenter = data.peer_info.peer_presenter;
this.peer_audio = data.peer_info.peer_audio;
this.peer_video = data.peer_info.peer_video;
this.peer_video_privacy = data.peer_video_privacy;
@@ -50,6 +51,12 @@ module.exports = class Peer {
this.peer_info.peer_video_privacy = data.status;
this.peer_video_privacy = data.status;
break;
case 'presenter':
this.peer_info.peer_presenter = data.status;
this.peer_presenter = data.status;
break;
default:
break;
}
}

عرض الملف

@@ -144,6 +144,8 @@ let authHost; // Authenticated IP by Login
let roomList = new Map();
let presenters = {}; // collect presenters grp by roomId
// All mediasoup workers
let workers = [];
let nextMediasoupWorkerIdx = 0;
@@ -728,6 +730,38 @@ function startServer() {
return cb('isLobby');
}
if (!(socket.room_id in presenters)) presenters[socket.room_id] = {};
const peer_name = roomList.get(socket.room_id).getPeers()?.get(socket.id)?.peer_info?.peer_name;
const peer_uuid = roomList.get(socket.room_id).getPeers()?.get(socket.id)?.peer_info?.peer_uuid;
if (Object.keys(presenters[socket.room_id]).length === 0) {
presenters[socket.room_id] = {
peer_name: peer_name,
peer_uuid: peer_uuid,
is_presenter: true,
};
}
log.debug('[Join] - Connected presenters grp by roomId', presenters);
const isPresenter =
Object.keys(presenters[socket.room_id]).length > 1 &&
presenters[socket.room_id]['peer_name'] == peer_name &&
presenters[socket.room_id]['peer_uuid'] == peer_uuid;
roomList
.get(socket.room_id)
.getPeers()
.get(socket.id)
.updatePeerInfo({ type: 'presenter', status: isPresenter });
log.debug('[Join] - Is presenter', {
roomId: socket.room_id,
peer_name: peer_name,
peer_presenter: isPresenter,
});
cb(roomList.get(socket.room_id).toJson());
});
@@ -904,6 +938,8 @@ function startServer() {
if (roomList.get(socket.room_id).isLobbyEnabled()) {
roomList.get(socket.room_id).setLobbyEnabled(false);
}
delete presenters[socket.room_id];
log.debug('Disconnect - current presenters grouped by roomId', presenters);
}
roomList.get(socket.room_id).broadCast(socket.id, 'removeMe', removeMeData());

عرض الملف

@@ -434,8 +434,10 @@ function getRoomPassword() {
function getPeerInfo() {
peer_info = {
join_data_time: getDataTimeString(),
peer_uuid: getUUID(),
peer_id: socket.id,
peer_name: peer_name,
peer_presenter: isPresenter,
peer_audio: isAudioAllowed,
peer_video: isVideoAllowed,
peer_screen: isScreenAllowed,
@@ -1602,6 +1604,17 @@ function getDataTimeString() {
return `${date}-${time}`;
}
function getUUID() {
const uuid4 = ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
(c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16),
);
if (window.localStorage.uuid) {
return window.localStorage.uuid;
}
window.localStorage.uuid = uuid4;
return uuid4;
}
function showButtons() {
if (
isButtonsBarOver ||

عرض الملف

@@ -305,7 +305,7 @@ class RoomClient {
await this.handleRoomInfo(room);
const data = await this.socket.request('getRouterRtpCapabilities');
this.device = await this.loadDevice(data);
console.log('07.1 ----> Get Router Rtp Capabilities codecs: ', this.device.rtpCapabilities.codecs);
console.log('07.3 ----> Get Router Rtp Capabilities codecs: ', this.device.rtpCapabilities.codecs);
await this.initTransports(this.device);
await this.startLocalMedia();
this.socket.emit('getProducers');
@@ -314,18 +314,22 @@ class RoomClient {
async handleRoomInfo(room) {
let peers = new Map(JSON.parse(room.peers));
participantsCount = peers.size;
isPresenter = participantsCount > 1 ? false : true;
handleRules(isPresenter);
for (let peer of Array.from(peers.keys()).filter((id) => id == this.peer_id)) {
let my_peer_info = peers.get(peer).peer_info;
console.log('07.1 ----> My Peer info', my_peer_info);
isPresenter = my_peer_info.peer_presenter;
handleRules(isPresenter);
}
adaptAspectRatio(participantsCount);
for (let peer of Array.from(peers.keys()).filter((id) => id !== this.peer_id)) {
let peer_info = peers.get(peer).peer_info;
// console.log('07 ----> Remote Peer info', peer_info);
// console.log('07.1 ----> Remote Peer info', peer_info);
if (!peer_info.peer_video) {
await this.setVideoOff(peer_info, true);
}
}
this.refreshParticipantsCount();
console.log('06.2 Participants Count ---->', participantsCount);
console.log('07.2 Participants Count ---->', participantsCount);
// notify && participantsCount == 1 ? shareRoom() : sound('joined');
if (notify && participantsCount == 1) {
shareRoom();