/// <summary> /// 停止服务 /// </summary> /// <param name="hostControl"></param> /// <returns></returns> public bool Stop(HostControl hostControl) { HistoryDataTable.Save(); KingProcesser.CloseListener(); Debugger.Log(0, null, "Save HistoryDataTable Datas OK .."); if (sslProxyServer != null) { sslProxyServer.Dispose(); } FiddlerApplication.Shutdown(); return(true); }
public ActionResult ImportData() { if (this.Request.Files.Length > 0) { var file = this.Request.Files.First(); if (file.FileName.EndsWith("data.json", StringComparison.OrdinalIgnoreCase)) { HistoryDataTable.TryImport(file); } } this.Response.Status = 301; this.Response.Headers.Add("location", "/"); return(new EmptyResult()); }
/// <summary> /// 处理会话 /// </summary> /// <param name="session">会话</param> /// <returns></returns> public static async void ProcessSessionAsync(Session session) { var url = session.fullUrl; if (url.Contains("question/bat/findQuiz") == true) { await SearchAnswerAsync(session); } else if (url.Contains("question/bat/choose") == true) { UpdateBestAndSave(session); } else if (url.Contains("question/bat/fightResult") == true) { var notifyData = new WsNotifyData <object> { Cmd = WsCmd.GameOver }; WsNotifyByClientIP(notifyData, session.clientIP); HistoryDataTable.Save(); } }
/// <summary> /// 更新最佳选项并保存 /// </summary> /// <param name="session"></param> private static void UpdateBestAndSave(Session session) { session.utilDecodeRequest(); session.utilDecodeResponse(); var requestBody = Encoding.UTF8.GetString(session.RequestBody); var responseBody = Encoding.UTF8.GetString(session.ResponseBody); var kingRequest = KingRequest.Parse(requestBody); var kingAnswer = KingAnswer.Parse(responseBody); if (kingAnswer != null && kingAnswer.data != null) { var data = HistoryDataTable.TryGet(kingRequest); if (data != null) { var index = kingAnswer.data.answer - 1; data.SearchResult.Best = data.SearchResult.Options[index]; } } }
/// <summary> /// 导入json数据 /// </summary> /// <param name="json"></param> /// <returns></returns> public static int TryImport(HttpFile file) { try { var temp = "temp.tmp"; File.WriteAllBytes(temp, file.Stream); var json = File.ReadAllText(temp, Encoding.UTF8); File.Delete(temp); var datas = JsonConvert.DeserializeObject <HistoryData[]>(json); var count = datas.Select(d => TryAdd(d)).Count(item => item); if (count > 0) { HistoryDataTable.Save(); } return(count); } catch (Exception) { return(0); } }
/// <summary> /// 从本地和网络查找答案 /// 并转发给对应的ws客户端 /// </summary> /// <param name="session">会话</param> /// <param name="sync">是否同步</param> /// <returns></returns> private static async Task <HistoryData> SearchHistoryDataAsync(Session session, bool sync) { session.utilDecodeRequest(); session.utilDecodeResponse(); var requestBody = Encoding.UTF8.GetString(session.RequestBody); var responseBody = Encoding.UTF8.GetString(session.ResponseBody); var kingQuestion = KingQuestion.Parse(responseBody); if (kingQuestion == null || kingQuestion.IsValidate() == false) { return(null); } var kingRequest = KingRequest.Parse(requestBody); var title = kingQuestion.data.quiz; var beginTime = DateTime.Now; var history = HistoryDataTable.TryGet(title); if (history == null) { history = new HistoryData { QuestionData = kingQuestion.data, KingRequest = KingRequest.Parse(requestBody), SearchResult = await BaiduSearcher.SearchAsync(kingQuestion, withAnswer) }; HistoryDataTable.TryAdd(history); } var data = JsonConvert.DeserializeObject <HistoryData>(JsonConvert.SerializeObject(history)); data.KingRequest = kingRequest; data.QuestionData = kingQuestion.data; data.SearchResult = history.SearchResult.CreateNewByQuestionData(kingQuestion.data); return(data); }