From 55d92fe596cc2608a691332237f390655a26f9e6 Mon Sep 17 00:00:00 2001 From: Kazuhiro Fujieda Date: Fri, 2 Oct 2015 21:46:56 +0900 Subject: [PATCH] =?utf8?q?=E3=82=B5=E3=83=BC=E3=83=90=E3=83=BC=E3=81=8B?= =?utf8?q?=E3=82=89=E3=81=AE=E5=BF=9C=E7=AD=94=E3=81=8C=E7=95=B0=E5=B8=B8?= =?utf8?q?=E3=81=AA=E3=81=A8=E3=81=8D=E3=81=AB=E3=81=9D=E3=81=AE=E6=97=A8?= =?utf8?q?=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- KancolleSniffer/MainForm.cs | 44 ++++++++++++++++++++++++++++++++++++-------- KancolleSniffer/Sniffer.cs | 23 +++++++++++++---------- 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/KancolleSniffer/MainForm.cs b/KancolleSniffer/MainForm.cs index 0dd201c..502ba8d 100644 --- a/KancolleSniffer/MainForm.cs +++ b/KancolleSniffer/MainForm.cs @@ -28,6 +28,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using System.Xml; using Codeplex.Data; using Microsoft.CSharp.RuntimeBinder; using Microsoft.Win32; @@ -83,30 +84,51 @@ namespace KancolleSniffer private void ProcessRequest(Session session) { + var url = session.Request.PathAndQuery; + var request = session.Request.BodyAsString; var response = session.Response.BodyAsString; + if (!url.Contains("kcsapi/")) + return; if (response == null || !response.StartsWith("svdata=")) + { + WriteDebugLog(url, request, response ?? "(null)"); + ShowServerError(); return; + } response = response.Remove(0, "svdata=".Length); - var json = DynamicJson.Parse(response); - var request = session.Request.BodyAsString; - if (_debugLogFile != null) + try { - File.AppendAllText(_debugLogFile, string.Format("url: {0}\nrequest: {1}\nresponse: {2}\n", - session.Request.PathAndQuery, request, json.ToString())); + var json = DynamicJson.Parse(response); + WriteDebugLog(url, request, json.ToString()); + UpdateInfo(_sniffer.Sniff(url, request, json)); } - try + catch (XmlException) { - UpdateInfo(_sniffer.Sniff(session.Request.PathAndQuery, request, json)); + WriteDebugLog(url, request, response); + ShowServerError(); } catch (RuntimeBinderException) { - labelLogin.Visible = true; labelLogin.Text = "現在の艦これに対応していません。\n新しいバージョンを利用してください。"; + labelLogin.Visible = true; + } + } + + private void WriteDebugLog(string url, string request, string response) + { + if (_debugLogFile != null) + { + File.AppendAllText(_debugLogFile, $"url: {url}\nrequest: {request}\nresponse: {response}\n"); } } private void UpdateInfo(Sniffer.Update update) { + if (update == Sniffer.Update.Error) + { + ShowServerError(); + return; + } if (update == Sniffer.Update.Start) { labelLogin.Visible = false; @@ -131,6 +153,12 @@ namespace KancolleSniffer UpdateBattleInfo(); } + private void ShowServerError() + { + labelLogin.Text = "サーバーからの応答が異常です。"; + labelLogin.Visible = true; + } + private void MainForm_Load(object sender, EventArgs e) { _config.Load(); diff --git a/KancolleSniffer/Sniffer.cs b/KancolleSniffer/Sniffer.cs index 8391e88..58ff467 100644 --- a/KancolleSniffer/Sniffer.cs +++ b/KancolleSniffer/Sniffer.cs @@ -45,15 +45,16 @@ namespace KancolleSniffer public enum Update { None = 0, - Start = 1, - Item = 2, - Ship = 4, - Timer = 8, - NDock = 16, - Mission = 32, - QuestList = 64, - Battle = 128, - All = 255, + Error = 1 << 0, + Start = 1 << 1, + Item = 1 << 2, + Ship = 1 << 3, + Timer = 1 << 4, + NDock = 1 << 5, + Mission = 1 << 6, + QuestList = 1 << 7, + Battle = 1 << 8, + All = (1 << 9) - 1 } public Sniffer() @@ -88,7 +89,9 @@ namespace KancolleSniffer public Update Sniff(string url, string request, dynamic json) { - var data = json.IsDefined("api_data") ? json.api_data : new object(); + if (!json.api_result() || (int)json.api_result != 1) + return Update.Error; + var data = json.api_data() ? json.api_data : new object(); if (url.EndsWith("api_start2")) { -- 2.11.0