How can I add multiple chat rooms in RTCMultiConnection V3.0 in a single page

2.9k Views Asked by At

I want to create multiple chat rooms on a single page, where user can video/audio/text chat for different rooms. I have done for a single, but I don't have much idea about connection with on a single page.

I am using RTCMultiConnection V3.0 for single chat room.

I want to achieve mentioned in the below image.

Multiple Chat rooms

Can anyone help me to achieve this?

2

There are 2 best solutions below

1
On BEST ANSWER

Either use multiple RTCMultiConnection instances:

var room1 = new RTCMultiConnection();
var room2 = new RTCMultiConnection();
var room3 = new RTCMultiConnection();

room1.join('room1-unique-ID');
room2.join('room2-unique-ID');
room3.join('room3-unique-ID');

Or use this trick:

connection.session.broadcast = true;
connection.open('each-user-unique-id'); // each user should call this

Now each user can join any room:

connection.join('first-room');
connection.join('second-room');
connection.join('third-room');

Remember, we set {broadcast:true} above; which means that join method will merely allows you join only the room owner/moderator/initiator.

You need to ask room moderator to give you list of all his participants.

var alreadyGivedParticipants = {};

connection.onPeerStateChanged = function(state) {
    if (state.iceConnectionState !== 'connected') return; // ignore
    if (alreadyGivedParticipants[state.userid]) return;
    alreadyGivedParticipants[state.userid] = true; // to make sure we don't duplicate

    connection.socket.emit(connection.socketCustonEvent, {
        participants: connection.getAllParticipants(),
        onlyForThisUser: state.userid
    });
};

connection.connectSocket(function() {
    connection.socket.on(connection.socketCustonEvent, function(message) {
        if (message.onlyForThisUser !== connection.userid) return; // ignore

        message.participants.forEach(function(pid) {
            connection.join(pid); // join all room participants
        });
    });
});

You can even give each new user's information to existing participants.

var alreadyGivedParticipants = {};

connection.onPeerStateChanged = function(state) {
    if (state.iceConnectionState !== 'connected') return; // ignore
    if (alreadyGivedParticipants[state.userid]) return;
    alreadyGivedParticipants[state.userid] = true; // to make sure we don't duplicate  

    connection.socket.emit(connection.socketCustonEvent, {
        participants: connection.getAllParticipants(),
        onlyForThisUser: state.userid
    });

    // below block shares new user with existing participants
    connection.getAllParticipants().forEach(function(existingUser) {
        connection.socket.emit(connection.socketCustonEvent, {
            participants: [state.userid],
            onlyForThisUser: existingUser
        });
    });
};

connection.connectSocket(function() {
    connection.socket.on(connection.socketCustonEvent, function(message) {
        if (message.onlyForThisUser !== connection.userid) return; // ignore

        message.participants.forEach(function(pid) {
            connection.join(pid); // join all room participants
        });
    });
});

You can use getPublicModerators method to get list of all public rooms. A live demo.

0
On

creating room list is easy with PHP than rtcmulti...publicModarator, just create a table(room) with id,opener,joiner,stat,timejoin. Use Ajax code to write initiator'name in the table and access it in main file itself, create a seperate file for joiners, it will show only those who have already openef/streamed.

For multiroom/catagory, you need one more variable "type" then use exact mysql with searching machanism !!!