Esempio n. 1
0
        public static async Task <IForecastPlanModel> GetForecastData(LotteryType type, Planner planer, int rule)
        {
            var response = await HttpUtil.GetAsync(GetForecastUrl(type, planer, rule));

            try
            {
                if (string.IsNullOrWhiteSpace(response))
                {
                    return(null);
                }

                var result = JsonConvert.DeserializeObject <JinMaForecastPlanModel>(response);
                result.Plan = planer.GetPlan();
                if (result.ForecastData != null && result.ForecastData.Any())
                {
                    var current = result.ForecastData.LastOrDefault();
                    var pn      = current.LastDrawnPeriod % 1000 >= current.LastPeriod
                        ? current.LastPeriod / 1000 * 1000 + current.LastPeriod - 1
                        : current.LastDrawnPeriod;

                    current.LastDrawnPeriod = pn;
                    result.LastDrawnPeriod  = pn;
                }

                return(result);
            }
            catch (Exception ex)
            {
                ExceptionlessUtil.Warn(ex, $"预测数据反序列化失败,内容:{response}");
                return(null);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 计算"挂"分数 (结束挂优先)
        /// </summary>
        /// <param name="forecastData"></param>
        /// <param name="keepGuaCnt">有效连挂次数(连挂已结束)</param>
        /// <param name="chaseTimesAfterEndGua">第几段跟投(连挂结束后)</param>
        /// <param name="keepGuaingCnt">连挂次数(连挂中)</param>
        /// <returns></returns>
        private static float CalculateGua(IReadOnlyCollection <IForecastModel> forecastData, out int keepGuaCnt,
                                          out int chaseTimesAfterEndGua, out int keepGuaingCnt)
        {
            float total = 0;

            //从最新期开始连挂次数
            keepGuaCnt            = 0;
            chaseTimesAfterEndGua = 0;
            keepGuaingCnt         = 0;

            if (forecastData.Count < 2)
            {
                ExceptionlessUtil.Error("预测历史数据不足,无法进行评估");
                return(0);
            }

            var results = forecastData.Take(forecastData.Count - 1).Select(f => f.IsWin).Reverse().ToList();
            //第一个非挂
            var firstWinIndex = results.FindIndex(f => f == true);

            //最近挂尚未结束
            if (firstWinIndex > 0)
            {
                total         = results.Count(f => f == false) * Config.GuaBase;
                keepGuaingCnt = firstWinIndex;
            }
            else
            {
                //第一个有效挂
                var firstValidWrongIndex =
                    results.Skip(firstWinIndex + 1).ToList().FindIndex(f => f == false) + firstWinIndex + 1;
                chaseTimesAfterEndGua = firstValidWrongIndex + 1;
                //有效连挂次数
                var validGua = results.Skip(firstValidWrongIndex + 1).ToList().FindIndex(f => f == true) + 1;
                //普通挂次数
                var normalGua = results.Skip(firstValidWrongIndex + validGua + 1).Count(f => f == false);

                if (validGua >= Config.StartGuaTime && firstValidWrongIndex > 0 && firstValidWrongIndex < validGua)
                {
                    var baseScore = validGua >= Config.KeepGuaTime
                        ? Config.Gua
                        : (1 - (Config.KeepGuaTime - validGua) * Config.DeltaReduce) * Config.Gua;
                    total += baseScore - (firstValidWrongIndex + 1) * Config.DeltaReduce * Config.Gua;

                    keepGuaCnt = validGua;
                }

                //过期有效挂视为普通挂
                if (firstValidWrongIndex >= validGua)
                {
                    normalGua += validGua;
                }
                if (normalGua > 0)
                {
                    total += Config.GuaBase * normalGua;
                }
            }

            return(total);
        }
Esempio n. 3
0
        private static async void Service_DataCollectedError(object sender, CollectErrorEventArgs e)
        {
            await Pk10Context.Clients.Groups(new List <string> {
                e.Rule.ToString(), "AllRules"
            })
            .SendAsync("NoResult", e.Rule.ToStringName());

            ExceptionlessUtil.Warn("目标网站扫水接口异常,请尽快检查恢复");
        }
Esempio n. 4
0
        public void OnException(ExceptionContext context)
        {
            //提交异常信息
            ExceptionlessUtil.TraceException(context.Exception);

            //转到错误页面
            context.Result = new RedirectResult("/error");
            context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

            //标记已处理
            context.ExceptionHandled = true;
        }
Esempio n. 5
0
        public static async Task StartConnection()
        {
            var hubUrls    = ConfigUtil.GetAppSettings <SourceHubUrls>("SourceHubUrls");
            var connection = new HubConnectionBuilder()
                             .WithUrl(hubUrls.Pk10)
                             .Build();

            connection.ServerTimeout = TimeSpan.FromMinutes(10);

            connection.On <JArray>("ShowPlans", BetPk10);

            try
            {
                await connection.StartAsync();

                await connection.InvokeAsync("RegisterAllRules");
            }
            catch (Exception ex)
            {
                ExceptionlessUtil.Fatal(ex, "模拟下注启动失败", true);
            }
        }
Esempio n. 6
0
        public static async Task NotifyAsync(MailNotifyModel model)
        {
            var config = ConfigUtil.GetAppSettings <MailNotifyConfig>("MailNotify");

            var    subject = $"{model.Lottery}-{model.Rule}-{model.Plan}-{model.CurrentPeriod.KeepGuaCnt}连挂-第{model.CurrentPeriod.ChaseTimes}期";
            string content;

            switch (config.ContentType)
            {
            case MailContentType.Html:
                content = GetEmailContent(config.Template, model);
                break;

            case MailContentType.Plain:
                content = config.Content;
                break;

            default:
                ExceptionlessUtil.Error("邮件通知内容格式未知,请检查配置文件");
                return;
            }

            await MailUtil.MailAsync(config.ApiKey, config.From, config.To.Split(','), subject, content, config.ContentType);
        }