OSDN Git Service

閲覧サーバーから報告書をJSONで取得可能にする
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Mon, 22 Dec 2014 12:02:19 +0000 (21:02 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Sat, 27 Dec 2014 03:24:34 +0000 (12:24 +0900)
KancolleSniffer/LogServer.cs

index bb42adf..08abed9 100644 (file)
@@ -1,5 +1,6 @@
 using System;\r
 using System.IO;\r
+using System.Linq;\r
 using System.Net;\r
 using System.Net.Sockets;\r
 using System.Text;\r
@@ -82,6 +83,12 @@ namespace KancolleSniffer
                             SendFile(client, csv, "text/csv; charset=Shift_JIS");\r
                             continue;\r
                         }\r
+                        if (path.EndsWith(".json", StringComparison.OrdinalIgnoreCase) &&\r
+                            File.Exists(full.Replace(".json", ".csv")))\r
+                        {\r
+                            SendJsonData(client, full);\r
+                            continue;\r
+                        }\r
                         if (path.EndsWith(".js", StringComparison.OrdinalIgnoreCase) && File.Exists(full))\r
                         {\r
                             SendFile(client, full, "application/javascript");\r
@@ -125,6 +132,28 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
+        private void SendJsonData(Socket client, string path)\r
+        {\r
+            var header = new StreamWriter(new MemoryStream(), Encoding.ASCII);\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: {0}\r\n", "application/json; charset=Shift_JIS");\r
+            header.Write("Connection: close\r\n\r\n");\r
+            header.Flush();\r
+            client.Send(((MemoryStream)header.BaseStream).ToArray());\r
+\r
+            var encoding = Encoding.GetEncoding("Shift_JIS");\r
+            client.Send(encoding.GetBytes("{ \"data\": [\n"));\r
+            var delimiter = "";\r
+            foreach (var line in File.ReadLines(path.Replace(".json", ".csv"), encoding).Skip(1))\r
+            {\r
+                client.Send(encoding.GetBytes(delimiter + "[\"" + string.Join("\",\"", line.Split(',')) + "\"]"));\r
+                delimiter = ",\n";\r
+            }\r
+            client.Send(encoding.GetBytes("]}\n"));\r
+        }\r
+\r
         private void SendFile(Socket client, string path, string mime)\r
         {\r
             using (var writer = new StreamWriter(new MemoryStream(), Encoding.ASCII))\r
@@ -136,7 +165,8 @@ namespace KancolleSniffer
                 writer.Write("Content-Type: {0}\r\n", mime);\r
                 writer.Write("Connection: close\r\n\r\n");\r
                 writer.Flush();\r
-                client.SendFile(path, ((MemoryStream)writer.BaseStream).ToArray(), null, TransmitFileOptions.UseDefaultWorkerThread);\r
+                client.SendFile(path, ((MemoryStream)writer.BaseStream).ToArray(), null,\r
+                    TransmitFileOptions.UseDefaultWorkerThread);\r
             }\r
         }\r
 \r