使用easyrtc的房间用户监听器,如何在用户列表更新后立即呼叫其他用户?

时间:2014-05-08 21:19:46

标签: javascript node.js webrtc easyrtc

我正在使用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中对此进行了测试。

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

1 个答案:

答案 0 :(得分:2)

每当用户列表更新时,不应尝试调用userList中的任何新用户,而是应该只是加入会议室的用户负责呼叫其他人。通过这种方式,您可以设置一个链:

  1. 用户X加入会议室
  2. 用户Y加入房间
    1. 为用户X更新用户列表
    2. 用户Y呼叫用户X
  3. 用户Z加入会议室:
    1. 为用户X和Y
    2. 更新用户列表
    3. 用户Z呼叫用户X
    4. 用户Z呼叫用户Y
  4. 等等。这样做的方法是跟踪用户第一次进入房间的时间。

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

    1. 入室听众
    2. 房间居住者听众
    3. 对于已经在房间内的其他用户,只会执行房间占用者监听器。

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

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

      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;
          }
      });