Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        /// <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();
            }
        }
Ejemplo n.º 4
0
        /// <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];
                }
            }
        }
Ejemplo n.º 5
0
        /// <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);
            }
        }
Ejemplo n.º 6
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);
        }