From 4066f1220e1268bdbadc212db58b8b6d271dba84 Mon Sep 17 00:00:00 2001 From: TAW-Memento Date: Fri, 22 Aug 2014 16:58:59 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=A0=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=81=AB=E3=81=8A=E3=81=91=E3=82=8B=E7=B9=B0=E3=82=8A?= =?UTF-8?q?=E8=BF=94=E3=81=97=E5=87=A6=E7=90=86=E3=81=AE=E5=8A=B9=E7=8E=87?= =?UTF-8?q?=E5=8C=96(#45)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 発言をほかのクライアントに送信する際にルーム内のコネクションの回数分処理を回す形に変更 --- app.js | 61 ++++++++++++++++++++++++++++++++++------ public/scripts/client.js | 5 ++++ 2 files changed, 57 insertions(+), 9 deletions(-) diff --git a/app.js b/app.js index fa111f1..0772b0f 100755 --- a/app.js +++ b/app.js @@ -24,20 +24,63 @@ var wsserver = new WebSocketServer( { }); var conns = []; -wsserver.on('connection', function(ws) { - conns.push({ - socket: ws + +conns.push({ + socket: [] ,roomname: 'default' - }); +}); + +wsserver.on('connection', function(ws) { + for (var conn in conns) { + if(conns[conn].roomname == 'default') { + conns[conn].socket.push(ws); + break; + } + } ws.on('message', function(message) { + var jsonMessage = JSON.parse(message); + var isExistRoom = false; conns.forEach(function(conn) { - try { - var jsonMessage = JSON.parse(message); - if (conn.socket === ws && conn.roomname != jsonMessage.roomname) { - conn.roomname = jsonMessage.roomname; + if(conn.roomname == jsonMessage.roomname) { + isExistRoom = true; + } + }); + console.log('¥n'); + conns.forEach(function(debug) { + console.log(debug.roomname); + + }); + console.log('¥n'); + if(ws.prevroomname != ws.roomname){ + //部屋がなかった場合にconnsへ追加する。 + if (!isExistRoom) { + conns.push({ + socket: [ws] + ,roomname: jsonMessage.roomname + }); + } + for(var conn in conns) { + if(conns[conn].roomname == jsonMessage.prevroomname) { + conns[conn].socket.splice(conns[conn].socket.indexOf(ws), 1); + console.log('socket in room die!'); + if(conns[conn].roomname != 'default' && + conns[conn].socket.length == 0) { + conns.splice(conns[conn].roomname.indexOf(jsonMessage.prevroomname), 1); + console.log('room erase!'); + } } + } + } + + conns.forEach(function(conn) { + try { + console.log(conn.roomname); + console.log(jsonMessage.roomname); if (conn.roomname == jsonMessage.roomname) { - conn.socket.send(message); + for (var soc in conn.socket) { + conn.socket[soc].send(message); + console.log('send ok!'); + } } } catch(e) { } diff --git a/public/scripts/client.js b/public/scripts/client.js index 6415d09..58b2a55 100644 --- a/public/scripts/client.js +++ b/public/scripts/client.js @@ -7,6 +7,7 @@ var wsClient = { ws: null, loginusername: 'Anonymous', roomname: 'default', + prevroomname: 'default', init: function(url, handlers) { handlers = handlers || {}; this.ws = new WebSocket(url); @@ -26,6 +27,7 @@ var wsClient = { ,type: msg.type ,speakername: this.loginusername ,roomname: this.roomname + ,prevroomname: this.prevroomname }; this.ws.send(JSON.stringify(sendContents)); } @@ -67,6 +69,7 @@ var closeWs = function() { var changeView = function(msg) { msg = JSON.parse(msg.data); + console.log(msg); if (msg.type == 'message') { msg = msg.speakername + ':' + msg.data; } @@ -93,12 +96,14 @@ var roominBtnClick = function() { alert('Please input room name!'); return; } + wsClient.prevroomname = wsClient.roomname; wsClient.roomname = inputroomname.value; wsClient.sendMessage({ data: wsClient.loginusername + ' login' ,type: 'systemlog' }); changeRoomNameOutput(); + wsClient.prevroomname = inputroomname.value; }; var changeRoomNameOutput = function() { From ee917776644559ac2b8e7e21135e0c81aba272bb Mon Sep 17 00:00:00 2001 From: TAW-Memento Date: Mon, 15 Sep 2014 11:19:45 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E9=83=A8=E5=B1=8B=E3=82=92=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=81=99=E3=82=8B=E9=9A=9B=E3=81=AE=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=81=AB=E3=83=90=E3=82=B0=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=81=9F=E3=82=81fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 76 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 30 deletions(-) diff --git a/app.js b/app.js index 0772b0f..d604a47 100755 --- a/app.js +++ b/app.js @@ -32,7 +32,7 @@ conns.push({ wsserver.on('connection', function(ws) { for (var conn in conns) { - if(conns[conn].roomname == 'default') { + if (conns[conn].roomname == 'default') { conns[conn].socket.push(ws); break; } @@ -40,46 +40,62 @@ wsserver.on('connection', function(ws) { ws.on('message', function(message) { var jsonMessage = JSON.parse(message); var isExistRoom = false; - conns.forEach(function(conn) { - if(conn.roomname == jsonMessage.roomname) { - isExistRoom = true; + //console.log('DEBUG:', jsonMessage); + if (jsonMessage.roomname != jsonMessage.prevroomname) { + //console.log('DEBUG:roomname check'); + conns.forEach(function(conn) { + //console.log('DEBUG:', conn.roomname); + if (conn.roomname == jsonMessage.roomname) { + isExistRoom = true; + //console.log('DEBUG:isExistroom get!'); + } + }); + //console.log('DEBUG:roomname check end'); + //部屋移動前の情報を削除する + for(var conn in conns) { + if(jsonMessage.roomname != jsonMessage.prevroomname && + conns[conn].roomname == jsonMessage.prevroomname) { + //部屋からの退出を行う。 + conns[conn].socket.splice(conns[conn].socket.indexOf(ws), 1); + if(conns[conn].roomname != 'default' && + conns[conn].socket.length == 0) { + //誰もいなくなったdefault以外の部屋は削除する処理 + //console.log('DEBUG:', jsonMessage.prevroomname, 'is close!'); + //console.log('DEBUG:', conns[conn].roomname); + conns.splice(conns[conn].roomname.indexOf(jsonMessage.prevroomname), 1); + } } - }); - console.log('¥n'); - conns.forEach(function(debug) { - console.log(debug.roomname); - - }); - console.log('¥n'); - if(ws.prevroomname != ws.roomname){ - //部屋がなかった場合にconnsへ追加する。 - if (!isExistRoom) { - conns.push({ - socket: [ws] + } + //部屋がなかった場合にconnsへ追加する。 + if (!isExistRoom) { + //console.log('DEBUG:', conns.length); + conns.push({ + socket: [ws] ,roomname: jsonMessage.roomname - }); - } - for(var conn in conns) { - if(conns[conn].roomname == jsonMessage.prevroomname) { - conns[conn].socket.splice(conns[conn].socket.indexOf(ws), 1); - console.log('socket in room die!'); - if(conns[conn].roomname != 'default' && - conns[conn].socket.length == 0) { - conns.splice(conns[conn].roomname.indexOf(jsonMessage.prevroomname), 1); - console.log('room erase!'); + }); + //console.log('DEBUG:', conns.length); + //console.log('DEBUG:', jsonMessage.roomname, ' room make!'); + } else { + //console.log('DEBUG:room in'); + //既存の部屋に新規にsocketを追加する。 + //console.log('DEBUG:', conns.roomname); + for (var conn in conns) { + if (jsonMessage.roomname == conns[conn].roomname) { + conns[conn].socket.push(ws); } } } } - + //console.log('DEBUG:conns length:'+conns.length); conns.forEach(function(conn) { try { - console.log(conn.roomname); - console.log(jsonMessage.roomname); + //console.log('DEBUG:connname:',conn.roomname); + //console.log('DEBUG:jsonMessagename:',jsonMessage.roomname); if (conn.roomname == jsonMessage.roomname) { + //console.log('DEBUG:',conn.socket.length); for (var soc in conn.socket) { conn.socket[soc].send(message); - console.log('send ok!'); + //console.log('DEBUG:send ok!'); } } } catch(e) {