Exemplo n.º 1
0
        private async Task <int> WinnerReadingAsync(AppDbContext ltctx, int winner_no)
        {
            var _result = 0;

            try
            {
                var _winner_no = ltctx.tb_lion_winner.Max(w => w.SequenceNo);

                for (_winner_no++; _winner_no <= winner_no; _winner_no++)
                {
                    var _selection = new dSelector()
                    {
                        sequence_no   = _winner_no,
                        sent_by_queue = true
                    };

                    if (await _pipe_client.RequestToWinnerQ(_selection))
                    {
                        _result++;
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "collector.winner");
            }

            return(_result);
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ltctx"></param>
        /// <param name="selector"></param>
        /// <returns></returns>
        public async Task <bool> StartSelect(AppDbContext ltctx, dSelector selector)
        {
            var _result = false;

            var _prev_analysis = ltctx.tb_lion_analysis
                                 .Where(x => x.SequenceNo == (selector.sequence_no - 1))
                                 .Count();

            // 바로 앞의 analysis(분석) 레코드가 있어야 select(추출) 진행 함
            if (_prev_analysis > 0)
            {
                // 다음 회차의 예측 번호를 select(추출) 합니다.
                var _factor = await NextGameSelectAsync(ltctx, selector.sequence_no);

                if ((_factor.LNoExtraction + _factor.RNoExtraction) > 0)
                {
                    WriteSelect(selector.sequence_no, $"selected:{(_factor.LNoExtraction + _factor.RNoExtraction)}");
                    _result = true;
                }
            }
            else
            {
                WriteSelect(selector.sequence_no, "not-found-analysis failure");
            }

            return(_result);
        }
Exemplo n.º 3
0
        /// <summary>
        /// analysisQ
        /// </summary>
        /// <param name="ltctx"></param>
        /// <param name="winner_no"></param>
        /// <returns></returns>
        public async Task <int> WinnerCollectorAsync(AppDbContext ltctx, int winner_no)
        {
            var _result = 0;

            var _sequence_nos = new List <int>();

            var _analysis_no = ltctx.tb_lion_analysis.Max(x => x.SequenceNo);

            for (_analysis_no++; _analysis_no <= winner_no; _analysis_no++)
            {
                _sequence_nos.Add(_analysis_no);
            }

            var _select_nos = ltctx.tb_lion_select
                              .Where(s => s.SequenceNo <= winner_no && s.Ranking == 0)
                              .GroupBy(s => s.SequenceNo)
                              .Select(s => s.Key)
                              .ToList();

            foreach (var _s in _select_nos)
            {
                if (_sequence_nos.Exists(x => x == _s) == false)
                {
                    _sequence_nos.Add(_s);
                }
            }

            var _choice_nos = ltctx.tb_lion_choice
                              .Where(c => c.SequenceNo <= winner_no && c.Ranking == 0)
                              .GroupBy(c => c.SequenceNo)
                              .Select(c => c.Key)
                              .ToList();

            foreach (var _c in _choice_nos)
            {
                if (_sequence_nos.Exists(x => x == _c) == false)
                {
                    _sequence_nos.Add(_c);
                }
            }

            foreach (var _n in _sequence_nos)
            {
                var _selection = new dSelector()
                {
                    sequence_no   = _n,
                    sent_by_queue = true
                };

                await RequestToAnalystQ(_selection);

                _result++;
            }

            return(_result);
        }
Exemplo n.º 4
0
 public async Task <bool> RequestToWinnerQ(dSelector select)
 {
     return(await RequestToServer(new VmsRequest <dSelector>
     {
         command = QCommand.WinnerQ,
         data = select
     },
                                  PQueue.ReceiveServerPipeName
                                  ));
 }
Exemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ltctx"></param>
        /// <param name="selection"></param>
        /// <returns></returns>
        public async Task <bool> StartAnalysis(AppDbContext ltctx, dSelector selection)
        {
            var _result = false;

            var _max_winner_no = ltctx.tb_lion_winner.Max(a => a.SequenceNo);

            if (selection.sequence_no >= 1 && selection.sequence_no <= _max_winner_no)
            {
                var _max_analysis_no = ltctx.tb_lion_analysis.Max(a => a.SequenceNo);

                // winner(당첨) 번호를 (analysis)분석 합니다.
                if (await WinnerAnalysisAsync(ltctx, _max_analysis_no, selection.sequence_no) == false)
                {
                    WriteAnalysis(selection.sequence_no, "analysis failure");
                }
                else
                {
                    WriteAnalysis(selection.sequence_no, "analysis success");
                }

                // select(추출) 번호와 choice(선택) 번호를 scoring(채점) 합니다.
                if (await WinnerScoringAsync(ltctx, selection.sequence_no) == false)
                {
                    WriteAnalysis(selection.sequence_no, "scoring failure");
                }
                else
                {
                    WriteAnalysis(selection.sequence_no, "scoring success");
                }

                _result = true;
            }
            else
            {
                WriteAnalysis(selection.sequence_no, "out-of-winner failure");
            }

            return(_result);
        }
Exemplo n.º 6
0
        public async Task <int> AnalysisSelectAsync(AppDbContext ltctx, int select_no)
        {
            var _result = 0;

            // 분석 테이블의 마지막 회차+1에 해당하는 회차의 예상 번호를 추출 합니다.
            var _select_no = ltctx.tb_lion_select.Max(x => x.SequenceNo);

            for (_select_no++; _select_no <= select_no + 1; _select_no++)
            {
                var _selection = new dSelector()
                {
                    sequence_no   = _select_no,
                    sent_by_queue = true
                };

                await this.RequestToSelectQ(_selection);

                _result++;
            }

            return(_result);
        }
Exemplo n.º 7
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _logger.LogInformation("[receiver.winner] starting receiver winnerQ...");

            var _lastSelector = new dSelector();

            while (!stoppingToken.IsCancellationRequested)
            {
                try
                {
                    var _read_line = (string)null;
                    if (PQueue.QWinner.TryDequeue(out _read_line) == false)
                    {
                        await Task.Delay(10);

                        continue;
                    }

                    var _request = JsonConvert.DeserializeObject <VmsRequest <dSelector> >(_read_line);
                    {
                        var _selector = _request.data;

                        if (_lastSelector.sequence_no != _selector.sequence_no)
                        {
                            _lastSelector.sequence_no = _selector.sequence_no;

                            using (var _ltctx = _contextFactory.CreateDbContext())
                            {
                                //'나눔로또'에서 크롤링 합니다.
                                var _winner = await _winnerReader.ReadWinnerBall(_selector.sequence_no);

                                if (_winner != null)
                                {
                                    // 당첨번호를 테이블에 저장 합니다.
                                    if (await WinnerUpdateAsync(_ltctx, _winner) == true)
                                    {
                                        WriteWinner(_selector.sequence_no, "insert success");
                                    }
                                    else
                                    {
                                        WriteWinner(_selector.sequence_no, "insert failure");
                                    }
                                }
                                else
                                {
                                    WriteWinner(_selector.sequence_no, "crawling failure");
                                }

                                // next step
                                var _today_seqno = _winnerReader.GetThisWeekSequenceNo();
                                if (_selector.sequence_no == _today_seqno)
                                {
                                    await _pipe_client.WinnerCollectorAsync(_ltctx, _selector.sequence_no);
                                }
                            }
                        }
                        else
                        {
                            WriteWinner(_selector.sequence_no, "skip winner crawling...");
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, "receiver.winner");
                }
            }
        }