我正在使用room occupant listener来监听会议室中用户的更新。在演示中,用户列表随新用户更新,并且具有用于呼叫每个用户的按钮,类似于即时消息程序中的联系人列表。我想要做的是电话会议,无论何时用户连接,他们都会被其他人自动呼叫。
以下是我的代码目前的样子:
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中对此进行了测试。
我使用正确的听众吗?当新用户进入房间时,是否还有其他方法可以自动向对等方发起呼叫?
答案 0 :(得分:2)
每当用户列表更新时,不应尝试调用userList中的任何新用户,而是应该只是加入会议室的用户负责呼叫其他人。通过这种方式,您可以设置一个链:
等等。这样做的方法是跟踪用户第一次进入房间的时间。
进入房间时,事件监听器按以下顺序执行:
对于已经在房间内的其他用户,只会执行房间占用者监听器。
这意味着当您进入房间时,您将获得当前用户列表,然后您可以循环并呼叫每个用户。但是第二次获得更新的用户列表时,在房间占用者监听器中,您不呼叫任何其他用户。
更新用户列表时调用其他用户的解决方案是:
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;
}
});