diff --git a/app.js b/app.js index fa111f1..d604a47 100755 --- a/app.js +++ b/app.js @@ -24,20 +24,79 @@ 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; + //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); + } + } + } + //部屋がなかった場合にconnsへ追加する。 + if (!isExistRoom) { + //console.log('DEBUG:', conns.length); + conns.push({ + socket: [ws] + ,roomname: jsonMessage.roomname + }); + //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 { - var jsonMessage = JSON.parse(message); - if (conn.socket === ws && conn.roomname != jsonMessage.roomname) { - conn.roomname = jsonMessage.roomname; - } + //console.log('DEBUG:connname:',conn.roomname); + //console.log('DEBUG:jsonMessagename:',jsonMessage.roomname); if (conn.roomname == jsonMessage.roomname) { - conn.socket.send(message); + //console.log('DEBUG:',conn.socket.length); + for (var soc in conn.socket) { + conn.socket[soc].send(message); + //console.log('DEBUG: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() {