Esempio n. 1
0
        /// <summary>
        /// 更新最佳选项到db
        /// </summary>
        /// <param name="session"></param>
        private static void UpdateCorrectOptions(Session session)
        {
            var kingRequest = KingRequest.FromSession(session);
            var kingAnswer  = KingAnswer.FromSession(session);

            if (kingAnswer == null || kingAnswer.IsValidate() == false)
            {
                return;
            }

            var context = KingContextTable.TakeByRequest(kingRequest);

            if (context == null)
            {
                return;
            }

            using (var sqlLite = new SqlliteContext())
            {
                var quiz       = context.KingQuestion.data.quiz;
                var quizAnswer = sqlLite.QuizAnswer.Find(quiz);

                if (quizAnswer != null)
                {
                    quizAnswer.Answer = context.GetAnswer(kingAnswer);
                    sqlLite.SaveChanges();
                    Console.WriteLine($"更新正确答案到db:{Environment.NewLine}{quizAnswer}");
                }
            }
        }
Esempio n. 2
0
        public async Task <ActionResult> Index()
        {
            using (var db = new SqlliteContext())
            {
                var proxyHost = this.GetProxyHost();
                var model     = new IndexModel
                {
                    ProxyIpEndpoint = $"{proxyHost}:{AppConfig.ProxyPort}",
                    WsIpEndpoint    = $"{proxyHost}:{AppConfig.WsPort}",
                    ClientsIp       = await db.UserIpAddress.ToArrayAsync()
                };

                model.ClientsIp = model.ClientsIp
                                  .Where(item => item.IpAddress != null)
                                  .Select(item => item.FixIpAddress())
                                  .ToArray();

                return(this.View("Index", model));
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 测试搜索引擎
        /// </summary>
        static void TestSearchEngine()
        {
            var ran     = new Random();
            var sqlLite = new SqlliteContext();
            var datas   = sqlLite.QuizAnswer.ToArray().OrderBy(item => ran.Next()).ToArray();

            datas.AsParallel().ForAll(item =>
            {
                Interlocked.Increment(ref current);
                var question = item.ToKingQuestion();

                var best      = Searcher.Search(question);
                var isCorrect = best?.Option == item.Answer;

                if (isCorrect == true)
                {
                    Interlocked.Increment(ref correct);
                }

                lock (syncRoot)
                {
                    Console.WriteLine(item.Quiz);

                    if (isCorrect == false)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                    }
                    Console.WriteLine($"猜测答案:{best?.Option}");
                    Console.WriteLine($"正确答案:{item.Answer}");
                    if (isCorrect == false)
                    {
                        Console.ForegroundColor = ConsoleColor.Gray;
                    }

                    var correctRrate = ((double)correct / (double)current * 100d).ToString("0.00");
                    Console.Title    = $"进度:{current}/{datas.Length}  准确率:{correctRrate}%";
                    Console.WriteLine();
                }
            });
        }
Esempio n. 4
0
        public async Task <ActionResult> ImportDataAsync()
        {
            if (this.Request.Files.Length == 0)
            {
                return(this.RedirectToIndex());
            }
            var file = this.Request.Files.First();

            if (file.FileName.EndsWith(".db", StringComparison.OrdinalIgnoreCase) == false)
            {
                return(this.RedirectToIndex());
            }

            var dbFile = $"data\\import_{Environment.TickCount}.db";

            System.IO.File.WriteAllBytes(dbFile, file.Stream);

            using (var sourceDb = new SqlliteContext(dbFile, false))
            {
                using (var targetDb = new SqlliteContext())
                {
                    var datas = await sourceDb.QuizAnswer.ToArrayAsync();

                    foreach (var data in datas)
                    {
                        if (await targetDb.QuizAnswer.AnyAsync(item => item.Quiz == data.Quiz) == false)
                        {
                            targetDb.QuizAnswer.Add(data);
                        }
                    }
                    var count = await targetDb.SaveChangesAsync();

                    Console.WriteLine($"成功的导入了{count}条数据..");
                }
            }

            System.IO.File.Delete(dbFile);
            return(this.RedirectToIndex());
        }
Esempio n. 5
0
        /// <summary>
        /// 查找问题答案并保存到db
        /// </summary>
        /// <param name="kingQuestion">问题</param>
        /// <returns></returns>
        private static int SearchOptionIndex(KingQuestion kingQuestion)
        {
            using (var sqlLite = new SqlliteContext())
            {
                var quiz       = kingQuestion.data.quiz;
                var quizAnswer = sqlLite.QuizAnswer.FirstOrDefault(item => item.Quiz == quiz);

                if (quizAnswer != null)
                {
                    Console.WriteLine($"从db中找到记录:{Environment.NewLine}{quizAnswer}");
                    var answer = quizAnswer.Answer?.Trim();
                    return(Array.FindIndex(kingQuestion.data.options, item => item?.Trim() == answer));
                }

                // 搜索
                var best = Searcher.Search(kingQuestion);
                if (best == null)
                {
                    Console.WriteLine($"找不到答案:{kingQuestion.data.quiz}");
                    return(-1);
                }

                if (sqlLite.QuizAnswer.Any(item => item.Quiz == quiz) == false)
                {
                    quizAnswer = new QuizAnswer
                    {
                        Answer      = best.Option,
                        Quiz        = quiz,
                        OptionsJson = JsonConvert.SerializeObject(kingQuestion.data.options)
                    };
                    sqlLite.QuizAnswer.Add(quizAnswer);
                    sqlLite.SaveChanges();
                    Console.WriteLine($"保存网络答案到db:{Environment.NewLine}{quizAnswer}");
                }
                return(best.Index);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// 异步登录
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        private async Task <bool> LoginAsync(string name)
        {
            if (string.IsNullOrEmpty(name) == true)
            {
                return(false);
            }

            using (var db = new SqlliteContext())
            {
                var userIpAddress = await db.UserIpAddress.FindAsync(name);

                if (userIpAddress == null)
                {
                    return(false);
                }

                var clientIp = Request.Headers.TryGet <string>("ClientIpAddress");
                userIpAddress.IpAddress = clientIp;
                await db.SaveChangesAsync();

                Console.WriteLine($"用户登录:{name} ip为{clientIp}");
                return(true);
            }
        }