OSDN Git Service

部屋の設定を保存するようにした
authorkonekoneko <jbh03215@gmail.com>
Fri, 21 Sep 2012 18:34:31 +0000 (03:34 +0900)
committerkonekoneko <jbh03215@gmail.com>
Fri, 21 Sep 2012 18:34:31 +0000 (03:34 +0900)
chatServer.js

index 687d819..16ae00e 100644 (file)
@@ -10,6 +10,7 @@ $password_setted_message = "パスワードを設定しました";    //パスワ
 $password_resetted_message = "パスワードをリセットしました";     //パスワードが再設定されたときに表示されるメッセージ\r
 $failed_set_password_message = "パスワードの設定に失敗しました";        //パスワードが再設定されたときに表示されるメッセージ\r
 $ip_ban_list_file_name = "ipbanlist.txt";      //アクセスを禁止するIPが記録されているファイル\r
+$room_configure_file_name = "roomlist.txt";    //ルームの設定が記録されているファイル\r
 $port = process.env.port || 3000;      //ポート\r
 $username = "admin";   //管理者用のページにアクセスできるユーザ名\r
 $password = "admin";   //管理者用のページにアクセスするのに必要なパスワード\r
@@ -23,18 +24,6 @@ $log_file_name = "logfile%d.txt";    //ログファイル名(%dはそのままに
 $splited_log_file_name = "logfile%d_%s.txt"    //分割後のファイル名(%dと%sはそのままにしておくこと)\r
 $pastlogfile_pattern = "logfile%d(_+.*)?\.txt";        //過去ログと判定する正規表現\r
 $logfile_pattern = "logfile[0-9]+(_*.*)?\.txt" //過去ログと判定する正規表現\r
-//パスワードを自由に設定できる部屋のリスト\r
-//     rno     設定したい部屋番号\r
-//     password        パスワードを設定する。nullにすると利用者がパスワードの設定をすることができる\r
-//記述例:\r
-//     new RoomInfomationCollection(\r
-//             {rno:"1",password:"test"},\r
-//             {rno:"2",password:null}\r
-//     )\r
-$rooms = new RoomInfomationCollection(\r
-       {rno:"1",password:"test"},\r
-       {rno:"2",password:null}\r
-);\r
 \r
 /**\r
  * Module dependencies.\r
@@ -134,8 +123,9 @@ app.post("/admin",function(req,res){
        }\r
        if(typeof(req.body.updateroom) != "undefined")\r
        {\r
-               CreateRoomsFromString(req.body.newroomlist);\r
-               renderAdmin(req,res);\r
+               $rooms.Update(req.body.newroomlist,function(){\r
+                       renderAdmin(req,res);\r
+               });\r
        }\r
 });\r
 \r
@@ -194,6 +184,7 @@ io.configure('production', function(){
 var clients = new Array();\r
 \r
 var ipbanlist = new IpBanCollecion();\r
+var $rooms = new RoomInfomationCollection();\r
 \r
 createLogDirectory();\r
 \r
@@ -537,17 +528,6 @@ function CreateMessageFromText(text)
 function RoomInfomationCollection()\r
 {\r
        var collection = {};\r
-       this.Clear = function(){\r
-               collection = {};\r
-       };\r
-       this.Add = function(rno,pass){\r
-               collection[rno] = {time : null,\r
-                       password : pass,\r
-                       owner : null,\r
-                       authed_list : {}};\r
-               if(pass != null)\r
-                       collection[rno].owner = $system_name;\r
-       };\r
        this.Reset = function(rno,owner){\r
                var date = new Date();\r
                var time = date.getTime();\r
@@ -636,35 +616,70 @@ function RoomInfomationCollection()
                }\r
                return retval;\r
        }\r
-\r
-       for(var i=0; i<arguments.length; i++)\r
-       {\r
-               this.Add(arguments[i].rno,arguments[i].password);\r
-       }       \r
-}\r
-\r
-function CreateRoomsFromString(str)\r
-{\r
-       $rooms.Clear();\r
-       var lines = str.split("\r\n");\r
-       for(var i in lines)\r
-       {\r
-               if(lines[i] == "")\r
-                       continue;\r
-               var token = lines[i].split(":");\r
-               if(token.length == 1)\r
-               {\r
-                       $rooms.Add(token[0],null);\r
-               }\r
-               else if(token.length == 2)\r
-               {\r
-                       var rno = token[0];\r
-                       var pass = token[1];\r
-                       if(pass == "")\r
-                               pass = null;\r
-                       $rooms.Add(rno, pass);\r
-               }\r
+       this.Update = function(text,callfunc){\r
+               async.waterfall([\r
+                       function(callback){\r
+                               fs.open($room_configure_file_name,"w",callback);\r
+                       },\r
+                       function(fd,callback){\r
+                               var buf = new Buffer(text);\r
+                               fs.write(fd,buf,0,Buffer.byteLength(text),null,function(){\r
+                                       callback(null,fd);\r
+                               });\r
+                       },\r
+                       function(fd,callback){\r
+                               fs.close(fd,function(){\r
+                                       GetRoomList(callfunc);\r
+                               });\r
+                       }\r
+               ]);\r
+       }\r
+       function GetRoomList(callback){\r
+               Clear();\r
+               path.exists($room_configure_file_name,function(exists){\r
+                       if(exists == false)\r
+                       {\r
+                               if(typeof(callback) == "function")\r
+                                       callback();\r
+                               return;\r
+                       }\r
+                       var stream = fs.createReadStream($room_configure_file_name);\r
+                       new lazy(stream)\r
+                               .lines\r
+                               .forEach(function(line){\r
+                                       var token = line.toString().replace(/(\r|\n|\r\n)/gm, "").split(":");\r
+                                       if(token.length == 1)\r
+                                       {\r
+                                               Add(token[0],null);\r
+                                       }\r
+                                       else if(token.length == 2)\r
+                                       {\r
+                                               var rno = token[0];\r
+                                               var pass = token[1];\r
+                                               if(pass == "")\r
+                                                       pass = null;\r
+                                               Add(rno, pass);\r
+                                       }\r
+                               })\r
+                               .join(function(){\r
+                                       if(typeof(callback) == "function")\r
+                                               callback();\r
+                               });\r
+               });\r
        }\r
+       function Clear(){\r
+               collection = {};\r
+       };\r
+       function Add(rno,pass){\r
+               collection[rno] = {time : null,\r
+                       password : pass,\r
+                       owner : null,\r
+                       authed_list : {}};\r
+               if(pass != null)\r
+                       collection[rno].owner = $system_name;\r
+       };\r
+\r
+       GetRoomList();\r
 }\r
 \r
 //IPBANクラス\r