public void RemoveToken()\r
{\r
const string request = "api%5Fverno=1&api%5Ftoken=0123456abcdef&api%5Fport=0123456789";\r
- PAssert.That(() => Privacy.RemoveToken(request) == "api%5Fverno=1&api%5Fport=0123456789", "トークンが中間");\r
+ PAssert.That(() => RemoveToken(request) == "api%5Fverno=1&api%5Fport=0123456789", "トークンが中間");\r
const string request2 = "api%5Fverno=1&api%5Ftoken=0123456abcdef";\r
- PAssert.That(() => Privacy.RemoveToken(request2) == @"api%5Fverno=1", "トークンが末尾");\r
+ PAssert.That(() => RemoveToken(request2) == @"api%5Fverno=1", "トークンが末尾");\r
const string request3 = "api%5Ftoken=0123456abcdef&api%5Fverno=1";\r
- PAssert.That(() => Privacy.RemoveToken(request3) == @"api%5Fverno=1", "トークンが先頭");\r
+ PAssert.That(() => RemoveToken(request3) == @"api%5Fverno=1", "トークンが先頭");\r
const string request4 = "api%5Ftoken=0123456abcdef";\r
- PAssert.That(() => Privacy.RemoveToken(request4) == "", "トークン単独");\r
+ PAssert.That(() => RemoveToken(request4) == "", "トークン単独");\r
const string request5 = "api%5Fbtime=83026279&api%5Ftoken=0123456abcdef&api%5Fverno=1";\r
- PAssert.That(() => Privacy.RemoveToken(request5) == "api%5Fverno=1", "戦闘APIの時刻印を削除");\r
+ PAssert.That(() => RemoveToken(request5) == "api%5Fverno=1", "戦闘APIの時刻印を削除");\r
}\r
\r
/// <summary>\r
public void RemoveToken2()\r
{\r
var request = "api_verno=1&api_token=0123456abcdef&api_port=0123456789";\r
- PAssert.That(() => Privacy.RemoveToken(request) == "api_verno=1&api_port=0123456789", "トークンが中間");\r
+ PAssert.That(() => RemoveToken(request) == "api_verno=1&api_port=0123456789", "トークンが中間");\r
var request5 = "api_btime=83026279&api_token=0123456abcdef&api_verno=1";\r
- PAssert.That(() => Privacy.RemoveToken(request5) == "api_verno=1", "戦闘APIの時刻印を削除");\r
+ PAssert.That(() => RemoveToken(request5) == "api_verno=1", "戦闘APIの時刻印を削除");\r
}\r
\r
[TestMethod]\r
@"""api_nickname"":""ぱんなこった"",""api_nickname_id"":""12345678"",""api_active_flag"":1}}}";\r
const string result1 =\r
@"{""api_result"":1,""api_result_msg"":""成功"",""api_data"":{""api_basic"":{""api_active_flag"":1}}}";\r
- PAssert.That(() => Privacy.RemoveName(response1) == result1);\r
+ PAssert.That(() => RemoveName(response1) == result1);\r
const string response2 =\r
@"{""api_deck_data"":[{""api_member_id"":123456,""api_id"":1,""api_name"":""第一艦隊"",""api_name_id"":""123456"",""api_mission"":[0,0,0,0],""api_flagship"":""0""}]}";\r
const string result2 =\r
@"{""api_deck_data"":[{""api_id"":1,""api_mission"":[0,0,0,0],""api_flagship"":""0""}]}";\r
- PAssert.That(() => Privacy.RemoveName(response2) == result2);\r
+ PAssert.That(() => RemoveName(response2) == result2);\r
const string response3 =\r
@"{""api_deck_data"":[{""api_member_id"":123456,""api_id"":1,""api_name"":""第\\/一艦\\""隊\\"""",""api_name_id"":""123456"",""api_mission"":[0,0,0,0],""api_flagship"":""0""}]}";\r
- PAssert.That(() => Privacy.RemoveName(response3) == result2);\r
+ PAssert.That(() => RemoveName(response3) == result2);\r
+ }\r
+\r
+ private string RemoveToken(string query)\r
+ {\r
+ var s = new MainForm.Session(query, null, null);\r
+ Privacy.Remove(s);\r
+ return s.Url;\r
+ }\r
+\r
+ private string RemoveName(string response)\r
+ {\r
+ var s = new MainForm.Session(null, null, response);\r
+ Privacy.Remove(s);\r
+ return s.Response;\r
}\r
}\r
}
\ No newline at end of file
{\r
private readonly Sniffer _sniffer;\r
private BattleState _prevBattleState = BattleState.None;\r
- private readonly List<string[]> _battleApiLog = new List<string[]>();\r
+ private readonly List<MainForm.Session> _battleApiLog = new List<MainForm.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(MainForm.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
\r
public string GenerateBattleErrorLog()\r
{\r
- foreach (var logs in _battleApiLog)\r
- Privacy.Remove(ref logs[0], 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
let actual = pair.Actual\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(MainForm.Session s, string exception)\r
{\r
- Privacy.Remove(ref url, 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
// limitations under the License.\r
\r
using System;\r
+using System.Collections;\r
using System.Collections.Generic;\r
using System.ComponentModel;\r
using System.Diagnostics;\r
BeginInvoke(new Action<HttpProxy.Session>(ProcessRequest), session);\r
}\r
\r
+ public class Session\r
+ {\r
+ public string Url { get; set; }\r
+ public string Request { get; set; }\r
+ public string Response { get; set; }\r
+\r
+ public Session()\r
+ {\r
+ }\r
+\r
+ public Session(string url, string request, string response)\r
+ {\r
+ Url = url;\r
+ Request = request;\r
+ Response = response;\r
+ }\r
+\r
+ public string[] Lines => new[] {Url, Request, Response};\r
+ }\r
+\r
private void ProcessRequest(HttpProxy.Session session)\r
{\r
var url = session.Request.PathAndQuery;\r
if (!url.Contains("kcsapi/"))\r
return;\r
- var request = session.Request.BodyAsString;\r
- var response = session.Response.BodyAsString;\r
- Privacy.Remove(ref url, ref request, ref response);\r
- if (response == null || !response.StartsWith("svdata="))\r
+ var s = new Session(url, session.Request.BodyAsString, session.Response.BodyAsString);\r
+ Privacy.Remove(s);\r
+ if (s.Response == null || !s.Response.StartsWith("svdata="))\r
{\r
- WriteDebugLog(url, request, response);\r
+ WriteDebugLog(s);\r
return;\r
}\r
- response = UnEscapeString(response.Remove(0, "svdata=".Length));\r
- WriteDebugLog(url, request, response);\r
- ProcessRequestMain(url, request, response);\r
+ s.Response = UnEscapeString(s.Response.Remove(0, "svdata=".Length));\r
+ WriteDebugLog(s);\r
+ ProcessRequestMain(s);\r
}\r
\r
- private void ProcessRequestMain(string url, string request, string response)\r
+ private void ProcessRequestMain(Session s)\r
{\r
try\r
{\r
- UpdateInfo(Sniffer.Sniff(url, request, JsonObject.Parse(response)));\r
- _errorLog.CheckBattleApi(url, request, response);\r
+ UpdateInfo(Sniffer.Sniff(s.Url, s.Request, JsonObject.Parse(s.Response)));\r
+ _errorLog.CheckBattleApi(s);\r
}\r
\r
catch (RuntimeBinderException e)\r
{\r
if (_errorDialog.ShowDialog(this,\r
"艦これに仕様変更があったか、受信内容が壊れています。",\r
- _errorLog.GenerateErrorLog(url, request, response, e.ToString())) == DialogResult.Abort)\r
+ _errorLog.GenerateErrorLog(s, e.ToString())) == DialogResult.Abort)\r
Exit();\r
}\r
catch (LogIOException e)\r
catch (Exception e)\r
{\r
if (_errorDialog.ShowDialog(this, "エラーが発生しました。",\r
- _errorLog.GenerateErrorLog(url, request, response, e.ToString())) == DialogResult.Abort)\r
+ _errorLog.GenerateErrorLog(s, e.ToString())) == DialogResult.Abort)\r
Exit();\r
}\r
}\r
Environment.Exit(1);\r
}\r
\r
- private void WriteDebugLog(string url, string request, string response)\r
+ private void WriteDebugLog(Session s)\r
{\r
if (_debugLogFile != null)\r
{\r
File.AppendAllText(_debugLogFile,\r
- $"date: {DateTime.Now:g}\nurl: {url}\nrequest: {request}\nresponse: {response ?? "(null)"}\n");\r
+ $"date: {DateTime.Now:g}\nurl: {s.Url}\nrequest: {s.Request}\nresponse: {s.Response ?? "(null)"}\n");\r
}\r
}\r
\r
lines.Add(_playLog.Current.Substring(s.Length));\r
}\r
hqPanel.PlayLog.Visible = !hqPanel.PlayLog.Visible;\r
- ProcessRequestMain(lines[0], lines[1], lines[2]);\r
+ ProcessRequestMain(new Session(lines[0], lines[1], lines[2]));\r
}\r
\r
private void ShowShipOnShipList(int id)\r
{\r
public static class Privacy\r
{\r
- public static void Remove(ref string url, ref string request, ref string response)\r
+ public static void Remove(MainForm.Session s)\r
{\r
- if (url != null)\r
- url = RemoveToken(url);\r
- if (request != null)\r
- request = RemoveToken(request);\r
- if (response != null && !(url != null && url.Contains("start2")))\r
- response = RemoveName(response);\r
+ RemoveToken(s);\r
+ RemoveName(s);\r
}\r
\r
- private static readonly Regex NameRegex = new Regex(\r
- @"""api_member_id"":""?\d*""?,|""api_(?:nick)?name"":""(?:[^\""]|\\.)*"",""api_(?:nick)?name_id"":""\d*"",",\r
- RegexOptions.Compiled);\r
-\r
- public static string RemoveName(string response)\r
+ private static void RemoveToken(MainForm.Session s)\r
{\r
- var result = NameRegex.Replace(response, "");\r
- return result;\r
+ s.Url = RemoveToken(s.Url);\r
+ s.Request = RemoveToken(s.Request);\r
}\r
\r
- public static string RemoveToken(string query)\r
+ private static string RemoveToken(string query)\r
{\r
+ if (query == null)\r
+ return null;\r
var result = new Regex(@"api(?:%5F|_)token=\w+|api(?:%5F|_)btime=\w+").Replace(query, "");\r
- result = result.Replace("&&", "&");\r
- result = result.Replace("?&", "?");\r
- result = result.Trim('&', '?');\r
- return result;\r
+ return result.Replace("&&", "&").Replace("?&", "?").Trim('&', '?');\r
+ }\r
+\r
+ private static readonly Regex NameRegex = new Regex(\r
+ @"""api_member_id"":""?\d*""?,|""api_(?:nick)?name"":""(?:[^\""]|\\.)*"",""api_(?:nick)?name_id"":""\d*"",",\r
+ RegexOptions.Compiled);\r
+\r
+ private static void RemoveName(MainForm.Session s)\r
+ {\r
+ if (s.Response != null && !(s.Url != null && s.Url.Contains("start2")))\r
+ s.Response = NameRegex.Replace(s.Response, "");\r
}\r
}\r
}
\ No newline at end of file