From c38d662dc2745c79b74479ba70879d1a05542a07 Mon Sep 17 00:00:00 2001 From: Kazuhiro Fujieda Date: Fri, 15 Sep 2017 19:36:18 +0900 Subject: [PATCH] =?utf8?q?=E6=B5=B7=E6=88=A6=E3=83=AD=E3=82=B0=E3=82=92?= =?utf8?q?=E5=8A=A0=E5=B7=A5=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92?= =?utf8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AB=E5=88=86=E9=9B=A2=E3=81=97?= =?utf8?q?=E3=81=A6=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= =?utf8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- KancolleSniffer.Test/BattleLogProcessorTest.cs | 44 ++++++++ KancolleSniffer.Test/KancolleSniffer.Test.csproj | 1 + KancolleSniffer/LogServer.cs | 129 ++++++++++++----------- 3 files changed, 111 insertions(+), 63 deletions(-) create mode 100644 KancolleSniffer.Test/BattleLogProcessorTest.cs diff --git a/KancolleSniffer.Test/BattleLogProcessorTest.cs b/KancolleSniffer.Test/BattleLogProcessorTest.cs new file mode 100644 index 0000000..d2cfd55 --- /dev/null +++ b/KancolleSniffer.Test/BattleLogProcessorTest.cs @@ -0,0 +1,44 @@ +using System.Linq; +using ExpressionToCodeLib; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace KancolleSniffer.Test +{ + [TestClass] + public class BattleLogProcessorTest + { + [TestMethod] + public void NormalLog() + { + var input = Enumerable.Repeat("", 38).ToArray(); + input[5] = "T字戦(有利)"; + input[11] = "龍鳳改(Lv97)"; + input[12] = "3/48"; + input[13] = "夕立改(Lv148)"; + input[14] = "5/36"; + input[15] = "綾波改二(Lv148)"; + input[16] = "20/37"; + input[37] = "制空権確保"; + var result = BattleLogProcessor.Process(input).ToArray(); + PAssert.That(() => result[5] == "T字有利"); + PAssert.That(() => result[23] == "龍鳳改(Lv97)・夕立改(Lv148)"); + PAssert.That(() => result[38] == "確保"); + } + + [TestMethod] + public void CombinedLog() + { + var input = Enumerable.Repeat("", 38).ToArray(); + input[6] = "第四警戒航行序列"; + input[11] = "龍鳳改(Lv97)・夕立改(Lv148)"; + input[12] = "3/48・5/36"; + input[37] = "航空劣勢"; + var result = BattleLogProcessor.Process(input).ToArray(); + PAssert.That(() => result[6] == "第四警戒"); + PAssert.That(() => result[23] == "龍鳳改(Lv97)・夕立改(Lv148)"); + PAssert.That(() => result[38] == "劣勢"); + } + } + + +} \ No newline at end of file diff --git a/KancolleSniffer.Test/KancolleSniffer.Test.csproj b/KancolleSniffer.Test/KancolleSniffer.Test.csproj index 49062de..e52c290 100644 --- a/KancolleSniffer.Test/KancolleSniffer.Test.csproj +++ b/KancolleSniffer.Test/KancolleSniffer.Test.csproj @@ -61,6 +61,7 @@ + diff --git a/KancolleSniffer/LogServer.cs b/KancolleSniffer/LogServer.cs index 8916e0d..c7071dd 100644 --- a/KancolleSniffer/LogServer.cs +++ b/KancolleSniffer/LogServer.cs @@ -196,7 +196,7 @@ namespace KancolleSniffer if (material) entries = data.Take(9); if (battle) - entries = ProcessBattleLog(data); + entries = BattleLogProcessor.Process(data); if (entries.Count() != records) continue; if (number) @@ -232,7 +232,70 @@ namespace KancolleSniffer Concat(MaterialHistory.Select(c => c.Now.ToString())); } - private static IEnumerable ProcessBattleLog(string[] data) + private static void SendFile(Socket client, string path, string mime) + { + using (var header = new StreamWriter(new MemoryStream(), Encoding.ASCII)) + { + header.Write("HTTP/1.1 200 OK\r\n"); + header.Write("Server: KancolleSniffer\r\n"); + header.Write("Date: {0:R}\r\n", DateTime.Now); + header.Write("Content-Length: {0}\r\n", new FileInfo(path).Length); + header.Write("Content-Type: {0}\r\n", mime); + header.Write("Connection: close\r\n\r\n"); + header.Flush(); + client.SendFile(path, ((MemoryStream)header.BaseStream).ToArray(), null, + TransmitFileOptions.UseDefaultWorkerThread); + } + } + + private static void SendProxyPac(Socket client, int port) + { + using (var header = new StreamWriter(new MemoryStream(), Encoding.ASCII)) + { + header.Write("HTTP/1.1 200 OK\r\n"); + header.Write("Server: KancolleSniffer\r\n"); + header.Write("Date: {0:R}\r\n", DateTime.Now); + header.Write("Content-Type: application/x-ns-proxy-autoconfig\r\n"); + header.Write("Connection: close\r\n\r\n"); + header.Flush(); + client.Send(((MemoryStream)header.BaseStream).ToArray()); + } + var pacFile = @" +function FindProxyForURL(url, host) { + if(isInNet(host, ""203.104.209.71"", ""255.255.255.255"") || + isInNet(host, ""125.6.184.15"", ""255.255.255.255"") || + isInNet(host, ""125.6.184.16"", ""255.255.255.255"") || + isInNet(host, ""125.6.187.205"", ""255.255.255.255"") || + isInNet(host, ""125.6.187.229"", ""255.255.255.255"") || + isInNet(host, ""125.6.187.253"", ""255.255.255.255"") || + isInNet(host, ""125.6.188.25"", ""255.255.255.255"") || + isInNet(host, ""203.104.248.135"", ""255.255.255.255"") || + isInNet(host, ""125.6.189.7"", ""255.255.255.255"") || + isInNet(host, ""125.6.189.39"", ""255.255.255.255"") || + isInNet(host, ""125.6.189.71"", ""255.255.255.255"") || + isInNet(host, ""125.6.189.103"", ""255.255.255.255"") || + isInNet(host, ""125.6.189.135"", ""255.255.255.255"") || + isInNet(host, ""125.6.189.167"", ""255.255.255.255"") || + isInNet(host, ""125.6.189.215"", ""255.255.255.255"") || + isInNet(host, ""125.6.189.247"", ""255.255.255.255"") || + isInNet(host, ""203.104.209.23"", ""255.255.255.255"") || + isInNet(host, ""203.104.209.39"", ""255.255.255.255"") || + isInNet(host, ""203.104.209.55"", ""255.255.255.255"") || + isInNet(host, ""203.104.209.102"", ""255.255.255.255"") || + isInNet(host, ""203.104.209.87"", ""255.255.255.255"")) { + return ""PROXY 127.0.0.1:8080""; + } + else { + return ""DIRECT""; + } +}".Replace("8080", port.ToString()); + client.Send(Encoding.ASCII.GetBytes(pacFile)); + } + } + + public static class BattleLogProcessor + { + public static IEnumerable Process(string[] data) { if (data.Length == 35) data = data.Concat(Enumerable.Repeat("", 3)).ToArray(); @@ -303,67 +366,7 @@ namespace KancolleSniffer return data; } } - return data.Take(23).Concat(new[] {string.Join("・", damaged)}).Concat(data.Skip(23)); - } - - private static void SendFile(Socket client, string path, string mime) - { - using (var header = new StreamWriter(new MemoryStream(), Encoding.ASCII)) - { - header.Write("HTTP/1.1 200 OK\r\n"); - header.Write("Server: KancolleSniffer\r\n"); - header.Write("Date: {0:R}\r\n", DateTime.Now); - header.Write("Content-Length: {0}\r\n", new FileInfo(path).Length); - header.Write("Content-Type: {0}\r\n", mime); - header.Write("Connection: close\r\n\r\n"); - header.Flush(); - client.SendFile(path, ((MemoryStream)header.BaseStream).ToArray(), null, - TransmitFileOptions.UseDefaultWorkerThread); - } - } - - private static void SendProxyPac(Socket client, int port) - { - using (var header = new StreamWriter(new MemoryStream(), Encoding.ASCII)) - { - header.Write("HTTP/1.1 200 OK\r\n"); - header.Write("Server: KancolleSniffer\r\n"); - header.Write("Date: {0:R}\r\n", DateTime.Now); - header.Write("Content-Type: application/x-ns-proxy-autoconfig\r\n"); - header.Write("Connection: close\r\n\r\n"); - header.Flush(); - client.Send(((MemoryStream)header.BaseStream).ToArray()); - } - var pacFile = @" -function FindProxyForURL(url, host) { - if(isInNet(host, ""203.104.209.71"", ""255.255.255.255"") || - isInNet(host, ""125.6.184.15"", ""255.255.255.255"") || - isInNet(host, ""125.6.184.16"", ""255.255.255.255"") || - isInNet(host, ""125.6.187.205"", ""255.255.255.255"") || - isInNet(host, ""125.6.187.229"", ""255.255.255.255"") || - isInNet(host, ""125.6.187.253"", ""255.255.255.255"") || - isInNet(host, ""125.6.188.25"", ""255.255.255.255"") || - isInNet(host, ""203.104.248.135"", ""255.255.255.255"") || - isInNet(host, ""125.6.189.7"", ""255.255.255.255"") || - isInNet(host, ""125.6.189.39"", ""255.255.255.255"") || - isInNet(host, ""125.6.189.71"", ""255.255.255.255"") || - isInNet(host, ""125.6.189.103"", ""255.255.255.255"") || - isInNet(host, ""125.6.189.135"", ""255.255.255.255"") || - isInNet(host, ""125.6.189.167"", ""255.255.255.255"") || - isInNet(host, ""125.6.189.215"", ""255.255.255.255"") || - isInNet(host, ""125.6.189.247"", ""255.255.255.255"") || - isInNet(host, ""203.104.209.23"", ""255.255.255.255"") || - isInNet(host, ""203.104.209.39"", ""255.255.255.255"") || - isInNet(host, ""203.104.209.55"", ""255.255.255.255"") || - isInNet(host, ""203.104.209.102"", ""255.255.255.255"") || - isInNet(host, ""203.104.209.87"", ""255.255.255.255"")) { - return ""PROXY 127.0.0.1:8080""; - } - else { - return ""DIRECT""; - } -}".Replace("8080", port.ToString()); - client.Send(Encoding.ASCII.GetBytes(pacFile)); + return data.Take(23).Concat(new[] { string.Join("・", damaged) }).Concat(data.Skip(23)); } } } \ No newline at end of file -- 2.11.0