2

我正在使用房间占用侦听器来侦听房间内用户的更新。在演示中,用户列表会随着新用户而更新,并且他们具有用于呼叫每个用户的按钮,类似于即时消息程序中的联系人列表。我想做的是电话会议,每当用户连接时,其他人都会自动呼叫他们。

这是我的代码当前的样子:

var calledUsers = {};
easyrtc.setRoomOccupantListener(function (roomName, userList, selfInfo) {
    for (easyrtcid in userList) {
        if (easyrtcid in calledUsers && calledUsers[easyrtcid]) {
            console.log('already in call with', easyrtcid);
        } else {
            easyrtc.call(
                easyrtcid,
                function success(otherCaller, mediaType) {
                    calledUsers[easyrtc] = true;
                },
                function failure(errorCode, errorMessage) {
                    calledUsers[easyrtc] = false;
                }
            );
        }
    }
});

我在桌面和移动设备上的 Chrome 和 Firefox 中对此进行了测试。

我使用了正确的听众吗?当新用户进入房间时,是否有其他方法可以自动发起与同伴的呼叫?

4

1 回答 1

2

与其在 userList 更新时尝试呼叫任何新用户,不如让刚刚加入房间的用户负责呼叫其他所有人。这样你就建立了一个链:

  1. 用户 X 加入房间
  2. 用户 Y 加入房间
    1. 为用户 X 更新了用户列表
    2. 用户 Y 呼叫用户 X
  3. 用户 Z 加入房间:
    1. 为用户 X 和 Y 更新用户列表
    2. 用户 Z 呼叫用户 X
    3. 用户 Z 呼叫用户 Y

等等。做到这一点的方法是跟踪用户第一次进入房间的时间。

进入房间时,事件监听器按以下顺序执行:

  1. 房间进入监听器
  2. 房间占用听众

对于已经在房间里的其他用户,只会执行房间占用监听器。

这意味着当你进入一个房间时,你会得到当前的用户列表,然后你可以循环调用每个用户。但是第二次获得更新的用户列表时,在房间占用监听器中,您不会调用任何其他用户。

每当更新用户列表时调用其他用户的解决方案是:

var needToCallOtherUsers;

easyrtc.setRoomEntryListener(function(entry, roomName) {
    needToCallOtherUsers = true;
});

easyrtc.setRoomOccupantListener(function(roomName, userList, selfInfo) {
    var easyrtcid;
    if (needToCallOtherUsers) {
        for (easyrtcid in userList) {
            easyrtc.call(
                easyrtcid,
                function success(otherCaller, mediaType) {
                    console.log('success: ', otherCaller, mediaType);
                },
                function failure(errorCode, errorMessage) {
                    console.log('failure: ', errorCode, errorMessage);
                }
            );
        }
        needToCallOtherUsers = false;
    }
});
于 2014-05-14T21:47:16.087 回答