OSDN Git Service

一部ルームで退出したにもかかわらず名前が表示されるバグを修正した
[webchat/WebChat.git] / chatServer.js
index 95bdb36..78dad96 100644 (file)
@@ -3,7 +3,8 @@
  */\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
@@ -194,11 +195,14 @@ for(var i = 0; i < $max_room_number; i++)
        .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
@@ -212,6 +216,10 @@ for(var i = 0; i < $max_room_number; i++)
                }\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
@@ -267,6 +275,14 @@ function ParseAuthorization(handshakeData, callback)
 \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
@@ -277,7 +293,7 @@ function ParseSetPassword(socket,msg)
                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
@@ -295,7 +311,14 @@ function ParseJoin(socket,msg)
        }\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
@@ -337,7 +360,14 @@ function ParseQuit(socket,msg)
                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
@@ -370,7 +400,7 @@ function ParseSendMsg(socket,msg)
        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
@@ -545,6 +575,8 @@ function RoomInfomationCollection()
                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
@@ -625,13 +657,18 @@ function RoomInfomationCollection()
        }\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
@@ -639,10 +676,30 @@ function RoomInfomationCollection()
 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
@@ -698,6 +755,15 @@ function RoomInfomation(pass,hiddenlogflag)
                }\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