*/\r
$max_room_number = 3; //最大ルーム数\r
$spilt_size = 1024 * 512; //分割するサイズ\r
-$reset_password_diff = 1000 * 60 * 60;\r
+$reset_password_diff = 1000 * 60 * 60; //ルームパスワードをリセットする間隔\r
+$gc_time_interval = 1000 * 60 * 60; //ゴミ掃除を行う間隔\r
$block_message = "メッセージの送信に失敗しました"; //ブロック時のメッセージ\r
$not_match_password = "パスワードが一致しませんでした"; //パスワードが一致しない場合に表示されるメッセージ\r
$password_setted_message = "パスワードを設定しました"; //パスワードが設定されたときに表示されるメッセージ\r
.of(GetNameFromRoomNumber(i))\r
.authorization(ParseAuthorization)\r
.on("connection", function (socket) {\r
- console.log("connected from %s",GetClientIPAdress(socket));\r
+ var ip = GetClientIPAdress(socket);\r
+\r
+ console.log("connected from %s",ip);\r
\r
var rno = GetRoomNumberFromName(socket.namespace.name);\r
var roomconfig = {};\r
- if($rooms.IsFixedPassword(rno))\r
- roomconfig.type = 2;\r
- else if($rooms.IsContains(rno))\r
- roomconfig.type = 1;\r
- else\r
+ $rooms.Get(rno).AddRom(ip);\r
+ if($rooms.Get(rno).IsVolatile() == false)\r
+ {\r
+ if($rooms.Get(rno).IsFixedPassword())\r
+ roomconfig.type = 2;\r
+ else if($rooms.Get(rno).IsHiddenLogFromRom())\r
+ roomconfig.type = 3;\r
+ else\r
+ roomconfig.type = 1;\r
+ roomconfig.IsOwned = !$rooms.Get(rno).IsFirstAuth();\r
+ }else{\r
roomconfig.type = 0;\r
- roomconfig.IsOwned = !$rooms.IsFirstAuth(rno);\r
+ }\r
socket.json.emit("send roominfo",roomconfig);\r
\r
+ var romcount = $rooms.Get(rno).GetRomCount();\r
+ socket.json.emit("send romcount",romcount);\r
+ socket.json.broadcast.emit("send romcount",romcount);\r
+\r
socket.on("get pastLogList", function (msg) {\r
ParseGetPastLogList(socket,msg);\r
});\r
var sessionID = parseCookie(cookie)["connect.sid"];\r
sessionStore.get(sessionID, function (err, session) {\r
var result = null;\r
- if (err || ipbanlist.IsBaned(handshakeData.address.address))\r
+ if (ipbanlist.IsBaned(handshakeData.address.address))\r
result = "failed get from session store";\r
+ else if(err)\r
+ result = err;\r
else if(handshakeData.query.token != session.items.token)\r
result = "invaild token";\r
sessionStore.destroy(sessionID);\r
\r
function ParseDisconnect(socket,msg)\r
{\r
+ var ip = GetClientIPAdress(socket);\r
+ var rno = GetRoomNumberFromName(socket.namespace.name);\r
+ $rooms.Get(rno).RemoveRom(ip);\r
+\r
+ var romcount = $rooms.Get(rno).GetRomCount();\r
+ socket.json.emit("send romcount",romcount);\r
+ socket.json.broadcast.emit("send romcount",romcount);\r
+\r
console.log("disconnected");\r
}\r
\r
name:$system_name,\r
message:null,\r
};\r
- if($rooms.SetPassword(rno,msg.owner,msg.password))\r
+ if($rooms.Get(rno).IsVolatile() == false && $rooms.Get(rno).SetPassword(msg.owner,msg.password))\r
newMeg.message = $password_setted_message;\r
else\r
newMeg.message = $failed_set_password_message;\r
}\r
\r
var rno = GetRoomNumberFromName(socket.namespace.name);\r
- if($rooms.IsContains(rno))\r
+\r
+ $rooms.Get(rno).RemoveRom(ip);\r
+ \r
+ var romcount = $rooms.Get(rno).GetRomCount();\r
+ socket.json.emit("send romcount",romcount);\r
+ socket.json.broadcast.emit("send romcount",romcount);\r
+\r
+ if($rooms.Get(rno).IsVolatile() == false)\r
{\r
- if($rooms.IsTimeout(rno) ||\r
- $rooms.IsFirstAuth(rno))\r
+ if($rooms.Get(rno).IsTimeout() ||\r
+ $rooms.Get(rno).IsFirstAuth())\r
{\r
- $rooms.Reset(rno,msg.name);\r
+ $rooms.Get(rno).Reset(msg.name);\r
ParseGetPastLog(socket,util.format($log_file_name,rno));\r
}\r
- else if($rooms.Auth(rno,msg.name,msg.password))\r
+ else if($rooms.Get(rno).Auth(msg.name,msg.password))\r
{\r
ParseGetPastLog(socket,util.format($log_file_name,rno));\r
}\r
name:$system_name,\r
message:$password_resetted_message,\r
};\r
- if($rooms.IsContains(rno))\r
+\r
+ $rooms.Get(rno).AddRom(ip);\r
+\r
+ var romcount = $rooms.Get(rno).GetRomCount();\r
+ socket.json.emit("send romcount",romcount);\r
+ socket.json.broadcast.emit("send romcount",romcount);\r
+\r
+ if($rooms.Get(rno).IsVolatile() == false)\r
{\r
- if($rooms.IsOwner(rno,msg.name))\r
+ if($rooms.Get(rno).IsOwner(msg.name))\r
{\r
- $rooms.Reset(rno,null);\r
+ $rooms.Get(rno).Reset(null);\r
ParseSendMsg(socket,newMeg);\r
}\r
- if(!$rooms.IsFirstAuth(rno) &&\r
- !$rooms.IsAuthed(rno,msg.name))\r
+ if(!$rooms.Get(rno).IsFirstAuth() &&\r
+ !$rooms.Get(rno).IsAuthed(msg.name))\r
return;\r
else\r
- $rooms.RemoveAuth(rno,msg.name);\r
+ $rooms.Get(rno).RemoveAuth(msg.name);\r
}\r
\r
newMeg.message = util.format("/quitedby %s",msg.name);\r
var rno = GetRoomNumberFromName(socket.namespace.name);\r
\r
if(msg.name != $system_name && \r
- $rooms.IsContains(rno) &&\r
- !$rooms.IsAuthed(rno,msg.name) &&\r
- !$rooms.IsOwner(rno,msg.name))\r
+ $rooms.Get(rno).IsVolatile() == false &&\r
+ !$rooms.Get(rno).IsAuthed(msg.name) &&\r
+ !$rooms.Get(rno).IsOwner(rno,msg.name))\r
{\r
return;\r
}\r
function RoomInfomationCollection()\r
{\r
var collection = {};\r
- this.Reset = function(rno,owner){\r
- var date = new Date();\r
- var time = date.getTime();\r
- collection[rno].password = null;\r
- collection[rno].authed_list = {};\r
- collection[rno].owner = owner;\r
- collection[rno].time = time;\r
- console.log(util.format("password is reseted in %s",rno));\r
- };\r
+ this.Get = function(rno){\r
+ return collection[rno];\r
+ }\r
this.IsContains = function(rno){\r
return rno in collection;\r
};\r
- this.IsFirstAuth = function(rno){\r
- if(!this.IsContains(rno) || typeof(collection[rno].owner) == "undefined")\r
- return false;\r
- return collection[rno].owner == null;\r
- }\r
- this.IsAuthed = function(rno,name){\r
- if(!this.IsContains(rno))\r
- return false;\r
- return name == collection[rno].owner ||\r
- name in collection[rno].authed_list;\r
- };\r
- this.IsFixedPassword = function(rno){\r
- if(!this.IsContains(rno))\r
- return false;\r
- return collection[rno].owner == $system_name;\r
- };\r
- this.IsOwner = function(rno,name){\r
- return this.IsContains(rno) &&\r
- typeof(collection[rno].owner) != "undefined" &&\r
- collection[rno].owner == name;\r
- }\r
- this.IsTimeout = function(rno){\r
- var date = new Date();\r
- var time = date.getTime();\r
- return this.IsContains(rno) &&\r
- !this.IsFixedPassword(rno) &&\r
- (typeof(collection[rno].time) != "undefined" &&\r
- time - collection[rno].time >= $reset_password_diff);\r
- };\r
- this.RemoveAuth = function(rno,name)\r
- {\r
- delete collection[rno].authed_list[name];\r
- }\r
- this.Auth = function(rno,name,password){\r
- if(typeof(collection[rno].password) != "undefined" &&\r
- collection[rno].password != password)\r
- return false;\r
- var date = new Date();\r
- var time = date.getTime();\r
- collection[rno].time = time;\r
- collection[rno].authed_list[name] = "";\r
- return true;\r
- }\r
- this.SetPassword = function(rno,owner,password){\r
- if(this.IsContains(rno) && \r
- owner == collection[rno].owner &&\r
- !this.IsFixedPassword(rno))\r
- {\r
- var date = new Date();\r
- collection[rno].time = date.getTime();\r
- collection[rno].password = password;\r
- \r
- console.log(util.format("password is seted to %s in %s",password,rno));\r
- return true;\r
- }\r
- return false;\r
- };\r
this.GetString = function(){\r
var retval = "";\r
for(var rno in collection)\r
{\r
+ if($rooms.Get(rno).IsVolatile())\r
+ continue;\r
var pass = collection[rno].password;\r
if(pass == null)\r
pass = "";\r
- retval += rno + ":" + pass + "\r\n";\r
+ var hiddenlog = collection[rno].hiddenlog;\r
+ retval += rno + ":" + pass + ":" + hiddenlog + "\r\n";\r
}\r
return retval;\r
};\r
var token = line.toString().replace(/(\r|\n|\r\n)/gm, "").split(":");\r
if(token.length == 1)\r
{\r
- Add(token[0],null);\r
+ Add(token[0],null,false);\r
}\r
else if(token.length == 2)\r
{\r
var pass = token[1];\r
if(pass == "")\r
pass = null;\r
- Add(rno, pass);\r
+ Add(rno, pass,false);\r
+ }\r
+ else if(token.length == 3)\r
+ {\r
+ var rno = token[0];\r
+ var pass = token[1];\r
+ if(pass == "")\r
+ pass = null;\r
+ var hiddenlog = false;\r
+ if(token[2] == "true")\r
+ hiddenlog = true;\r
+ Add(rno, pass,hiddenlog);\r
}\r
})\r
.join(function(){\r
}\r
function Clear(){\r
collection = {};\r
+ for(var i = 0; i < $max_room_number; i++)\r
+ Add(i,null,null);\r
};\r
- function Add(rno,pass){\r
- collection[rno] = {time : null,\r
- password : pass,\r
- owner : null,\r
- authed_list : {}};\r
+ function Add(rno,pass,hiddenlogflag){\r
+ collection[rno] = new RoomInfomation(pass,hiddenlogflag);\r
if(pass != null)\r
collection[rno].owner = $system_name;\r
};\r
-\r
+ var $gc_interval_id = setInterval(function(){\r
+ for(var rno in this.rom_list)\r
+ collection[rno].GCRomList();\r
+ },$gc_time_interval);\r
GetRoomList();\r
}\r
\r
+//RoomInfomationクラス\r
+function RoomInfomation(pass,hiddenlogflag)\r
+{\r
+ this.password = pass;\r
+ this.rom_list = {};\r
+ this.authed_list = {};\r
+ this.owner = null;\r
+ this.time = null;\r
+ this.hiddenlog = hiddenlogflag;\r
+ this.IsVolatile = function(){\r
+ return this.owner == null &&\r
+ this.password == null &&\r
+ this.time == null &&\r
+ this.hiddenlog == null;\r
+ }\r
+ this.GetRomCount = function(){\r
+ var count = 0;\r
+ for(var key in this.rom_list)\r
+ count++;\r
+ return count;\r
+ };\r
+ this.AddRom = function(ip){\r
+ var date = new Date();\r
+ this.rom_list[ip] = {time:date.getTime()};\r
+ };\r
+ this.RemoveRom = function(ip){\r
+ delete this.rom_list[ip];\r
+ };\r
+ this.Reset = function(owner){\r
+ var date = new Date();\r
+ var time = date.getTime();\r
+ this.password = null;\r
+ this.authed_list = {};\r
+ this.owner = owner;\r
+ this.time = time;\r
+ };\r
+ this.IsFirstAuth = function(){\r
+ return this.owner == null;\r
+ };\r
+ this.IsAuthed = function(name){\r
+ return name == this.owner ||\r
+ name in this.authed_list;\r
+ };\r
+ this.IsHiddenLogFromRom = function(){\r
+ return this.hiddenlog;\r
+ };\r
+ this.IsFixedPassword = function(){\r
+ return this.owner == $system_name;\r
+ };\r
+ this.IsOwner = function(name){\r
+ return this.owner == name;\r
+ };\r
+ this.IsTimeout = function(){\r
+ var date = new Date();\r
+ var current_time = date.getTime();\r
+ return !this.IsFixedPassword() &&\r
+ current_time - this.time >= $reset_password_diff;\r
+ };\r
+ this.RemoveAuth = function(name)\r
+ {\r
+ delete this.authed_list[name];\r
+ };\r
+ this.Auth = function(name,password){\r
+ if(this.password != password)\r
+ return false;\r
+ var date = new Date();\r
+ var time = date.getTime();\r
+ this.time = time;\r
+ this.authed_list[name] = "";\r
+ return true;\r
+ };\r
+ this.SetPassword = function(owner,password){\r
+ if(owner == this.owner &&\r
+ !this.IsFixedPassword() &&\r
+ !this.IsHiddenLogFromRom())\r
+ {\r
+ var date = new Date();\r
+ this.time = date.getTime();\r
+ this.password = password;\r
+ return true;\r
+ }\r
+ return false;\r
+ };\r
+ this.GCRomList = function(){\r
+ var date = new Date();\r
+ var current_time = date.getTime();\r
+ for(var ip in this.rom_list)\r
+ {\r
+ if(current_time - this.rom_list[ip].time >= $gc_time_interval)\r
+ delete this.rom_list[ip];\r
+ }\r
+ };\r
+}\r
+\r
//IPBANクラス\r
function IpBanCollecion()\r
{\r