OSDN Git Service

改行が含まれるログをうまく送信できないバグを修正した
authorkonekoneko <jbh03215@gmail.com>
Wed, 3 Oct 2012 21:44:21 +0000 (06:44 +0900)
committerkonekoneko <jbh03215@gmail.com>
Wed, 3 Oct 2012 21:44:21 +0000 (06:44 +0900)
チャットルームに管理用機能を追加した

chatServer.js
public/admin.ejs
public/scripts/chatclient.js
readme.txt

index 78dad96..e2a3ee6 100644 (file)
@@ -24,7 +24,6 @@ $log_directory = "log";       //ログファイルを置くフォルダー
 $log_file_name = "logfile%d.txt";      //ログファイル名(%dはそのままにしておくこと)\r
 $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
 /**\r
  * Module dependencies.\r
@@ -77,10 +76,16 @@ app.configure('production', function(){
   app.use(express.errorHandler()); \r
 });\r
 \r
+function SessionInfomation(token,admin)\r
+{\r
+       this.token = token;\r
+       this.admin = admin;\r
+}\r
+\r
 // Routes\r
 app.get("/chat", function(req, res){\r
        var auth_string = getRandomString($token_length);\r
-       req.session.items = {token:auth_string};\r
+       req.session.items = new SessionInfomation(auth_string,false);\r
 \r
        var room_number = 0;\r
        if(typeof(req.query.rno) != "undefined")\r
@@ -88,12 +93,18 @@ app.get("/chat", function(req, res){
        res.render("chat",{rno:room_number,token:auth_string});\r
 });\r
 \r
-app.all("/log/" + $logfile_pattern,express.basicAuth(function (user, pass) {\r
+app.all("/admin_chat",express.basicAuth(function (user, pass) {\r
        return user === $username && pass === $password;\r
 }));\r
 \r
-app.get("/log/" + $logfile_pattern, function(req, res){\r
-       res.sendfile(__dirname + req.url);\r
+app.get("/admin_chat", function(req, res){\r
+       var auth_string = getRandomString($token_length);\r
+       req.session.items = new SessionInfomation(auth_string,true);\r
+\r
+       var room_number = 0;\r
+       if(typeof(req.query.rno) != "undefined")\r
+               room_number = req.query.rno;\r
+       res.render("chat",{rno:room_number,token:auth_string});\r
 });\r
 \r
 app.all("/admin",express.basicAuth(function (user, pass) {\r
@@ -214,6 +225,7 @@ for(var i = 0; i < $max_room_number; i++)
                }else{\r
                        roomconfig.type = 0;\r
                }\r
+               roomconfig.admin = socket.handshake.admin;\r
                socket.json.emit("send roominfo",roomconfig);\r
 \r
                var romcount = $rooms.Get(rno).GetRomCount();\r
@@ -265,6 +277,7 @@ function ParseAuthorization(handshakeData, callback)
                                result = err;\r
                        else if(handshakeData.query.token != session.items.token)\r
                                result = "invaild token";\r
+                       handshakeData.admin = session.items.admin;\r
                        sessionStore.destroy(sessionID);\r
                        callback(result,result == null && !err);\r
                });\r
@@ -411,6 +424,9 @@ function ParseSendMsg(socket,msg)
 \r
        var repacked_msg = CreateMessage(msg.name,date,msg.message);\r
 \r
+       if(socket.handshake.admin)\r
+               repacked_msg.ip = ip;\r
+\r
        socket.json.emit("req msg", repacked_msg);\r
 \r
        socket.json.broadcast.emit("req msg", repacked_msg);\r
@@ -454,14 +470,14 @@ function ParseGetPastLog(socket,file)
                return;\r
        var path = $log_directory + "/" + file;\r
        var log = new ChatLog(path);\r
-       log.ToArray(function(array){\r
+       log.ToArray(socket.handshake.admin,function(array){\r
                socket.json.emit("req pastlog",array);\r
        });\r
 }\r
 \r
 function ChatLog(path)\r
 {\r
-       this.ToArray = function(callback)\r
+       this.ToArray = function(hasIp,callback)\r
        {\r
                var state = fs.stat(path,function(err,state){\r
                        if(err)\r
@@ -469,9 +485,12 @@ function ChatLog(path)
                        var array = new Array();\r
                        var stream = fs.createReadStream(path);\r
                        new lazy(stream)\r
-                               .lines\r
+                               .spilt(";")\r
                                .forEach(function(line){\r
-                                       array.push(CreateMessageFromText(line.toString()));\r
+                                       var msg = CreateMessageFromText(line.toString());\r
+                                       if(hasIp == false)\r
+                                               msg.ip = "";\r
+                                       array.push(msg);\r
                                })\r
                                .join(function(){\r
                                        callback(array);\r
@@ -493,7 +512,7 @@ function ChatLog(path)
                                msg.date + "<>" +\r
                                ip + "<>" +\r
                                msg.message +\r
-                               "\n";\r
+                               ";";\r
                return text;\r
        }\r
 \r
@@ -549,6 +568,7 @@ function CreateMessage(name,date,message)
 {\r
        var result = {name:name,\r
                date:date,\r
+               ip:"",\r
                message:message};\r
        return result;\r
 }\r
@@ -556,6 +576,7 @@ function CreateMessageFromText(text)
 {\r
        var data = text.split("<>");\r
        var msg = {name:data[0],\r
+               ip:data[2],\r
                date:data[1],\r
                message:data[3]};\r
        return msg;\r
index 46bc8cd..a0ea450 100644 (file)
@@ -32,7 +32,7 @@
                                                        <input type="checkbox" name="file[]" value="<%= files[i] %>">削除</input>\r
                                                </td>\r
                                                <td>\r
-                                                       <a href="<%= $log_directory + '/' + files[i] %>"><%= files[i] %></a>\r
+                                                       <%= files[i] %>\r
                                                </td>\r
                                        </tr>\r
                                <% } %>\r
index dcc1338..3e93823 100644 (file)
@@ -67,21 +67,33 @@ function sendRomCountListerner(count)
 function sendRoomInfoListerner(info)\r
 {\r
        $roominfo = info;\r
-       if(info.type == 0)\r
-       {\r
-               $socket.json.emit("get pastLogList",{rno:document.chat_form.rno.value});\r
-               getCurretLog();\r
-       }else if(info.type == 1){\r
+       var logflag = true;\r
+       var msg = "";\r
+       var adminmsg = "(管理モード)";\r
+       if(info.type == 1){\r
                if(info.IsOwned)\r
-               {\r
-                       $("#enter_message").append($free_password2);\r
-               }else{\r
-                       $("#enter_message").append($free_password1);\r
-               }\r
+                       msg = $free_password2;\r
+               else\r
+                       msg = $free_password1;\r
+               logflag = false;\r
        }else if(info.type == 2){\r
-               $("#enter_message").append($fixed_password);\r
+               msg = $fixed_password;\r
+               logflag = false;\r
        }else if(info.type == 3){\r
-               $("#enter_message").append($hidden_log_to_rom);\r
+               msg = $hidden_log_to_rom;\r
+               logflag = false;\r
+       }\r
+       if(info.admin)\r
+       {\r
+               logflag = true;\r
+               msg += adminmsg;\r
+       }\r
+       if(msg != "")\r
+               $("#enter_message").append(msg);\r
+       if(logflag)\r
+       {\r
+               $socket.json.emit("get pastLogList",{rno:document.chat_form.rno.value});\r
+               getCurretLog();\r
        }\r
 }\r
 \r
@@ -136,7 +148,7 @@ function openPastlogEventListener()
 \r
 function pastLogEventListerner(msg)\r
 {\r
-       if(IsRomMode() && $roominfo.type != 0)\r
+       if(IsRomMode() && $roominfo.type != 0 && $roominfo.admin == false)\r
                return;\r
        for(var i = 0; i < msg.length; i++)\r
                ParseMessage(msg[i]);\r
@@ -145,7 +157,7 @@ function pastLogEventListerner(msg)
 \r
 function getMessageEventListerner(msg)\r
 {\r
-       if(IsRomMode() && $roominfo.type != 0)\r
+       if(IsRomMode() && $roominfo.type != 0 && $roominfo.admin == false)\r
                return;\r
        ParseMessage(msg);\r
        createNameList();\r
@@ -181,6 +193,8 @@ function ParseMessage(msg)
        }else{\r
                ptag.append(msg.name);\r
        }\r
+       if(msg.ip != "")\r
+               ptag.append(" " + msg.ip);\r
        ptag.append(":");\r
        ptag.append(childtag);\r
        ptag.append("(" + $dateFormat.format(date) +")");\r
@@ -248,7 +262,7 @@ function quitEventListener(){
        $("#enter_frame").css("display","block");\r
        $("#chat_frame").css("display","none");\r
 \r
-       if($roominfo.type != 0)\r
+       if($roominfo.type != 0 && $roominfo.admin == false)\r
        {\r
                $("#message").empty();\r
                $("#namelist").empty();\r
index affb531..c22c0e2 100644 (file)
Binary files a/readme.txt and b/readme.txt differ