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. 部屋の住人の聞き手

すでにルームにいる他のユーザーについては、ルーム占有リスナーのみが実行されます。

これは、ルームに入ると現在のユーザー リストを取得し、ループして各ユーザーに電話をかけることができることを意味します。しかし、部屋の占有者リスナーで更新されたユーザー リストを 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 に答える