OSDN Git Service

ヘッダのCondとExpのマウスカーソルを変える
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / LogServer.cs
index 8916e0d..007f8ef 100644 (file)
@@ -19,6 +19,7 @@ using System.IO;
 using System.Linq;\r
 using System.Net.Sockets;\r
 using System.Text;\r
+using System.Text.RegularExpressions;\r
 \r
 namespace KancolleSniffer\r
 {\r
@@ -180,10 +181,18 @@ namespace KancolleSniffer
                     if (!DateTime.TryParseExact(data[0], Logger.DateTimeFormat, CultureInfo.InvariantCulture,\r
                         DateTimeStyles.AssumeLocal, out DateTime date))\r
                     {\r
-                        if (DateTime.TryParse(data[0], CultureInfo.CurrentCulture,\r
+                        // システムが和暦に設定されていて和暦が出力されてしまったケースを救う\r
+                        var wareki = CultureInfo.CreateSpecificCulture("ja-JP");\r
+                        wareki.DateTimeFormat.Calendar = new JapaneseCalendar();\r
+                        if (DateTime.TryParseExact(data[0], Logger.DateTimeFormat, wareki,\r
                             DateTimeStyles.AssumeLocal, out date))\r
                         {\r
-                            data[0] = date.ToString(Logger.DateTimeFormat);\r
+                            data[0] = Logger.FormatDateTime(date);\r
+                        }\r
+                        else if (DateTime.TryParse(data[0], CultureInfo.CurrentCulture,\r
+                            DateTimeStyles.AssumeLocal, out date))\r
+                        {\r
+                            data[0] = Logger.FormatDateTime(date);\r
                         }\r
                         else\r
                         {\r
@@ -196,7 +205,7 @@ namespace KancolleSniffer
                     if (material)\r
                         entries = data.Take(9);\r
                     if (battle)\r
-                        entries = ProcessBattleLog(data);\r
+                        entries = BattleLogProcessor.Process(data);\r
                     if (entries.Count() != records)\r
                         continue;\r
                     if (number)\r
@@ -228,16 +237,85 @@ namespace KancolleSniffer
 \r
         private static IEnumerable<string> GetCurrentMaterialRecord()\r
         {\r
-            return new[] {DateTime.Now.ToString(Logger.DateTimeFormat)}.\r
+            return new[] {Logger.FormatDateTime(DateTime.Now)}.\r
                 Concat(MaterialHistory.Select(c => c.Now.ToString()));\r
         }\r
 \r
-        private static IEnumerable<string> ProcessBattleLog(string[] data)\r
+        private static void SendFile(Socket client, string path, string mime)\r
+        {\r
+            using (var header = new StreamWriter(new MemoryStream(), Encoding.ASCII))\r
+            {\r
+                header.Write("HTTP/1.1 200 OK\r\n");\r
+                header.Write("Server: KancolleSniffer\r\n");\r
+                header.Write("Date: {0:R}\r\n", DateTime.Now);\r
+                header.Write("Content-Length: {0}\r\n", new FileInfo(path).Length);\r
+                header.Write("Content-Type: {0}\r\n", mime);\r
+                header.Write("Connection: close\r\n\r\n");\r
+                header.Flush();\r
+                client.SendFile(path, ((MemoryStream)header.BaseStream).ToArray(), null,\r
+                    TransmitFileOptions.UseDefaultWorkerThread);\r
+            }\r
+        }\r
+\r
+        private static void SendProxyPac(Socket client, int port)\r
+        {\r
+            using (var header = new StreamWriter(new MemoryStream(), Encoding.ASCII))\r
+            {\r
+                header.Write("HTTP/1.1 200 OK\r\n");\r
+                header.Write("Server: KancolleSniffer\r\n");\r
+                header.Write("Date: {0:R}\r\n", DateTime.Now);\r
+                header.Write("Content-Type: application/x-ns-proxy-autoconfig\r\n");\r
+                header.Write("Connection: close\r\n\r\n");\r
+                header.Flush();\r
+                client.Send(((MemoryStream)header.BaseStream).ToArray());\r
+            }\r
+            var pacFile = @"\r
+function FindProxyForURL(url, host) {\r
+  if(isInNet(host, ""203.104.209.71"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.87"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.184.16"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.187.205"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.187.229"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.134"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.167"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.248.135"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.7"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.39"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.71"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.103"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.135"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.167"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.215"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.247"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.23"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.39"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.55"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.102"", ""255.255.255.255"")) {\r
+       return ""PROXY 127.0.0.1:8080"";\r
+    }\r
+  else {\r
+    return ""DIRECT"";\r
+  }\r
+}".Replace("8080", port.ToString());\r
+            client.Send(Encoding.ASCII.GetBytes(pacFile));\r
+        }\r
+    }\r
+\r
+    public static class BattleLogProcessor\r
+    {\r
+        public static IEnumerable<string> Process(string[] data)\r
         {\r
             if (data.Length == 35)\r
                 data = data.Concat(Enumerable.Repeat("", 3)).ToArray();\r
-            if (data.Length != 38)\r
+            if (data.Length == 40)\r
+            {\r
+                data = data.Take(21).Concat(new[] {data[21] + "・" + data[23], data[22] + "・" + data[24]})\r
+                    .Concat(data.Skip(25)).ToArray();\r
+            }\r
+            else if (data.Length != 38)\r
+            {\r
                 return data;\r
+            }\r
             if (data[5] == "T字戦(有利)")\r
                 data[5] = "T字有利";\r
             if (data[5] == "T字戦(不利)")\r
@@ -274,9 +352,9 @@ namespace KancolleSniffer
             var damaged = new List<string>();\r
             for (var i = 11; i < 11 + 12; i += 2)\r
             {\r
-                var ship = data[i];\r
-                if (ship == "")\r
+                if (data[i] == "")\r
                     continue;\r
+                var ship = data[i] = StripKana(data[i]);\r
                 var hp = data[i + 1];\r
                 try\r
                 {\r
@@ -303,67 +381,14 @@ namespace KancolleSniffer
                     return data;\r
                 }\r
             }\r
-            return data.Take(23).Concat(new[] {string.Join("・", damaged)}).Concat(data.Skip(23));\r
+            return data.Take(23).Concat(new[] { string.Join("・", damaged) }).Concat(data.Skip(23));\r
         }\r
 \r
-        private static void SendFile(Socket client, string path, string mime)\r
-        {\r
-            using (var header = new StreamWriter(new MemoryStream(), Encoding.ASCII))\r
-            {\r
-                header.Write("HTTP/1.1 200 OK\r\n");\r
-                header.Write("Server: KancolleSniffer\r\n");\r
-                header.Write("Date: {0:R}\r\n", DateTime.Now);\r
-                header.Write("Content-Length: {0}\r\n", new FileInfo(path).Length);\r
-                header.Write("Content-Type: {0}\r\n", mime);\r
-                header.Write("Connection: close\r\n\r\n");\r
-                header.Flush();\r
-                client.SendFile(path, ((MemoryStream)header.BaseStream).ToArray(), null,\r
-                    TransmitFileOptions.UseDefaultWorkerThread);\r
-            }\r
-        }\r
+        private static readonly Regex Kana = new Regex(@"\([^)]+\)\(", RegexOptions.Compiled);\r
 \r
-        private static void SendProxyPac(Socket client, int port)\r
+        private static string StripKana(string name)\r
         {\r
-            using (var header = new StreamWriter(new MemoryStream(), Encoding.ASCII))\r
-            {\r
-                header.Write("HTTP/1.1 200 OK\r\n");\r
-                header.Write("Server: KancolleSniffer\r\n");\r
-                header.Write("Date: {0:R}\r\n", DateTime.Now);\r
-                header.Write("Content-Type: application/x-ns-proxy-autoconfig\r\n");\r
-                header.Write("Connection: close\r\n\r\n");\r
-                header.Flush();\r
-                client.Send(((MemoryStream)header.BaseStream).ToArray());\r
-            }\r
-            var pacFile = @"\r
-function FindProxyForURL(url, host) {\r
-  if(isInNet(host, ""203.104.209.71"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.184.15"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.184.16"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.187.205"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.187.229"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.187.253"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.188.25"", ""255.255.255.255"") ||\r
-     isInNet(host, ""203.104.248.135"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.189.7"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.189.39"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.189.71"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.189.103"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.189.135"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.189.167"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.189.215"", ""255.255.255.255"") ||\r
-     isInNet(host, ""125.6.189.247"", ""255.255.255.255"") ||\r
-     isInNet(host, ""203.104.209.23"", ""255.255.255.255"") ||\r
-     isInNet(host, ""203.104.209.39"", ""255.255.255.255"") ||\r
-     isInNet(host, ""203.104.209.55"", ""255.255.255.255"") ||\r
-     isInNet(host, ""203.104.209.102"", ""255.255.255.255"") ||\r
-     isInNet(host, ""203.104.209.87"", ""255.255.255.255"")) {\r
-       return ""PROXY 127.0.0.1:8080"";\r
-    }\r
-  else {\r
-    return ""DIRECT"";\r
-  }\r
-}".Replace("8080", port.ToString());\r
-            client.Send(Encoding.ASCII.GetBytes(pacFile));\r
+            return Kana.Replace(name, "(");\r
         }\r
     }\r
 }
\ No newline at end of file