Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 68 additions & 9 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
}
Expand Down
5 changes: 5 additions & 0 deletions public/scripts/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -26,6 +27,7 @@ var wsClient = {
,type: msg.type
,speakername: this.loginusername
,roomname: this.roomname
,prevroomname: this.prevroomname
};
this.ws.send(JSON.stringify(sendContents));
}
Expand Down Expand Up @@ -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;
}
Expand All @@ -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() {
Expand Down