OSDN Git Service

ヘルプメッセージの枠の幅と高さを変更した
[webchat/WebChat.git] / chatServer.js
index 7ea7872..16ae00e 100644 (file)
@@ -9,10 +9,8 @@ $not_match_password = "パスワードが一致しませんでした"; //パス
 $password_setted_message = "パスワードを設定しました";     //パスワードが設定されたときに表示されるメッセージ\r
 $password_resetted_message = "パスワードをリセットしました";     //パスワードが再設定されたときに表示されるメッセージ\r
 $failed_set_password_message = "パスワードの設定に失敗しました";        //パスワードが再設定されたときに表示されるメッセージ\r
-$free_password1 = "最初に入室する人が自由にパスワードを設定できます";  //自由パスワードメッセージ1\r
-$free_password2 = "この部屋は使用されています。パスワードを入力してください";      //自由パスワードメッセージ2\r
-$fixed_password = "この部屋にはパスワードが設定されています";      //固定パスワードルーム\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
@@ -26,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
@@ -98,14 +84,7 @@ app.get("/chat", function(req, res){
        var room_number = 0;\r
        if(typeof(req.query.rno) != "undefined")\r
                room_number = req.query.rno;\r
-       var msg = "";\r
-       if($rooms.IsFixedPassword(room_number))\r
-               msg = $fixed_password;\r
-       else if($rooms.IsContains(room_number))\r
-               msg = $free_password2;\r
-       if($rooms.IsFirstAuth(room_number))\r
-               msg = $free_password1;\r
-       res.render("chat",{rno:room_number,token:auth_string,message:msg});\r
+       res.render("chat",{rno:room_number,token:auth_string});\r
 });\r
 \r
 app.all("/log/" + $logfile_pattern,express.basicAuth(function (user, pass) {\r
@@ -144,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
@@ -204,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
@@ -214,7 +195,18 @@ for(var i = 0; i < $max_room_number; i++)
        .authorization(ParseAuthorization)\r
        .on("connection", function (socket) {\r
                console.log("connected from %s",GetClientIPAdress(socket));\r
-               socket.json.emit("send roomlist",$rooms.GetKeys());\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
+                       roomconfig.type = 0;\r
+               roomconfig.IsOwned = !$rooms.IsFirstAuth(rno);\r
+               socket.json.emit("send roominfo",roomconfig);\r
+\r
                socket.on("get pastLogList", function (msg) {\r
                        ParseGetPastLogList(socket,msg);\r
                });\r
@@ -536,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
@@ -567,7 +548,6 @@ function RoomInfomationCollection()
        this.IsAuthed = function(rno,name){\r
                if(!this.IsContains(rno))\r
                        return false;\r
-               console.log(util.inspect(collection[rno].authed_list));\r
                return name == collection[rno].owner ||\r
                        name in collection[rno].authed_list;\r
        };\r
@@ -636,34 +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
-               var token = lines[i].split(":");\r
-               console.log(util.inspect(token));\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