*/\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.IsContains(rno))\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
}\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
\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.IsContains(rno) && $rooms.Get(rno).SetPassword(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.Get(rno).IsTimeout() ||\r
$rooms.Get(rno).IsFirstAuth())\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.Get(rno).IsOwner(msg.name))\r
{\r
var rno = GetRoomNumberFromName(socket.namespace.name);\r
\r
if(msg.name != $system_name && \r
- $rooms.IsContains(rno) &&\r
+ $rooms.Get(rno).IsVolatile() == false &&\r
!$rooms.Get(rno).IsAuthed(msg.name) &&\r
!$rooms.Get(rno).IsOwner(rno,msg.name))\r
{\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
}\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,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
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
}\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