using System.IO.Compression;\r
using System.Linq;\r
using System.Text;\r
-using System.Text.RegularExpressions;\r
using System.Windows.Forms;\r
+using DynaJson;\r
using KancolleSniffer.Model;\r
using KancolleSniffer.Util;\r
\r
{\r
private readonly Sniffer _sniffer;\r
private BattleState _prevBattleState = BattleState.None;\r
- private readonly List<string[]> _battleApiLog = new List<string[]>();\r
+ private readonly List<Main.Session> _battleApiLog = new List<Main.Session>();\r
\r
public ErrorLog(Sniffer sniffer)\r
{\r
_sniffer = sniffer;\r
}\r
\r
- public void CheckBattleApi(string url, string request, string response)\r
+ public void CheckBattleApi(Main.Session session)\r
{\r
if (_prevBattleState == BattleState.None)\r
_battleApiLog.Clear();\r
{\r
if (_sniffer.Battle.BattleState != BattleState.None)\r
{\r
- _battleApiLog.Add(new[] {url, request, response});\r
+ _battleApiLog.Add(session);\r
}\r
else if (_prevBattleState == BattleState.Result &&\r
// battleresultのあとのship_deckかportでのみエラー判定する\r
- IsBattleResultError)\r
+ _sniffer.IsBattleResultError)\r
{\r
throw new BattleResultError();\r
}\r
}\r
}\r
\r
- private bool IsBattleResultError =>\r
- _sniffer.Battle.DisplayedResultRank.IsError || _sniffer.IsBattleResultStatusError;\r
-\r
public string GenerateBattleErrorLog()\r
{\r
- foreach (var logs in _battleApiLog)\r
- RemoveUnwantedInformation(ref logs[1], ref logs[2]);\r
+ foreach (var s in _battleApiLog)\r
+ Privacy.Remove(s);\r
var version = string.Join(".", Application.ProductVersion.Split('.').Take(2));\r
var api = CompressApi(string.Join("\r\n",\r
- new[] {BattleStartSlots()}.Concat(_battleApiLog.SelectMany(logs => logs))));\r
+ new[] {BattleStartSlots()}.Concat(_battleApiLog.SelectMany(s => s.Lines))));\r
var rank = _sniffer.Battle.DisplayedResultRank;\r
var status = string.Join("\r\n", new[]\r
{\r
\r
private string BattleStartSlots()\r
{\r
- return JsonObject.CreateJsonObject((from ship in _sniffer.BattleStartStatus\r
- group ship by ship.Fleet\r
- into fleet\r
- select\r
- (from s in fleet\r
- select (from item in s.AllSlot select item.Spec.Id).ToArray()\r
- ).ToArray()\r
- ).ToArray()).ToString();\r
+ return new JsonObject((from ship in _sniffer.BattleStartStatus\r
+ group ship by ship.Fleet\r
+ into fleet\r
+ select\r
+ (from s in fleet\r
+ select (from item in s.AllSlot select item.Spec.Id).ToArray()\r
+ ).ToArray()\r
+ ).ToArray()).ToString();\r
}\r
\r
private string HpDiffLog() => string.Join(" ",\r
from pair in _sniffer.BattleResultStatusDiff\r
- let assumed = pair.Assumed\r
+ let assumed = pair.Assumed // こちらのFleetはnull\r
let actual = pair.Actual\r
- select $"({assumed.Fleet}-{assumed.DeckIndex}) {assumed.NowHp}->{actual.NowHp}");\r
+ select $"({actual.Fleet.Number}-{actual.DeckIndex}) {assumed.NowHp}->{actual.NowHp}");\r
\r
- public string GenerateErrorLog(string url, string request, string response, string exception)\r
+ public string GenerateErrorLog(Main.Session s, string exception)\r
{\r
- RemoveUnwantedInformation(ref request, ref response);\r
+ Privacy.Remove(s);\r
var version = string.Join(".", Application.ProductVersion.Split('.').Take(2));\r
- var api = CompressApi($"{url}\r\n{request}\r\n{response}");\r
+ var api = CompressApi(string.Join("\r\n", s.Lines));\r
var result = $"{{{{{{\r\n{DateTime.Now:g} {version}\r\n{exception}\r\n{api}\r\n}}}}}}";\r
File.WriteAllText("error.log", result);\r
return result;\r
}\r
\r
- public static void RemoveUnwantedInformation(ref string request, ref string response)\r
- {\r
- var token = new Regex(@"&api%5Ftoken=.+?(?=&|$)|api%5Ftoken=.+?(?:&|$)|api%5Fbtime=\d+&?");\r
- request = token.Replace(request, "");\r
- var id = new Regex(@"""api_member_id"":""?\d+""?,?|""api_nickname"":"".+?"",?|""api_nickname_id"":""\d+"",?|""api_name_id"":"".+?"",?|");\r
- response = id.Replace(response, "");\r
- var name = new Regex(@"""api_name"":"".+?""");\r
- response = name.Replace(response, @"""api_name"":""""");\r
- }\r
-\r
private string CompressApi(string api)\r
{\r
var output = new MemoryStream();\r