1

サーバーサイドのユーザーリストにすべてのユーザーを保持する必要があるオーディオ、ビデオ、およびチャットアプリケーションを作成するために webrtc を使用しています。これを行う方法の助けが必要です。

また、ユーザーがシステムからログアウトするときに、ユーザーをリストから削除するにはどうすればよいですか。

これを実装するには助けが必要です。

 webRTC.rtc.on('connect', function(rtc) {
 //Client connected
 });

 webRTC.rtc.on('send answer', function(rtc) {
 //answer sent
 });

 webRTC.rtc.on('disconnect', function(rtc) {
 //Client disconnect
     //console.log(webRTC);
 });

 webRTC.rtc.on('chat_msg', function(data, socket) {
     var roomList = webRTC.rtc.rooms[data.room] || [];

     for (var i = 0; i < roomList.length; i++) {
         var socketId = roomList[i];

         if (socketId !== socket.id) {
             var soc = webRTC.rtc.getSocket(socketId);

             if (soc) {
                 soc.send(JSON.stringify({
                     "eventName": "receive_chat_msg",
                     "data": {
                     "messages": data.messages,
                     "id": data.id,
                     "from": data.from,
                     "status": data.status,
                     "email": data.email
                     }
                 }), function(error) {
                     if (error) {
                     console.log(error);
                 }
                 });
             }
         }
     }
 });
4

2 に答える 2

1

Node.js コード:

var users = {};
io.sockets.on('connection', function (socket) {
    socket.emit('connect', true);

    socket.on('message', function (data) {
        socket.broadcast.emit('message', data);
    });

    socket.on('new-user', function (username) {
        users[username] = username;
    });

    socket.on('check-presence', function (username) {
        var isUserPresent = !! users[username];
        socket.emit('presence', isUserPresent);
    });

    socket.on('remove-user', function (username) {
        var user = users[username];
        if (user) delete users[username];
    });
});

これも機能する可能性があります(node.js):

var users = {};
io.sockets.on('connection', function (socket) {
    var UserName;

    socket.emit('connect', true);
    socket.on('message', function (data) {
        socket.broadcast.emit('message', data);
    });

    socket.on('new-user', function (username) {
        users[username] = username;
        UserName = username;
    });

    socket.on('check-presence', function (username) {
        var isUserPresent = !! users[username];
        socket.emit('presence', isUserPresent);
    });

    // removing user on "disconnect"
    socket.on('disconnect', function () {
        var user = users[UserName];
        if (user) delete users[UserName];
    });
});

最初のケースの場合; クライアント側のコード:

var socket = io.connect();

socket.on('connect', function () {
    socket.emit('new-user', 'username');
});

function removeUser() {
    socket.emit('remove-user', 'username');
}

window.onbeforeunload = function () {
    removeUser();
};

// if someone pressed "F5" key to refresh the page
window.onkeyup = function (e) {
    if (e.keyCode == 116)
        removeUser();
};

// if someone leaves via <a href>
var anchors = document.querySelectorAll('a'),
    length = anchors.length;
for (var i = 0; i < length; i++) {
    var a = anchors[i];
    if (a.href.indexOf('#') !== 0 && a.getAttribute('target') != '_blank')
        a.onclick = function () {
            removeUser();
        };
}

2番目のケースの場合; クライアント側のコード:

var socket = io.connect();

socket.on('connect', function () {
    socket.emit('new-user', 'username');
});

存在も確認できます:

socket.on('presence', isUserPresent) {
    // boolean: user is present or not
});

socket.emit('check-presence', 'username');
于 2013-07-05T13:08:56.167 に答える