예제 #1
0
        public void FireLogBet(MatchDTO match, OddDTO odd, eBetType betType, int stake, eBetStatusType betStatus, eServerScan serverScan)
        {
            var msg = new LogBetMessage()
            {
                Time         = DateTime.Now.ToString("HH:mm:ss.fff"),
                HomeTeamName = match.HomeTeamName,
                AwayTeamName = match.AwayTeamName,
                OddType      = odd.OddType,
                ServerType   = match.ServerType,
                OddValues    = odd.HomeOdd + "|" + odd.AwayOdd,
                Odd          = odd.Odd,
                BetStake     = stake,
                BetType      = betType,
                Status       = betStatus,
                EngineName   = this.EngineName,
                TabCode      = TabCode,
                ServerScan   = serverScan
            };

            Task.Run(() =>
            {
                DataContainer.LogBetQueue.Enqueue(msg);
                DataContainer.LogBetResetEvent.Set();
            });
        }
예제 #2
0
        public bool IsValidPick(OddDTO sboMatchOdd, eBetType betType)
        {
            if (sboMatchOdd.OddType == eOddType.HCP || sboMatchOdd.OddType == eOddType.HalfHCP)
            {
                if (sboMatchOdd.Odd.Equals(0))
                {
                    return(true);
                }

                if (sboMatchOdd.Odd > 0)
                {
                    if (betType == eBetType.Home)
                    {
                        return(RealConfig.PickSboHdpBot);
                    }
                    return(RealConfig.PickSboHdpTop);
                }
                else //if (sboMatchOdd.Odd < 0)
                {
                    if (betType == eBetType.Home)
                    {
                        return(RealConfig.PickSboHdpTop);
                    }
                    return(RealConfig.PickSboHdpBot);
                }
            }
            else
            {
                if (betType == eBetType.Home)
                {
                    return(RealConfig.PickSboOver);
                }
                return(RealConfig.PickSboUnder);
            }
        }
예제 #3
0
        private eBetType GetAgainstBetType(eBetType betType)
        {
            if (betType == eBetType.Home)
            {
                return(eBetType.Away);
            }

            return(eBetType.Home);
        }
예제 #4
0
        private PrepareBetDTO CallPrepareBet(MatchOddDTO matchOdd, eBetType betType, bool isLive, float oddDef)
        {
            switch (matchOdd.ServerType)
            {
            //case eServerType.Ibet:
            //    return PiEngine.PrepareBet(matchOdd, betType, isLive, oddDef);
            case eServerType.Sbo:
                return(SboEngine.PrepareBet(matchOdd, betType, isLive, oddDef));

            default:
                throw new Exception("CallPrepareBet => FAIL : Unknow matchOdd->eServerType param");
            }
        }
        public void ProcessPrepareBet(MatchOddDTO ibetMatchOdd, eBetType ibetBetType, MatchOddDTO sboMatchOdd, eBetType sboBetType, bool isLive)
        {
            try
            {
                if (MaxCountBet == 0 || CountBet <= MaxCountBet)
                {
                    var taskPrepareBetIbet = Task.Run(() => CallPrepareBet(ibetMatchOdd, ibetBetType, isLive));
                    var taskPrepareBetSbo  = Task.Run(() => CallPrepareBet(sboMatchOdd, sboBetType, isLive));

                    if (taskPrepareBetIbet.Result != null && taskPrepareBetSbo.Result != null &&
                        !taskPrepareBetIbet.Result.HasChangeOdd && !taskPrepareBetSbo.Result.HasChangeOdd)
                    {
                        if (LastBetTime.AddSeconds(TimeOffStakeOdds) <= DateTime.Now)
                        {
                            int ibetStake;
                            int sboStake;

                            if (CaculateStake(BetStakeType,
                                              taskPrepareBetIbet.Result.MatchOdd.MatchID, taskPrepareBetIbet.Result.MinBet, taskPrepareBetIbet.Result.MaxBet,
                                              taskPrepareBetSbo.Result.MatchOdd.MatchID, taskPrepareBetSbo.Result.MinBet, taskPrepareBetSbo.Result.MaxBet,
                                              out ibetStake, out sboStake))
                            {
                                if (CallConfirmBet(taskPrepareBetIbet.Result, ibetStake))
                                {
                                    if (CallConfirmBet(taskPrepareBetSbo.Result, sboStake))
                                    {
                                        Task.Run(
                                            () =>
                                            UpdateBetPool(taskPrepareBetIbet.Result.MatchOdd.ServerType,
                                                          taskPrepareBetSbo.Result.MatchOdd.MatchID, SboBetPool, sboStake));
                                        Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                        LastBetTime = DateTime.Now;
                                        CountBet++;
                                    }

                                    Task.Run(
                                        () =>
                                        UpdateBetPool(taskPrepareBetIbet.Result.MatchOdd.ServerType,
                                                      taskPrepareBetIbet.Result.MatchOdd.MatchID, IbetBetPool, ibetStake));
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw;
            }
        }
        public void ProcessPrepareBet(MatchOddDTO ibetMatchOdd, eBetType ibetBetType, MatchOddDTO sboMatchOdd, eBetType sboBetType, bool isLive)
        {
            Task.Run(() =>
            {
                Logger.InfoFormat(
                    "===============================GOOD COMPARE (Live: {0})===============================", isLive);
                Logger.InfoFormat(
                    "Pick IBET: {0} - Home Name: {1} , Away Name: {2} , Leangue Name: {3} , Home Odd: {4}, Away Odd: {5}, Odd Type: {6}, Odd Value: {7}"
                    , ibetBetType, ibetMatchOdd.HomeTeamName, ibetMatchOdd.AwayTeamName,
                    ibetMatchOdd.LeagueName, ibetMatchOdd.HomeOdd, ibetMatchOdd.AwayOdd, ibetMatchOdd.OddType, ibetMatchOdd.Odd);
                Logger.InfoFormat(
                    "Pick SBO: {0} - Home Name: {1} , Away Name: {2} , Leangue Name: {3} , Home Odd: {4}, Away Odd: {5}, Odd Type: {6}, Odd Value: {7}"
                    , sboBetType, sboMatchOdd.HomeTeamName, sboMatchOdd.AwayTeamName,
                    sboMatchOdd.LeagueName, sboMatchOdd.HomeOdd, sboMatchOdd.AwayOdd, sboMatchOdd.OddType,
                    sboMatchOdd.Odd);
            });

            if (CountTest <= 90000)
            {
                try
                {
                    var taskPrepareBetIbet = Task.Run(() => CallPrepareBet(ibetMatchOdd, ibetBetType, isLive));
                    var taskPrepareBetSbo  = Task.Run(() => CallPrepareBet(sboMatchOdd, sboBetType, isLive));
                    //Logger.InfoFormat("Home type {0}, Max bet {1}, Min bet {2}",
                    //    taskPrepareBetHome.Result.MatchOdd.ServerType, taskPrepareBetHome.Result.MaxBet, taskPrepareBetHome.Result.MinBet);
                    //Logger.InfoFormat("Away type {0}, Away bet {1}, Away bet {2}",
                    //    taskPrepareBetAway.Result.MatchOdd.ServerType, taskPrepareBetAway.Result.MaxBet, taskPrepareBetAway.Result.MinBet);
                    if (taskPrepareBetIbet.Result != null && taskPrepareBetSbo.Result != null &&
                        !taskPrepareBetIbet.Result.HasChangeOdd && !taskPrepareBetSbo.Result.HasChangeOdd)
                    {
                        Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                        //if (LastBetTime.AddSeconds(20) <= DateTime.Now)
                        //{
                        //    Task.Run(() => CallConfirmBet(taskPrepareBetIbet.Result));
                        //    Task.Run(() => CallConfirmBet(taskPrepareBetSbo.Result));
                        //    Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                        //    LastBetTime = DateTime.Now;
                        //    CountTest++;
                        //}
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                    throw;
                }
            }
        }
        private PrepareBetDTO CallPrepareBet(MatchOddDTO matchOdd, eBetType betType, bool isLive)
        {
            switch (matchOdd.ServerType)
            {
            case eServerType.Ibet:
                return(IbetEngine.PrepareBet(matchOdd, betType, isLive));

                break;

            case eServerType.Sbo:
                return(SboEngine.PrepareBet(matchOdd, betType, isLive));

                break;

            default:
                throw new Exception("CallPrepareBet => FAIL : Unknow matchOdd->eServerType param");
                break;
            }
        }
예제 #8
0
        /// <summary>
        /// Mr Kiệt version
        /// </summary>
        /// <param name="piMatch"></param>
        /// <param name="piOdd"></param>
        /// <param name="piBetType"></param>
        /// <param name="isnMatch"></param>
        /// <param name="isnOdd"></param>
        /// <param name="isnBetType"></param>
        /// <param name="isLive"></param>
        /// <param name="serverScan"></param>
        /// <returns></returns>
        public bool ProcessPrepareBet(MatchPiDTO piMatch, OddDTO piOdd, eBetType piBetType, MatchIsnDTO isnMatch, OddDTO isnOdd, eBetType isnBetType, bool isLive,
                                      eServerScan serverScan = eServerScan.Local)
        {
            if (isProcess)
            {
                return(false);
            }

            try
            {
                isProcess = true;


                Task <int> taskMaxBet = Task.Run(() => IsnEngine.GetMax((isnBetType == eBetType.Home ? isnOdd.selectionIdHome : isnOdd.selectionIdAway)));

                var taskpreparePina = Task.Run(() => PiEngine.PrepareBet(piMatch, piOdd, piBetType, piOdd.Odd));


                var prepareBetIsn = IsnEngine.PrepareBet(isnMatch, isnOdd, isnBetType, isLive, isnOdd.Odd);
                if (taskpreparePina.Result == null || prepareBetIsn == null)
                {
                    FireLogScan(piMatch, piOdd, isnMatch, isnOdd, serverScan);
                    return(false);
                }

                bool  betAny;
                float piOddValue = piBetType == eBetType.Home ? piOdd.HomeOdd : piOdd.AwayOdd;
                bool  isGood     = IsGoodOddPair(piOddValue, prepareBetIsn.NewOdd, CompareValueDifferent, out betAny);

                if (isGood)
                {
                    int piStake;
                    int isnStake;

                    if (CaculateStake(BetStakeType,
                                      piMatch.MatchID, 150, (int)((PendingTicket)taskpreparePina.Result.PendingTicket).TicketItem.MaxRiskAmount,
                                      isnMatch.MatchID, 4, taskMaxBet,
                                      out piStake, out isnStake))
                    {
                        // bet kèo dưới trước
                        #region [Bet pina trước nếu là kèo dưới]
                        if (((piOdd.OddType == eOddType.HCP || piOdd.OddType == eOddType.HalfHCP) && piOdd.Odd >= 0) ||// odd dương là được chấp
                            ((piOdd.OddType == eOddType.OU || piOdd.OddType == eOddType.HalfOU) && piBetType == eBetType.Away))   // dựa vào pina bet type để biết là Under
                        {
                            var piConfirmBet = PiEngine.ConfirmBet((PendingTicket)taskpreparePina.Result.PendingTicket, piStake, piMatch, piOdd, piBetType, eBetStatusType.Success);

                            if (piConfirmBet)
                            {
                                if (IsnEngine.ConfirmBet2(isnStake, isnMatch, isnOdd, isnBetType, eBetStatusType.Success))
                                {
                                    Task.Run(
                                        () =>
                                    {
                                        UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake);
                                        UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake);
                                    });
                                    Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                    CountBet++;
                                    LastBetTime = DateTime.Now;
                                    return(true);
                                }
                                else
                                {
                                    Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));

                                    bool ok = false;
                                    for (int i = 0; i < IsnEngine.Rebet; i++)
                                    {
                                        var prepare = IsnEngine.PrepareBet(isnMatch, isnOdd, isnBetType, true, isnOdd.Odd);
                                        if (prepare != null)
                                        {
                                            ok = IsnEngine.ConfirmBet2(isnStake, isnMatch, isnOdd, isnBetType, eBetStatusType.MissOddIsn, true);
                                            if (ok)
                                            {
                                                LastBetTime = DateTime.Now;

                                                Task.Run(() => UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake));
                                                return(true);
                                            }
                                        }
                                        Thread.Sleep(500);
                                    }

                                    if (!ok) // ReBet pina
                                    {
                                        var betTypeAgaint = GetAgainstBetType(piBetType);
                                        var prepare       = PiEngine.PrepareBet(piMatch, piOdd, betTypeAgaint, piOdd.Odd);
                                        if (prepare != null)
                                        {
                                            ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, piMatch, piOdd, betTypeAgaint, eBetStatusType.BetAgainPina, true);
                                            if (ok)
                                            {
                                                LastBetTime = DateTime.Now;
                                                Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                                return(true);
                                            }
                                        }
                                    }

                                    IsnEngine.FireLogBet(isnMatch, isnOdd, isnBetType, isnStake, eBetStatusType.Fail, eServerScan.Local);
                                }
                            }
                        }
                        #endregion
                        #region [Bet ISN trước nếu isn là kèo dưới]
                        else // OU
                        {
                            var isnConfirmBet = IsnEngine.ConfirmBet2(isnStake, isnMatch, isnOdd, isnBetType, eBetStatusType.Success);
                            if (isnConfirmBet)
                            {
                                if (PiEngine.ConfirmBet((PendingTicket)taskpreparePina.Result.PendingTicket, piStake, piMatch, piOdd, piBetType, eBetStatusType.Success))
                                {
                                    Task.Run(
                                        () =>
                                    {
                                        UpdateBetPool(
                                            eServerType.Isn,
                                            isnMatch.MatchID,
                                            IsnBetPool,
                                            isnStake);

                                        UpdateBetPool(
                                            eServerType.Pina,
                                            piMatch.MatchID,
                                            PiBetPool,
                                            piStake);
                                    });
                                    Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                    CountBet++;
                                    LastBetTime = DateTime.Now;
                                    return(true);
                                }
                                else
                                {
                                    Task.Run(() => UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake));

                                    bool ok = false;
                                    for (int i = 0; i < PiEngine.Rebet; i++)
                                    {
                                        var prepare = PiEngine.PrepareBet(piMatch, piOdd, piBetType, piOdd.Odd);
                                        if (prepare != null)
                                        {
                                            ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, piMatch, piOdd, piBetType, eBetStatusType.MissOddPina, true);
                                            if (ok)
                                            {
                                                LastBetTime = DateTime.Now;

                                                Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));

                                                return(true);
                                            }
                                        }
                                        Thread.Sleep(500);
                                    }

                                    if (!ok)// Rebet Isn
                                    {
                                        var betTypeAgaint = GetAgainstBetType(isnBetType);
                                        var prepare       = IsnEngine.PrepareBet(isnMatch, isnOdd, betTypeAgaint, true, isnOdd.Odd);
                                        if (prepare != null)
                                        {
                                            ok = IsnEngine.ConfirmBet2(isnStake, isnMatch, isnOdd, betTypeAgaint, eBetStatusType.BetAgainIsn, true);
                                            if (ok)
                                            {
                                                LastBetTime = DateTime.Now;
                                                Task.Run(() => UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake));
                                                return(true);
                                            }
                                        }
                                    }

                                    PiEngine.FireLogBet(piMatch, piOdd, piBetType, piStake, eBetStatusType.Fail, eServerScan.Local);
                                }
                            }
                        }
                        #endregion



                        // tạm đóng
                        FireLogScan(piMatch, piOdd, isnMatch, isnOdd, serverScan);
                    }
                }
                else
                {
                    // tạm đóng
                    FireLogScan(piMatch, piOdd, isnMatch, isnOdd, serverScan);
                }

                return(false);
            }
            catch (Exception ex)
            {
                Logger.Error(ProcessorName, ex);
                return(false);
            }
            finally
            {
                isProcess = false;
            }
        }
예제 #9
0
        public bool ProcessPrepareBet(MatchPiDTO piMatch, OddDTO piOdd, eBetType piBetType, MatchIsnDTO isnMatch, OddDTO isnOdd, eBetType isnBetType, bool isLive,
                                      eServerScan serverScan = eServerScan.Local)
        {
            if (isProcess)
            {
                return(false);
            }

            //what?
            //string oddCheck = sboMatchOdd.OddID + sboMatchOdd.HomeOdd + sboMatchOdd.AwayOdd + piOdd.HomeOdd +
            //                  piOdd.AwayOdd;

            //if (oddCheck.Equals(OddCheck))
            //{
            //    return false;
            //}

            //OddCheck = oddCheck;

            try
            {
                isProcess = true;

                // wwhat?
                //sboMatchOdd.OldOdd = piBetType == eBetType.Home ? sboMatchOdd.HomeOdd : sboMatchOdd.AwayOdd;
                //   Logger.Debug("");
                //  Logger.Debug("Before call PREPARE ISN " + piMatch.HomeTeamName + "-" + piMatch.AwayTeamName + " " + piOdd.HomeOdd + "_" + piOdd.AwayOdd + " " + piBetType.ToString());
                //Stopwatch a = new Stopwatch();
                //a.Start();

                Task <int> taskMaxBet = Task.Run(() => IsnEngine.GetMax((isnBetType == eBetType.Home ? isnOdd.selectionIdHome : isnOdd.selectionIdAway)));

                Task <PrepareBetDTO> preparePina = null;
                Task <PrepareBetDTO> prepareIsn  = null;

                if ((isnOdd.OddType == eOddType.OU || isnOdd.OddType == eOddType.HalfOU) && isnBetType == eBetType.Away)
                {
                    preparePina = Task.Run(() => PiEngine.PrepareBet(piMatch, piOdd, piBetType, piOdd.Odd));

                    prepareIsn = Task.Run(() => IsnEngine.PrepareBet(isnMatch, isnOdd, isnBetType, isLive, isnOdd.Odd));
                }
                else
                {
                    prepareIsn = Task.Run(() => IsnEngine.PrepareBet(isnMatch, isnOdd, isnBetType, isLive, isnOdd.Odd));

                    preparePina = Task.Run(() => PiEngine.PrepareBet(piMatch, piOdd, piBetType, piOdd.Odd));
                }

                if (preparePina.Result == null || prepareIsn.Result == null)
                {
                    FireLogScan(piMatch, piOdd, isnMatch, isnOdd, serverScan);

                    return(false);
                }

                //a.Stop();
                //Debug.WriteLine("Thoi gian prepare: " + a.ElapsedMilliseconds);

                //   float piOddValue = piBetType == eBetType.Home ? piOdd.HomeOdd : piOdd.AwayOdd;
                //bool isGood = IsGoodOddPair(piOddValue, prepareBetIsn.NewOdd, CompareValueDifferent, out betAny);
                bool isGood = IsGoodOddPair(preparePina.Result.NewOdd, prepareIsn.Result.NewOdd, CompareValueDifferent);
                // Logger.Debug("After isGood=" + isGood.ToString() + " " + piOddValue + "_" + prepareBetIsn.NewOdd + " " + piBetType.ToString());

                if (isGood)
                {
                    float firstOdd = piOdd.Odd;

                    int piStake;
                    int isnStake;

                    if (CaculateStake(BetStakeType,
                                      piMatch.MatchID, 300, (int)((PendingTicket)preparePina.Result.PendingTicket).TicketItem.MaxRiskAmount,
                                      isnMatch.MatchID, 4, taskMaxBet,
                                      out piStake, out isnStake))
                    // if (true)
                    {
                        //if (piStake<(int)((PendingTicket)preparePina.Result.PendingTicket).TicketItem.MinRiskAmount)
                        //{
                        //    Logger.Info("Pi lower than riskamout");
                        //    return false;
                        //}
                        // kèo xỉu isn đnáh trước
                        if ((isnOdd.OddType == eOddType.OU || isnOdd.OddType == eOddType.HalfOU) && isnBetType == eBetType.Away)
                        {
                            var isnConfirmBet = IsnEngine.ConfirmBet2(isnStake, isnMatch, isnOdd, isnBetType, eBetStatusType.Success);
                            if (isnConfirmBet)
                            {
                                if (PiEngine.ConfirmBet2((PendingTicket)preparePina.Result.PendingTicket, piStake, piMatch, piOdd, piBetType, eBetStatusType.Success))
                                {
                                    Task.Run(
                                        () =>
                                    {
                                        UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake);
                                        UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake);
                                    });
                                    Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                    CountBet++;
                                    LastBetTime = DateTime.Now;
                                    return(true);
                                }
                                else
                                {
                                    Task.Run(() => UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake));
                                    var betTypeAgaint = GetAgainstBetType(isnBetType);

                                    for (int i = 0; i < PiEngine.Rebet; i++)
                                    {
                                        lock (IsnEngine.LockLive)
                                        {
                                            var newIsnMatch = IsnEngine._matchs.FirstOrDefault(p => p.MatchID == isnMatch.MatchID);
                                            if (newIsnMatch != null)
                                            {
                                                var newIsnOdd = newIsnMatch.Odds.FirstOrDefault(p => p.Odd == firstOdd && p.OddType == isnOdd.OddType);
                                                if (newIsnOdd != null)
                                                {
                                                    var prepare = IsnEngine.PrepareBet(newIsnMatch, newIsnOdd, betTypeAgaint, true, firstOdd);
                                                    if (prepare != null)
                                                    {
                                                        var ok = IsnEngine.ConfirmBet2(isnStake, newIsnMatch, newIsnOdd, betTypeAgaint, eBetStatusType.BetAgainIsn, true);
                                                        if (ok)
                                                        {
                                                            LastBetTime = DateTime.Now;
                                                            Task.Run(() => UpdateBetPool(eServerType.Isn, newIsnMatch.MatchID, IsnBetPool, isnStake));
                                                            return(true);
                                                        }
                                                    }
                                                }
                                            }
                                        }


                                        Thread.Sleep(2000);
                                    }



                                    IsnEngine.FireLogBet(isnMatch, isnOdd, isnBetType, isnStake, eBetStatusType.Fail, eServerScan.Local);
                                }
                            }
                        }
                        else
                        {
                            var piConfirmBet = PiEngine.ConfirmBet((PendingTicket)preparePina.Result.PendingTicket, piStake, piMatch, piOdd, piBetType, eBetStatusType.Success);

                            if (piConfirmBet)
                            {
                                if (IsnEngine.ConfirmBet(isnStake, isnMatch, isnOdd, isnBetType))
                                {
                                    Task.Run(
                                        () =>
                                    {
                                        UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake);
                                        UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake);
                                    });
                                    Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                    CountBet++;
                                    LastBetTime = DateTime.Now;
                                    return(true);
                                }
                                else if (BetAgainstIbet)
                                {
                                    var betTypeAgaint = GetAgainstBetType(piBetType);

                                    for (int i = 0; i < IsnEngine.Rebet; i++)
                                    {
                                        var prepare = PiEngine.PrepareBet(piMatch, piOdd, betTypeAgaint, firstOdd);
                                        if (prepare != null)
                                        {
                                            var ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, piMatch, piOdd, betTypeAgaint, eBetStatusType.BetAgainPina, true);
                                            if (ok)
                                            {
                                                LastBetTime = DateTime.Now;
                                                Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                                return(true);
                                            }
                                        }

                                        Thread.Sleep(1000);

                                        lock (PiEngine.LockLive)
                                        {
                                            var newPiMatch = PiEngine._matchs.FirstOrDefault(p => p.MatchID == piMatch.MatchID);
                                            if (newPiMatch != null)
                                            {
                                                var newPiOdd = newPiMatch.Odds.FirstOrDefault(p => p.Odd == firstOdd && p.OddType == piOdd.OddType);
                                                if (newPiOdd != null)
                                                {
                                                    prepare = PiEngine.PrepareBet(newPiMatch, newPiOdd, betTypeAgaint, firstOdd);
                                                    if (prepare != null)
                                                    {
                                                        var ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, newPiMatch, newPiOdd, betTypeAgaint, eBetStatusType.BetAgainPina, true);
                                                        if (ok)
                                                        {
                                                            LastBetTime = DateTime.Now;
                                                            Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                                            return(true);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        Thread.Sleep(1000);

                                        lock (IsnEngine.LockLive)
                                        {
                                            var newIsnMatch = IsnEngine._matchs.FirstOrDefault(p => p.MatchID == isnMatch.MatchID);
                                            if (newIsnMatch != null)
                                            {
                                                var newIsnOdd = newIsnMatch.Odds.FirstOrDefault(p => p.Odd == firstOdd && p.OddType == isnOdd.OddType);
                                                if (newIsnOdd != null)
                                                {
                                                    prepare = IsnEngine.PrepareBet(newIsnMatch, newIsnOdd, isnBetType, true, firstOdd);
                                                    if (prepare != null)
                                                    {
                                                        var ok = IsnEngine.ConfirmBet2(isnStake, newIsnMatch, newIsnOdd, isnBetType, eBetStatusType.MissOddIsn, true);
                                                        if (ok)
                                                        {
                                                            LastBetTime = DateTime.Now;
                                                            Task.Run(() => UpdateBetPool(eServerType.Isn, newIsnMatch.MatchID, IsnBetPool, isnStake));
                                                            return(true);
                                                        }
                                                    }
                                                }
                                            }
                                        }

                                        Thread.Sleep(1000);
                                    }

                                    Thread.Sleep(60000);

                                    for (int i = 0; i < IsnEngine.Rebet * 2; i++)
                                    {
                                        var prepare = PiEngine.PrepareBet(piMatch, piOdd, betTypeAgaint, firstOdd);
                                        if (prepare != null)
                                        {
                                            var ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, piMatch, piOdd, betTypeAgaint, eBetStatusType.BetAgainPina, true);
                                            if (ok)
                                            {
                                                LastBetTime = DateTime.Now;
                                                Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                                return(true);
                                            }
                                        }

                                        Thread.Sleep(10000);

                                        lock (PiEngine.LockLive)
                                        {
                                            var newPiMatch = PiEngine._matchs.FirstOrDefault(p => p.MatchID == piMatch.MatchID);
                                            if (newPiMatch != null)
                                            {
                                                var newPiOdd = newPiMatch.Odds.FirstOrDefault(p => p.Odd == firstOdd && p.OddType == piOdd.OddType);
                                                if (newPiOdd != null)
                                                {
                                                    prepare = PiEngine.PrepareBet(newPiMatch, newPiOdd, betTypeAgaint, firstOdd);
                                                    if (prepare != null)
                                                    {
                                                        var ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, newPiMatch, newPiOdd, betTypeAgaint, eBetStatusType.BetAgainPina, true);
                                                        if (ok)
                                                        {
                                                            LastBetTime = DateTime.Now;
                                                            Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                                            return(true);
                                                        }
                                                    }
                                                }
                                            }
                                        }


                                        Thread.Sleep(10000);

                                        lock (IsnEngine.LockLive)
                                        {
                                            var newIsnMatch = IsnEngine._matchs.FirstOrDefault(p => p.MatchID == isnMatch.MatchID);
                                            if (newIsnMatch != null)
                                            {
                                                var newIsnOdd = newIsnMatch.Odds.FirstOrDefault(p => p.Odd == firstOdd && p.OddType == isnOdd.OddType);
                                                if (newIsnOdd != null)
                                                {
                                                    prepare = IsnEngine.PrepareBet(newIsnMatch, newIsnOdd, betTypeAgaint, true, firstOdd);
                                                    if (prepare != null)
                                                    {
                                                        var ok = IsnEngine.ConfirmBet2(isnStake, newIsnMatch, newIsnOdd, betTypeAgaint, eBetStatusType.MissOddIsn, true);
                                                        if (ok)
                                                        {
                                                            LastBetTime = DateTime.Now;
                                                            Task.Run(() => UpdateBetPool(eServerType.Isn, newIsnMatch.MatchID, IsnBetPool, isnStake));
                                                            return(true);
                                                        }
                                                    }
                                                }
                                            }
                                        }

                                        Thread.Sleep(10000);
                                    }
                                }

                                LastBetTime = DateTime.Now;

                                Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));

                                return(true);
                            }
                        }
                        // tạm đóng
                        FireLogScan(piMatch, piOdd, isnMatch, isnOdd, serverScan);
                    }
                }
                else
                {
                    // tạm đóng
                    FireLogScan(piMatch, piOdd, isnMatch, isnOdd, serverScan);
                }

                return(false);
            }
            catch (Exception ex)
            {
                Logger.Error(ProcessorName, ex);
                return(false);
            }
            finally
            {
                isProcess = false;
            }
        }
예제 #10
0
        private bool BetAgainstIbetRequest(PrepareBetDTO oldIbetPrepare, MatchOddDTO ibetMatchOddSource, eBetType ibetBetType,
                                           bool isLive, float sboMatchOdd, int ibetStake, bool hasGetAgain)
        {
            MatchOddDTO ibetMatchOdd;

            if (hasGetAgain)
            {
                Thread.Sleep(60000);
                lock (IbetEngine.LockLive)
                {
                    ibetMatchOdd =
                        IbetEngine.LiveMatchOddDatas.FirstOrDefault(l => l.MatchID == ibetMatchOddSource.MatchID &&
                                                                    l.Odd.Equals(ibetMatchOddSource.Odd) &&
                                                                    l.OddType == ibetMatchOddSource.OddType);
                }

                if (ibetMatchOdd == null)
                {
                    return(false);
                }
            }
            else
            {
                ibetMatchOdd = ibetMatchOddSource;
            }

            var againstIbetPrepare = CallPrepareIbet(ibetMatchOdd, GetAgainstBetType(ibetBetType), isLive, sboMatchOdd);

            if (againstIbetPrepare.IsRunning)
            {
                //if (againstIbetPrepare.HasScore)
                //{
                if (againstIbetPrepare.HomeScore == oldIbetPrepare.HomeScore &&
                    againstIbetPrepare.AwayScore == oldIbetPrepare.AwayScore)
                {
                    string ibetConfirmMsg;
                    if (CallConfirmBet(againstIbetPrepare, ibetStake, oldIbetPrepare.OddDef, out ibetConfirmMsg, isLive, true))
                    {
                        LastBetTime = DateTime.Now;

                        Task.Run(
                            () =>
                            UpdateBetPool(oldIbetPrepare.MatchOdd.ServerType,
                                          oldIbetPrepare.MatchOdd.MatchID, IbetBetPool,
                                          ibetStake * 2));
                        return(true);
                    }
                }
                //}
                Logger.Info("BET MGUOC IBET FAIL....TY SO THAY DOI....");
            }

            return(false);
        }
예제 #11
0
 private PrepareBetDTO CallPrepareIbetAgain(MatchOddDTO matchOdd, eBetType betType, bool isLive, float oddDef, string bpMatch)
 {
     return(IbetEngine.PrepareBet(matchOdd, betType, isLive, oddDef, bpMatch));
 }
예제 #12
0
        public bool ProcessPrepareBet(MatchOddDTO ibetMatchOdd, eBetType ibetBetType, MatchOddDTO sboMatchOdd, eBetType sboBetType, bool isLive,
                                      eServerScan serverScan = eServerScan.Local, bool callSecond = false, string bpMatch = "", PrepareBetDTO sboPrepareBet = null)
        {
            if (isProcess && !callSecond) // || LastProcessPrepare.AddMilliseconds(200) > DateTime.Now
            {
                return(false);
            }

            try
            {
                isProcess = true;
                PrepareBetDTO ibetPrepareBet;
                if (!callSecond)
                {
                    sboMatchOdd.OldOdd = sboBetType == eBetType.Home ? sboMatchOdd.HomeOdd : sboMatchOdd.AwayOdd;

                    var taskPrepareBetSbo =
                        Task.Run(() => CallPrepareBet(sboMatchOdd, sboBetType, isLive, ibetMatchOdd.Odd));
                    ibetPrepareBet = CallPrepareBet(ibetMatchOdd, ibetBetType, isLive, sboMatchOdd.Odd);

                    if (!ibetPrepareBet.IsSuccess || taskPrepareBetSbo.Result == null)
                    {
                        return(false);
                    }

                    sboPrepareBet = taskPrepareBetSbo.Result;
                }
                else
                {
                    Logger.Warn("BAT DAU PREPARE LAN 2");
                    ibetPrepareBet = CallPrepareIbetAgain(ibetMatchOdd, ibetBetType, isLive, sboMatchOdd.Odd, bpMatch);
                    if (!ibetPrepareBet.IsSuccess)
                    {
                        return(false);
                    }
                }


                //sboMatchOdd.OldOdd = sboBetType == eBetType.Home ? sboMatchOdd.HomeOdd : sboMatchOdd.AwayOdd;

                //var taskPrepareBetSbo =
                //    Task.Run(() => CallPrepareBet(sboMatchOdd, sboBetType, isLive, ibetMatchOdd.Odd));
                //PrepareBetDTO ibetPrepareBet = CallPrepareBet(ibetMatchOdd, ibetBetType, isLive, sboMatchOdd.Odd);

                //if (!ibetPrepareBet.IsSuccess || taskPrepareBetSbo.Result == null)
                //{
                //    return false;
                //}
                //PrepareBetDTO sboPrepareBet = taskPrepareBetSbo.Result;

                if (ibetPrepareBet.IsRunning)
                {
                    bool isGood = IsGoodOddPair(ibetPrepareBet.NewOdd, sboPrepareBet.NewOdd, CompareValueDifferent);

                    if (isGood)
                    {
                        int ibetStake;
                        int sboStake;

                        if (CaculateStake(BetStakeType,
                                          ibetPrepareBet.MatchOdd.MatchID,
                                          ibetPrepareBet.MinBet,
                                          ibetPrepareBet.MaxBet,
                                          sboPrepareBet.MatchOdd.MatchID,
                                          sboPrepareBet.MinBet,
                                          sboPrepareBet.MaxBet,
                                          out ibetStake, out sboStake))
                        {
                            string ibetConfirmMsg;

                            if (CallConfirmBet(ibetPrepareBet, ibetStake, sboMatchOdd.Odd, out ibetConfirmMsg, isLive, false, serverScan, callSecond))
                            {
                                LastBetIbetSuccess = DateTime.Now;

                                if (CallConfirmBet(sboPrepareBet, sboStake, ibetMatchOdd.Odd, out ibetConfirmMsg, isLive, false, serverScan))
                                {
                                    Task.Run(
                                        () =>
                                    {
                                        UpdateBetPool(
                                            sboPrepareBet.MatchOdd.ServerType,
                                            sboPrepareBet.MatchOdd.MatchID,
                                            SboBetPool, sboStake);
                                        UpdateBetPool(
                                            ibetPrepareBet.MatchOdd.ServerType,
                                            ibetPrepareBet.MatchOdd.MatchID,
                                            IbetBetPool,
                                            ibetStake);
                                    });
                                    Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                    CountBet++;
                                    LastBetTime = DateTime.Now;
                                    return(true);
                                }
                                else
                                {
                                    if (BetAgainstIbet)
                                    {
                                        Logger.Info(ProcessorName + " DAT NGUOC IBET<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");

                                        if (!BetAgainstIbetRequest(ibetPrepareBet, ibetMatchOdd, ibetBetType,
                                                                   isLive, sboMatchOdd.Odd, ibetStake, false))
                                        {
                                            Thread.Sleep(3000);
                                            Logger.Info("CALL LAN 2 BET MGUOC IBET<<<<<<<<<<<<<<<<");
                                            if (BetAgainstIbetRequest(ibetPrepareBet, ibetMatchOdd, ibetBetType,
                                                                      isLive, sboMatchOdd.Odd, ibetStake, true))
                                            {
                                                isProcess = false;
                                                return(true);
                                            }
                                            else
                                            {
                                                Logger.Info("DAT NGUOC THAT BAI, KHOI DONG LAI IBET!!!");
                                                IbetEngine.BetAgainstTransactions.Add(new BetAgainstTransaction()
                                                {
                                                    BetType    = GetAgainstBetType(ibetBetType),
                                                    IsLive     = isLive,
                                                    MatchOdd   = ibetMatchOdd,
                                                    OddCompare = sboMatchOdd.Odd,
                                                    Stake      = ibetStake,
                                                    HomeScore  = ibetPrepareBet.HomeScore,
                                                    AwayScore  = ibetPrepareBet.AwayScore
                                                });

                                                Task.Run(() =>
                                                {
                                                    Logger.Info("CALL KHOI DONG LAI IBET!!!");
                                                    IbetEngine.UpdateException(IbetEngine, eExceptionType.LoginFail);
                                                });
                                            }
                                        }
                                        else
                                        {
                                            isProcess = false;
                                            return(true);
                                        }

                                        Logger.Info("BET MGUOC IBET FAIL...DAT NGUOC THAT BAI...");
                                    }
                                }

                                LastBetTime = DateTime.Now;

                                Task.Run(
                                    () =>
                                    UpdateBetPool(ibetPrepareBet.MatchOdd.ServerType,
                                                  ibetPrepareBet.MatchOdd.MatchID, IbetBetPool,
                                                  ibetStake));
                                return(true);
                            }
                            else
                            {
                                if (!string.IsNullOrEmpty(ibetConfirmMsg))
                                {
                                    string bpValue = GetBpMatchIbet(ibetConfirmMsg);
                                    Logger.Info("GOI COMPARE LAI LAN 2, bp_match: " + bpValue);
                                    return(ProcessPrepareBet(ibetMatchOdd, ibetBetType, sboMatchOdd, sboBetType,
                                                             isLive,
                                                             serverScan, true, bpValue, sboPrepareBet));
                                }
                            }

                            FireLogScan(ibetMatchOdd, sboMatchOdd, serverScan);
                        }
                    }
                    else
                    {
                        FireLogScan(ibetMatchOdd, sboMatchOdd, serverScan);
                    }
                }
                else
                {
                    FireLogScan(ibetMatchOdd, sboMatchOdd, serverScan);
                }
                return(false);
            }
            catch (Exception ex)
            {
                Logger.Error(ProcessorName, ex);
                return(false);
            }
            finally
            {
                //LastProcessPrepare = DateTime.Now;
                isProcess = false;
            }
        }
예제 #13
0
        public bool ProcessPrepareBet(MatchPiDTO piMatch, OddDTO piOdd, eBetType piBetType, MatchOddDTO sboMatchOdd, eBetType sboBetType, bool isLive,
                                      eServerScan serverScan = eServerScan.Local)
        {
            if (isProcess)
            {
                return(false);
            }

            try
            {
                isProcess = true;

                sboMatchOdd.OldOdd = sboBetType == eBetType.Home ? sboMatchOdd.HomeOdd : sboMatchOdd.AwayOdd;

                var prepareBetPina = Task.Run(() => PiEngine.PrepareBet(piMatch, piOdd, piBetType, piOdd.Odd));


                var prepareBetSbo = CallPrepareBet(sboMatchOdd, sboBetType, isLive, piOdd.PiOdd);

                if (prepareBetSbo == null || prepareBetPina.Result == null)
                {
                    FireLogScan(piMatch, piOdd, sboMatchOdd, serverScan);

                    return(false);
                }

                float piOddValue = piBetType == eBetType.Home ? piOdd.HomeOdd : piOdd.AwayOdd;
                bool  isGood     = IsGoodOddPair(piOddValue, prepareBetSbo.NewOdd, CompareValueDifferent);

                if (isGood)
                {
                    float firstOdd = piOdd.Odd;
                    int   piStake;
                    int   sboStake;

                    if (CaculateStake(BetStakeType,
                                      piMatch.MatchID,
                                      150,
                                      (int)((PendingTicket)prepareBetPina.Result.PendingTicket).TicketItem.MaxRiskAmount,
                                      prepareBetSbo.MatchOdd.MatchID,
                                      prepareBetSbo.MinBet,
                                      prepareBetSbo.MaxBet,
                                      out piStake, out sboStake))
                    {
                        var piConfirmBet = PiEngine.ConfirmBet((PendingTicket)prepareBetPina.Result.PendingTicket, piStake, piMatch, piOdd, piBetType, eBetStatusType.Success);

                        if (piConfirmBet)
                        {
                            if (SboEngine.ConfirmBet(sboStake, piOdd.PiOdd, isLive, serverScan, piMatch.HomeTeamName, piMatch.AwayTeamName))
                            {
                                Task.Run(
                                    () =>
                                {
                                    UpdateBetPool(
                                        prepareBetSbo.MatchOdd.ServerType,
                                        prepareBetSbo.MatchOdd.MatchID,
                                        SboBetPool, sboStake);
                                    UpdateBetPool(
                                        eServerType.Pina,
                                        piMatch.MatchID,
                                        PiBetPool,
                                        piStake);
                                });
                                Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                CountBet++;
                                LastBetTime = DateTime.Now;
                                return(true);
                            }
                            else
                            {
                                if (BetAgainstIbet)
                                {
                                    var betTypeAgaint = GetAgainstBetType(piBetType);

                                    for (int i = 0; i < SboEngine.Rebet; i++)
                                    {
                                        var prepare = PiEngine.PrepareBet(piMatch, piOdd, betTypeAgaint, firstOdd);
                                        if (prepare != null)
                                        {
                                            var ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, piMatch, piOdd, betTypeAgaint, eBetStatusType.BetAgainstIbet, true);
                                            if (ok)
                                            {
                                                LastBetTime = DateTime.Now;
                                                Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                                return(true);
                                            }
                                        }
                                        Thread.Sleep(1000);

                                        lock (PiEngine.LockLive)
                                        {
                                            var newPiMatch = PiEngine._matchs.FirstOrDefault(p => p.MatchID == piMatch.MatchID);
                                            if (newPiMatch != null)
                                            {
                                                var newPiOdd = newPiMatch.Odds.FirstOrDefault(p => p.Odd == firstOdd && p.OddType == piOdd.OddType);
                                                if (newPiOdd != null)
                                                {
                                                    prepare = PiEngine.PrepareBet(newPiMatch, newPiOdd, betTypeAgaint, firstOdd);
                                                    if (prepare != null)
                                                    {
                                                        var ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, newPiMatch, newPiOdd, betTypeAgaint, eBetStatusType.BetAgainstIbet, true);
                                                        if (ok)
                                                        {
                                                            LastBetTime = DateTime.Now;
                                                            Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                                            return(true);
                                                        }
                                                    }
                                                }
                                            }
                                        }



                                        Thread.Sleep(1000);
                                    }

                                    Thread.Sleep(60000);

                                    for (int i = 0; i < SboEngine.Rebet * 2; i++)
                                    {
                                        var prepare = PiEngine.PrepareBet(piMatch, piOdd, betTypeAgaint, firstOdd);
                                        if (prepare != null)
                                        {
                                            var ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, piMatch, piOdd, betTypeAgaint, eBetStatusType.BetAgainstIbet, true);
                                            if (ok)
                                            {
                                                LastBetTime = DateTime.Now;
                                                Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                                return(true);
                                            }
                                        }
                                        Thread.Sleep(10000);

                                        lock (PiEngine.LockLive)
                                        {
                                            var newPiMatch = PiEngine._matchs.FirstOrDefault(p => p.MatchID == piMatch.MatchID);
                                            if (newPiMatch != null)
                                            {
                                                var newPiOdd = newPiMatch.Odds.FirstOrDefault(p => p.Odd == firstOdd && p.OddType == piOdd.OddType);
                                                if (newPiOdd != null)
                                                {
                                                    prepare = PiEngine.PrepareBet(newPiMatch, newPiOdd, betTypeAgaint, firstOdd);
                                                    if (prepare != null)
                                                    {
                                                        var ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, newPiMatch, newPiOdd, betTypeAgaint, eBetStatusType.BetAgainstIbet, true);
                                                        if (ok)
                                                        {
                                                            LastBetTime = DateTime.Now;
                                                            Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                                            return(true);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        Thread.Sleep(1000);
                                    }

                                    Logger.Info("BET MGUOC IBET FAIL...DAT NGUOC THAT BAI...");
                                }
                            }

                            LastBetTime = DateTime.Now;

                            Task.Run(
                                () =>
                                UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));

                            return(true);
                        }

                        FireLogScan(piMatch, piOdd, sboMatchOdd, serverScan);
                    }
                }
                else
                {
                    FireLogScan(piMatch, piOdd, sboMatchOdd, serverScan);
                }

                return(false);
            }
            catch (Exception ex)
            {
                Logger.Error(ProcessorName, ex);
                return(false);
            }
            finally
            {
                isProcess = false;
            }
        }
예제 #14
0
        private bool BetAgainstIbetRequest(PrepareBetDTO oldIbetPrepare, MatchOddDTO ibetMatchOdd, eBetType ibetBetType, bool isLive, float sboMatchOdd, int ibetStake)
        {
            var againstIbetPrepare = CallPrepareBet(ibetMatchOdd, GetAgainstBetType(ibetBetType), isLive, sboMatchOdd);

            if (againstIbetPrepare.IsRunning)
            {
                //if (againstIbetPrepare.HasScore)
                //{
                if (againstIbetPrepare.HomeScore == oldIbetPrepare.HomeScore &&
                    againstIbetPrepare.AwayScore == oldIbetPrepare.AwayScore)
                {
                    if (CallConfirmBet(againstIbetPrepare, ibetStake, oldIbetPrepare.OddDef, isLive, true))
                    {
                        LastBetTime = DateTime.Now;

                        Task.Run(
                            () =>
                            UpdateBetPool(oldIbetPrepare.MatchOdd.ServerType,
                                          oldIbetPrepare.MatchOdd.MatchID, IbetBetPool,
                                          ibetStake * 2));
                        return(true);
                    }
                }
                //}
                Logger.Info("BET MGUOC IBET FAIL....TY SO THAY DOI....");
            }

            return(false);
        }
예제 #15
0
        public bool ProcessPrepareBet(MatchPiDTO piMatchOdd, OddDTO piOdd, eBetType piBetType, MatchOddDTO sboMatchOdd, eBetType sboBetType, bool isLive,
                                      eServerScan serverScan = eServerScan.Local)
        {
            if (isProcess)
            {
                return(false);
            }
            string oddCheck = sboMatchOdd.OddID + sboMatchOdd.HomeOdd + sboMatchOdd.AwayOdd + piOdd.HomeOdd +
                              piOdd.AwayOdd;

            if (oddCheck.Equals(OddCheck))
            {
                return(false);
            }

            OddCheck = oddCheck;

            try
            {
                isProcess = true;

                sboMatchOdd.OldOdd = sboBetType == eBetType.Home ? sboMatchOdd.HomeOdd : sboMatchOdd.AwayOdd;

                var prepareBetSbo = CallPrepareBet(sboMatchOdd, sboBetType, isLive, piOdd.PiOdd);

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

                bool  betAny;
                float piOddValue = piBetType == eBetType.Home ? piOdd.HomeOdd : piOdd.AwayOdd;
                bool  isGood     = IsGoodOddPair(piOddValue, prepareBetSbo.NewOdd, CompareValueDifferent, out betAny);

                if (isGood)
                {
                    int piStake;
                    int sboStake;

                    if (CaculateStake(BetStakeType,
                                      piMatchOdd.MatchID,
                                      150,
                                      (int)piOdd.max.Value,
                                      prepareBetSbo.MatchOdd.MatchID,
                                      prepareBetSbo.MinBet,
                                      prepareBetSbo.MaxBet,
                                      out piStake, out sboStake))
                    {
                        var piConfirmBet = PiEngine.ConfirmBet(piStake, piMatchOdd, piOdd, piBetType);

                        if (piConfirmBet)
                        {
                            if (SboEngine.ConfirmBet(sboStake, piOdd.PiOdd, isLive, serverScan, piMatchOdd.HomeTeamName, piMatchOdd.AwayTeamName))
                            {
                                Task.Run(
                                    () =>
                                {
                                    UpdateBetPool(
                                        prepareBetSbo.MatchOdd.ServerType,
                                        prepareBetSbo.MatchOdd.MatchID,
                                        SboBetPool, sboStake);
                                    UpdateBetPool(
                                        eServerType.Pina,
                                        piMatchOdd.MatchID,
                                        PiBetPool,
                                        piStake);
                                });
                                Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                CountBet++;
                                LastBetTime = DateTime.Now;
                                return(true);
                            }
                            else
                            {
                                if (BetAgainstIbet)
                                {
                                    Logger.Info(ProcessorName + " DAT NGUOC PINA<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
                                    var betTypeAgaint = GetAgainstBetType(piBetType);

                                    if (!PiEngine.TryConfirmBet(piStake, piMatchOdd, piOdd, betTypeAgaint))
                                    {
                                        Thread.Sleep(15000);
                                        Logger.Info("CALL LAN 2 BET MGUOC PINA<<<<<<<<<<<<<<<<");
                                        if (PiEngine.TryConfirmBet(piStake, piMatchOdd, piOdd, betTypeAgaint))
                                        {
                                            isProcess = false;
                                            return(true);
                                        }
                                        else
                                        {
                                            Logger.Info("CALL LAN 3 BET MGUOC LAI PINA<<<<<<<<<<<<<<<<");
                                            prepareBetSbo = CallPrepareBet(sboMatchOdd, sboBetType, isLive, piOdd.PiOdd);
                                            if (prepareBetSbo == null)
                                            {
                                                Logger.Fatal("CALL LAN 3 Prepare Sbo fail!!!!!");
                                                Thread.Sleep(25000);
                                                if (PiEngine.TryConfirmBet(piStake, piMatchOdd, piOdd, betTypeAgaint))
                                                {
                                                    isProcess = false;
                                                    return(true);
                                                }
                                            }
                                            else
                                            {
                                                if (!SboEngine.ConfirmBet(sboStake, piOdd.PiOdd, isLive, serverScan, piMatchOdd.HomeTeamName, piMatchOdd.AwayTeamName))
                                                {
                                                    Thread.Sleep(25000);
                                                    if (PiEngine.TryConfirmBet(piStake, piMatchOdd, piOdd, betTypeAgaint))
                                                    {
                                                        isProcess = false;
                                                        return(true);
                                                    }
                                                    else
                                                    {
                                                        prepareBetSbo = CallPrepareBet(sboMatchOdd, sboBetType, isLive, piOdd.PiOdd);
                                                        if (prepareBetSbo == null)
                                                        {
                                                            Logger.Fatal("CALL LAN 4 Prepare Sbo fail!!!!!");
                                                            Thread.Sleep(25000);
                                                            PiEngine.TryConfirmBet(piStake, piMatchOdd, piOdd,
                                                                                   betTypeAgaint);
                                                        }
                                                        else
                                                        {
                                                            SboEngine.ConfirmBet(sboStake, piOdd.PiOdd, isLive, serverScan, piMatchOdd.HomeTeamName, piMatchOdd.AwayTeamName);
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    isProcess = false;
                                                    return(true);
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        isProcess = false;
                                        return(true);
                                    }

                                    Logger.Info("BET MGUOC IBET FAIL...DAT NGUOC THAT BAI...");
                                }
                            }

                            LastBetTime = DateTime.Now;

                            Task.Run(
                                () =>
                                UpdateBetPool(eServerType.Pina, piMatchOdd.MatchID, PiBetPool, piStake));

                            return(true);
                        }

                        FireLogScan(piMatchOdd, piOdd, sboMatchOdd, serverScan);
                    }
                }
                else
                {
                    FireLogScan(piMatchOdd, piOdd, sboMatchOdd, serverScan);
                }

                return(false);
            }
            catch (Exception ex)
            {
                Logger.Error(ProcessorName, ex);
                return(false);
            }
            finally
            {
                isProcess = false;
            }
        }
예제 #16
0
 public BetInfoQueue(MatchOddDTO matchOdd, eBetType betType, bool isLive)
 {
     MatchOdd = matchOdd;
     BetType  = betType;
     IsLive   = isLive;
 }
예제 #17
0
        //private bool HasGoodMatchOdd(List<MatchOddDTO> matchOddSource, out MatchOddDTO matchOdd, out eBetType buyType, out eServerType serverBuy, out OddDTO ibetOdd)
        //{
        //    buyType = eBetType.Unknown;
        //    serverBuy = eServerType.Unknown;
        //    matchOdd = null;
        //    ibetOdd = null;

        //    if (!BuySbo & matchOddSource.Any())
        //    {
        //        var sboMatchOdd = matchOddSource.First();
        //        var ibetMatch = IbetEn.LiveMatchOddBag.FirstOrDefault(m =>
        //            !m.IsDeleted &&
        //            (String.Equals(m.HomeTeamName, sboMatchOdd.HomeTeamName, StringComparison.CurrentCultureIgnoreCase)
        //             ||
        //             String.Equals(m.AwayTeamName, sboMatchOdd.AwayTeamName, StringComparison.CurrentCultureIgnoreCase)));

        //        if (ibetMatch != null)
        //        {
        //            foreach (var oddDto in ibetMatch.Odds)
        //            {

        //            }
        //        }
        //    }


        //    var count = matchOddSource.Count;
        //    for (int i = 1; i <= count; i++)
        //    {
        //        var matchOddCheck = matchOddSource[count - i];

        //        if (matchOddCheck.AbsOdd >= GoalDefCheck)
        //        {
        //            float checkOddDef = 1;
        //            if (matchOddCheck.HomeOdd > 0 && matchOddCheck.AwayOdd > 0)
        //            {
        //                checkOddDef = (1 - matchOddCheck.HomeOdd) + (1 - matchOddCheck.AwayOdd);
        //            }
        //            else
        //            {
        //                checkOddDef = Math.Abs(matchOddCheck.HomeOdd + matchOddCheck.AwayOdd);
        //            }

        //            //so sanh nho hon hoac = 10 xu
        //            if (checkOddDef <= OddDevCheck)
        //            {
        //                buyType = matchOddCheck.Odd > 0 ? eBetType.Away : eBetType.Home;
        //                if (!PickUnder)
        //                {
        //                    buyType = buyType == eBetType.Home ? eBetType.Away : eBetType.Home;
        //                }
        //                //so sanh keo tren thap nhat la 0.70
        //                bool validHighOdd;


        //                if (buyType == eBetType.Home)
        //                {
        //                    validHighOdd = Math.Abs(matchOddCheck.AwayOdd) > 0.75;
        //                }
        //                else
        //                {
        //                    validHighOdd = Math.Abs(matchOddCheck.AwayOdd) > 0.75;
        //                }

        //                if (validHighOdd)
        //                {
        //                    serverBuy = eServerType.Sbo;
        //                    return true;
        //                }
        //            }
        //        }
        //    }

        //    return false;
        //}


        private bool HasGoodMatchOdd(List <MatchOddDTO> matchOddSource, out MatchOddDTO matchOdd, out eBetType buyType, out eServerType serverBuy, out OddDTO ibetOdd)
        {
            matchOdd  = null;
            buyType   = eBetType.Unknown;
            serverBuy = eServerType.Unknown;
            ibetOdd   = null;
            var count = matchOddSource.Count;

            for (int i = 1; i <= count; i++)
            {
                var matchOddCheck = matchOddSource[count - i];

                if (GetValidIbetMatchOdd(matchOddCheck, out ibetOdd) && matchOddCheck.AbsOdd >= GoalDefCheck)
                {
                    float checkOddDef = 1;
                    if (matchOddCheck.HomeOdd > 0 && matchOddCheck.AwayOdd > 0)
                    {
                        checkOddDef = (1 - matchOddCheck.HomeOdd) + (1 - matchOddCheck.AwayOdd);
                    }
                    else
                    {
                        checkOddDef = Math.Abs(matchOddCheck.HomeOdd + matchOddCheck.AwayOdd);
                    }

                    //so sanh nho hon hoac = 10 xu
                    if (checkOddDef <= OddDevCheck)
                    {
                        buyType = matchOddCheck.Odd > 0 ? eBetType.Away : eBetType.Home;
                        if (!PickUnder)
                        {
                            buyType = buyType == eBetType.Home ? eBetType.Away : eBetType.Home;
                        }

                        //so sanh keo tren thap nhat la 0.70
                        bool  validHighOdd;
                        float ibetOddCheck = 0f;
                        float sboOddCheck  = 0f;

                        if (buyType == eBetType.Home)
                        {
                            validHighOdd = Math.Abs(matchOddCheck.AwayOdd) > 0.75;
                            ibetOddCheck = ibetOdd.HomeOdd;
                            sboOddCheck  = matchOddCheck.HomeOdd;
                        }
                        else
                        {
                            validHighOdd = Math.Abs(matchOddCheck.AwayOdd) > 0.75;
                            ibetOddCheck = ibetOdd.AwayOdd;
                            sboOddCheck  = matchOddCheck.AwayOdd;
                        }

                        if (validHighOdd)
                        {
                            if (ibetOddCheck > sboOddCheck)
                            {
                                serverBuy = eServerType.Ibet;
                            }
                            else
                            {
                                serverBuy = eServerType.Sbo;
                            }

                            matchOdd = matchOddCheck;
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
예제 #18
0
 private eBetType GetAgainstBetType(eBetType betType)
 {
     return(betType == eBetType.Home ? eBetType.Away : eBetType.Home);
 }
예제 #19
0
        private void btnTrade_Click(object sender, EventArgs e)
        {
            //List<int> listA= new List<int>(){1,2,3,4,5};
            //List<int> listB = new List<int>() { 10, 20, 30, 40, 50 };
            //if (ckSellAfter.Checked)
            //{
            //    UpdateLogText(string.Format("{0} aa", DateTime.Now));
            //    return;
            //}
            //int timeWaitSell = (int) numSellAfterSecond.Value;
            //Task.Factory.StartNew(() =>
            //{
            //    var buySt2atus = Parallel.ForEach(listA, (engine) =>
            //    {
            //        UpdateLogText(string.Format("{0} value {1}", DateTime.Now, engine));
            //    }).IsCompleted;

            //});

            //Task.Factory.StartNew(() =>
            //{
            //    //Task.Delay(timeWaitSell);
            //    Thread.Sleep(timeWaitSell);
            //    var buySt2atus = Parallel.ForEach(listB, (engine) =>
            //    {
            //        UpdateLogText(string.Format("{0} value {1}", DateTime.Now, engine));
            //    }).IsCompleted;

            //});
            // return;

            if (dgvLogScan.SelectedCells.Count > 0)
            {
                bool hasSellAfter = ckSellAfter.Checked;
                int  timeWaitSell = (int)numSellAfterSecond.Value;

                if (hasSellAfter && string.IsNullOrEmpty(txtStake.Text))
                {
                    UpdateLogText("Lỗi chưa nhập tổng tiền mua.", eLogTextType.Error);
                    return;
                }

                int selectedrowindex = dgvLogScan.SelectedCells[0].RowIndex;

                DataGridViewRow selectedRow  = dgvLogScan.Rows[selectedrowindex];
                string          value1       = selectedRow.Cells[0].Value.ToString();
                bool            isLive       = value1 == "LIVE";
                string          homeTeamName = selectedRow.Cells[1].Value.ToString();
                string          awayTeamName = selectedRow.Cells[2].Value.ToString();
                eOddType        oddType      = (eOddType)selectedRow.Cells[3].Value;
                float           odd          = (float)selectedRow.Cells[4].Value;

                eBetType buyBetType  = rdBetHome.Checked ? eBetType.Home : eBetType.Away;
                eBetType sellBetType = buyBetType == eBetType.Home ? eBetType.Away : eBetType.Home;
                int      stake;
                int.TryParse(txtStake.Text, out stake);
                if (stake == 0)
                {
                    stake = -1;
                }

                if (hasSellAfter)
                {
                    UpdateLogText("Bắt đầu giao dịch!", eLogTextType.Warning);

                    var buyOnlineEngine = buyAccEngines.Where(b => b.AccountStatus == eAccountStatus.Online).ToList();

                    int sumBuyStake = 0;
                    int stakeBuy    = (int)Math.Round((double)(stake / buyOnlineEngine.Count), 0);
                    Task.Factory.StartNew(() =>
                    {
                        var buyStatus = Parallel.ForEach(buyOnlineEngine, (engine) =>
                        {
                            int realStake;
                            if (engine.ProcessBetAnyway(stakeBuy, homeTeamName, awayTeamName, odd, oddType, buyBetType, isLive, out realStake))
                            {
                                sumBuyStake += realStake;
                                UpdateLogText(string.Format("MUA {0} điểm vào tài khoản [{1}] trận {2} - {3} thành công!",
                                                            realStake, engine.UserName, homeTeamName, awayTeamName), eLogTextType.Highlight);
                            }
                            else
                            {
                                UpdateLogText(string.Format("MUA vào tài khoản [{0}] trận {1} - {2} không thành công!",
                                                            engine.UserName, homeTeamName, awayTeamName), eLogTextType.Error);
                            }
                        }).IsCompleted;

                        UpdateLogText(string.Format("TỔNG MUA: {0}", sumBuyStake), eLogTextType.Highlight);
                    });

                    var sellOnlineEngine = sellAccEngines.Where(b => b.AccountStatus == eAccountStatus.Online).ToList();

                    var sumSell   = ConvertExchange(stake, buyExchange, sellExchange);
                    var sellStake = (int)Math.Round((double)(sumSell / sellOnlineEngine.Count), 0);
                    UpdateLogText(string.Format("CHUẨN BỊ BÁN: {0}", sumSell), eLogTextType.Highlight);

                    Task.Factory.StartNew(() =>
                    {
                        Thread.Sleep(timeWaitSell);
                        int sumSellStake = 0;
                        var sellStatus   = Parallel.ForEach(sellOnlineEngine, (engine) =>
                        {
                            int realStake;
                            if (engine.ProcessBetAnyway(sellStake, homeTeamName, awayTeamName, odd, oddType, sellBetType,
                                                        isLive, out realStake))
                            {
                                sumSellStake += realStake;
                                UpdateLogText(
                                    string.Format("BÁN {0} điểm vào tài khoản [{1}] trận {2} - {3} thành công!",
                                                  realStake, engine.UserName, homeTeamName, awayTeamName), eLogTextType.Highlight);
                            }
                            else
                            {
                                UpdateLogText(string.Format("BÁN vào tài khoản [{0}] trận {1} - {2} không thành công!",
                                                            engine.UserName, homeTeamName, awayTeamName), eLogTextType.Error);
                            }
                        }).IsCompleted;
                        UpdateLogText(string.Format("TỔNG BÁN: {0}", sumSellStake), eLogTextType.Highlight);
                    });
                }
                else
                {
                    Task.Run(() =>
                    {
                        UpdateLogText("Bắt đầu giao dịch!", eLogTextType.Warning);

                        var buyOnlineEngine = buyAccEngines.Where(b => b.AccountStatus == eAccountStatus.Online).ToList();

                        int sumBuyStake = 0;
                        var buyStatus   = Parallel.ForEach(buyOnlineEngine, (engine) =>
                        {
                            int realStake;
                            if (engine.ProcessBetAnyway(stake, homeTeamName, awayTeamName, odd, oddType, buyBetType, isLive, out realStake))
                            {
                                sumBuyStake += realStake;
                                UpdateLogText(string.Format("MUA {0} điểm vào tài khoản [{1}] trận {2} - {3} thành công!",
                                                            realStake, engine.UserName, homeTeamName, awayTeamName), eLogTextType.Highlight);
                            }
                            else
                            {
                                UpdateLogText(string.Format("MUA vào tài khoản [{0}] trận {1} - {2} không thành công!",
                                                            engine.UserName, homeTeamName, awayTeamName), eLogTextType.Error);
                            }
                        }).IsCompleted;

                        UpdateLogText(string.Format("TỔNG MUA: {0}", sumBuyStake), eLogTextType.Highlight);

                        if (sumBuyStake == 0)
                        {
                            UpdateLogText("Hoàn thành giao dịch!", eLogTextType.Warning);
                            return;
                        }

                        var sellOnlineEngine = sellAccEngines.Where(b => b.AccountStatus == eAccountStatus.Online).ToList();
                        var sellStake        = (int)Math.Round((double)(ConvertExchange(sumBuyStake, buyExchange, sellExchange) / sellOnlineEngine.Count), 0);
                        int sumSellStake     = 0;
                        var sellStatus       = Parallel.ForEach(sellOnlineEngine, (engine) =>
                        {
                            int realStake;
                            if (engine.ProcessBetAnyway(sellStake, homeTeamName, awayTeamName, odd, oddType, sellBetType, isLive, out realStake))
                            {
                                sumSellStake += realStake;
                                UpdateLogText(string.Format("BÁN {0} điểm vào tài khoản [{1}] trận {2} - {3} thành công!",
                                                            realStake, engine.UserName, homeTeamName, awayTeamName), eLogTextType.Highlight);
                            }
                            else
                            {
                                UpdateLogText(string.Format("BÁN vào tài khoản [{0}] trận {1} - {2} không thành công!",
                                                            engine.UserName, homeTeamName, awayTeamName), eLogTextType.Error);
                            }
                        }).IsCompleted;
                        UpdateLogText(string.Format("TỔNG BÁN: {0}", sumSellStake), eLogTextType.Highlight);
                        UpdateLogText("Hoàn thành giao dịch!", eLogTextType.Warning);
                    });
                }
            }
        }
예제 #20
0
        public bool ProcessPrepareBet(MatchOddDTO ibetMatchOdd, eBetType ibetBetType, MatchOddDTO sboMatchOdd, eBetType sboBetType, bool isLive)
        {
            var taskPrepareBetIbet =
                Task.Run(() => CallPrepareBet(ibetMatchOdd, ibetBetType, isLive, sboMatchOdd.Odd));
            var taskPrepareBetSbo =
                Task.Run(() => CallPrepareBet(sboMatchOdd, sboBetType, isLive, ibetMatchOdd.Odd));

            if (taskPrepareBetIbet.Result.IsSuccess && taskPrepareBetSbo.Result != null)
            {
                if (taskPrepareBetIbet.Result.IsRunning)
                {
                    bool isGood = IsValidOddPair(taskPrepareBetIbet.Result.NewOdd,
                                                 taskPrepareBetSbo.Result.NewOdd, CompareValueDifferent);


                    if (isGood)
                    {
                        int ibetStake;
                        int sboStake;

                        if (CaculateStake(BetStakeType,
                                          taskPrepareBetIbet.Result.MatchOdd.MatchID,
                                          taskPrepareBetIbet.Result.MinBet,
                                          taskPrepareBetIbet.Result.MaxBet,
                                          taskPrepareBetSbo.Result.MatchOdd.MatchID,
                                          taskPrepareBetSbo.Result.MinBet,
                                          taskPrepareBetSbo.Result.MaxBet,
                                          out ibetStake, out sboStake))
                        {
                            if (CallConfirmBet(taskPrepareBetIbet.Result, ibetStake, sboMatchOdd.Odd))
                            {
                                LastBetIbetSuccess = DateTime.Now;

                                if (CallConfirmBet(taskPrepareBetSbo.Result, sboStake, ibetMatchOdd.Odd, isLive))
                                {
                                    Task.Run(
                                        () =>
                                    {
                                        UpdateBetPool(
                                            taskPrepareBetSbo.Result.MatchOdd.ServerType,
                                            taskPrepareBetSbo.Result.MatchOdd.MatchID,
                                            SboBetPool, sboStake);
                                        UpdateBetPool(
                                            taskPrepareBetIbet.Result.MatchOdd.ServerType,
                                            taskPrepareBetIbet.Result.MatchOdd.MatchID,
                                            IbetBetPool,
                                            ibetStake);
                                    });
                                    Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                    CountBet++;
                                    LastBetTime = DateTime.Now;
                                    return(true);
                                }
                                else
                                {
                                    Logger.Info(ProcessorName + " DAT NGUOC IBET<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
                                    if (BetAgainstIbet)
                                    {
                                        int waitTime = WaitingTimeRebetIbet -
                                                       (DateTime.Now - LastBetIbetSuccess).Seconds;

                                        if (waitTime > 0)
                                        {
                                            Thread.Sleep(WaitingTimeRebetIbet);
                                        }

                                        if (!BetAgainstIbetRequest(taskPrepareBetIbet.Result, ibetMatchOdd, ibetBetType,
                                                                   isLive, sboMatchOdd.Odd, ibetStake))
                                        {
                                            Logger.Info("CALL LAN 2 BET MGUOC IBET<<<<<<<<<<<<<<<<");
                                            if (BetAgainstIbetRequest(taskPrepareBetIbet.Result, ibetMatchOdd, ibetBetType,
                                                                      isLive, sboMatchOdd.Odd, ibetStake))
                                            {
                                                return(true);
                                            }
                                        }
                                        else
                                        {
                                            return(true);
                                        }

                                        //var againstIbetPrepare = CallPrepareBet(ibetMatchOdd, GetAgainstBetType(ibetBetType), isLive, sboMatchOdd.Odd);
                                        //if (againstIbetPrepare.IsRunning)
                                        //{
                                        //    //if (againstIbetPrepare.HasScore)
                                        //    //{
                                        //    if (againstIbetPrepare.HomeScore == taskPrepareBetIbet.Result.HomeScore
                                        //    && againstIbetPrepare.AwayScore == taskPrepareBetIbet.Result.AwayScore)
                                        //    {
                                        //        if (CallConfirmBet(againstIbetPrepare, ibetStake, isLive, true))
                                        //        {
                                        //            LastBetTime = DateTime.Now;

                                        //            Task.Run(
                                        //                () =>
                                        //                    UpdateBetPool(taskPrepareBetIbet.Result.MatchOdd.ServerType,
                                        //                        taskPrepareBetIbet.Result.MatchOdd.MatchID, IbetBetPool,
                                        //                        ibetStake * 2));
                                        //            return true;
                                        //        }
                                        //    }
                                        //    //}
                                        //    Logger.Info("BET MGUOC IBET FAIL....TY SO THAY DOI....");
                                        //}

                                        Logger.Info("BET MGUOC IBET FAIL....KEO HUY....");
                                    }
                                }

                                LastBetTime = DateTime.Now;

                                Task.Run(
                                    () =>
                                    UpdateBetPool(taskPrepareBetIbet.Result.MatchOdd.ServerType,
                                                  taskPrepareBetIbet.Result.MatchOdd.MatchID, IbetBetPool,
                                                  ibetStake));

                                return(true);
                            }
                            else
                            {
                                FireLogScan(ibetMatchOdd, sboMatchOdd);
                            }
                        }
                    }
                    else
                    {
                        FireLogScan(ibetMatchOdd, sboMatchOdd);
                    }
                }
                else
                {
                    FireLogScan(ibetMatchOdd, sboMatchOdd);
                }
            }

            return(false);
        }
예제 #21
0
 private PrepareBetDTO CallPrepareIbet(MatchOddDTO matchOdd, eBetType betType, bool isLive, float oddDef)
 {
     return(IbetEngine.PrepareBet(matchOdd, betType, isLive, oddDef, true));
 }
예제 #22
0
        public bool ProcessPrepareBet(MatchPiDTO piMatch, OddDTO piOdd, eBetType piBetType, MatchIsnDTO isnMatch, OddDTO isnOdd, eBetType isnBetType, bool isLive,
                                      eServerScan serverScan = eServerScan.Local)
        {
            if (isProcess)
            {
                return(false);
            }

            //what?
            //string oddCheck = sboMatchOdd.OddID + sboMatchOdd.HomeOdd + sboMatchOdd.AwayOdd + piOdd.HomeOdd +
            //                  piOdd.AwayOdd;

            //if (oddCheck.Equals(OddCheck))
            //{
            //    return false;
            //}

            //OddCheck = oddCheck;

            try
            {
                isProcess = true;

                // wwhat?
                //sboMatchOdd.OldOdd = piBetType == eBetType.Home ? sboMatchOdd.HomeOdd : sboMatchOdd.AwayOdd;
                //   Logger.Debug("");
                //  Logger.Debug("Before call PREPARE ISN " + piMatch.HomeTeamName + "-" + piMatch.AwayTeamName + " " + piOdd.HomeOdd + "_" + piOdd.AwayOdd + " " + piBetType.ToString());
                Stopwatch a = new Stopwatch();
                a.Start();
                Task <int> taskMaxBet = Task.Run(() => IsnEngine.GetMax((isnBetType == eBetType.Home ? isnOdd.selectionIdHome : isnOdd.selectionIdAway)));

                var prepareBetIsn = Task.Run(() => IsnEngine.PrepareBet(isnMatch, isnOdd, isnBetType, isLive, isnOdd.Odd));

                var preparePina = PiEngine.PrepareBet(piMatch, piOdd, piBetType, piOdd.Odd);

                if (preparePina == null || prepareBetIsn.Result == null)
                {
                    FireLogScan(piMatch, piOdd, isnMatch, isnOdd, serverScan);
                    return(false);
                }

                a.Stop();
                Logger.Info("Total time prepare: " + a.ElapsedMilliseconds + " ms");
                // Debug.WriteLine("Thoi gian prepare: " + a.ElapsedMilliseconds);

                bool betAny;
                //   float piOddValue = piBetType == eBetType.Home ? piOdd.HomeOdd : piOdd.AwayOdd;
                //bool isGood = IsGoodOddPair(piOddValue, prepareBetIsn.NewOdd, CompareValueDifferent, out betAny);
                bool isGood = IsGoodOddPair(preparePina.NewOdd, prepareBetIsn.Result.NewOdd, CompareValueDifferent, out betAny);
                // Logger.Debug("After isGood=" + isGood.ToString() + " " + piOddValue + "_" + prepareBetIsn.NewOdd + " " + piBetType.ToString());

                if (isGood)
                {
                    int piStake;
                    int isnStake;

                    if (CaculateStake(BetStakeType,
                                      piMatch.MatchID, 150, (int)((PendingTicket)preparePina.PendingTicket).TicketItem.MaxRiskAmount,
                                      isnMatch.MatchID, 4, taskMaxBet,
                                      out piStake, out isnStake))
                    // if (true)
                    {
                        a.Restart();
                        Logger.Info("Total time prepare: " + a.ElapsedMilliseconds + " ms");

                        var taskpiConfirmBet = Task.Run(() => PiEngine.ConfirmBet((PendingTicket)preparePina.PendingTicket, piStake, piMatch, piOdd, piBetType, eBetStatusType.Success));
                        var betisnOk         = IsnEngine.ConfirmBet2(isnStake, isnMatch, isnOdd, isnBetType, eBetStatusType.Success);
                        if (taskpiConfirmBet.Result == true && betisnOk == true)
                        {
                            a.Stop();
                            Logger.Info("Total time prepare: " + a.ElapsedMilliseconds + " ms");

                            Task.Run(
                                () =>
                            {
                                UpdateBetPool(
                                    eServerType.Isn,
                                    isnMatch.MatchID,
                                    IsnBetPool,
                                    isnStake);

                                UpdateBetPool(
                                    eServerType.Pina,
                                    piMatch.MatchID,
                                    PiBetPool,
                                    piStake);
                            });
                            Logger.Info("BET SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                            CountBet++;
                            LastBetTime = DateTime.Now;
                            return(true);
                        }
                        else if (taskpiConfirmBet.Result == false && betisnOk == false)
                        {
                            return(false);
                        }
                        else if (taskpiConfirmBet.Result == true)
                        {
                            Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));

                            bool ok = false;
                            for (int i = 0; i < IsnEngine.Rebet; i++)
                            {
                                var prepare = IsnEngine.PrepareBet(isnMatch, isnOdd, isnBetType, true, isnOdd.Odd);
                                if (prepare != null)
                                {
                                    ok = IsnEngine.ConfirmBet2(isnStake, isnMatch, isnOdd, isnBetType, eBetStatusType.MissOddIsn, true);
                                    if (ok)
                                    {
                                        LastBetTime = DateTime.Now;

                                        Task.Run(() => UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake));
                                        return(true);
                                    }
                                }
                                Thread.Sleep(500);
                            }

                            if (!ok) // ReBet pina
                            {
                                var betTypeAgaint = GetAgainstBetType(piBetType);
                                var prepare       = PiEngine.PrepareBet(piMatch, piOdd, betTypeAgaint, piOdd.Odd);
                                if (prepare != null)
                                {
                                    ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, piMatch, piOdd, betTypeAgaint, eBetStatusType.BetAgainPina, true);
                                    if (ok)
                                    {
                                        LastBetTime = DateTime.Now;
                                        Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));
                                        return(true);
                                    }
                                }
                            }

                            IsnEngine.FireLogBet(isnMatch, isnOdd, isnBetType, isnStake, eBetStatusType.Fail, eServerScan.Local);
                        }
                        else if (betisnOk == true)
                        {
                            Task.Run(() => UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake));

                            bool ok = false;
                            for (int i = 0; i < PiEngine.Rebet; i++)
                            {
                                var prepare = PiEngine.PrepareBet(piMatch, piOdd, piBetType, piOdd.Odd);
                                if (prepare != null)
                                {
                                    ok = PiEngine.ConfirmBet((PendingTicket)prepare.PendingTicket, piStake, piMatch, piOdd, piBetType, eBetStatusType.MissOddPina, true);
                                    if (ok)
                                    {
                                        LastBetTime = DateTime.Now;

                                        Task.Run(() => UpdateBetPool(eServerType.Pina, piMatch.MatchID, PiBetPool, piStake));

                                        return(true);
                                    }
                                }
                                Thread.Sleep(500);
                            }

                            if (!ok)// Rebet Isn
                            {
                                var betTypeAgaint = GetAgainstBetType(isnBetType);
                                var prepare       = IsnEngine.PrepareBet(isnMatch, isnOdd, betTypeAgaint, true, isnOdd.Odd);
                                if (prepare != null)
                                {
                                    ok = IsnEngine.ConfirmBet2(isnStake, isnMatch, isnOdd, betTypeAgaint, eBetStatusType.BetAgainIsn, true);
                                    if (ok)
                                    {
                                        LastBetTime = DateTime.Now;
                                        Task.Run(() => UpdateBetPool(eServerType.Isn, isnMatch.MatchID, IsnBetPool, isnStake));
                                        return(true);
                                    }
                                }
                            }

                            PiEngine.FireLogBet(piMatch, piOdd, piBetType, piStake, eBetStatusType.Fail, eServerScan.Local);
                        }

                        return(false);
                    }

                    // tạm đóng
                    FireLogScan(piMatch, piOdd, isnMatch, isnOdd, serverScan);
                }
                //else
                //{
                //    // tạm đóng
                //    FireLogScan(piMatch, piOdd, isnMatch, isnOdd, serverScan);
                //}

                return(false);
            }
            catch (Exception ex)
            {
                Logger.Error(ProcessorName, ex);
                return(false);
            }
            finally
            {
                isProcess = false;
            }
        }
예제 #23
0
        private bool HasGoodMatchOdd(List <MatchOddDTO> matchOddSource, out MatchOddDTO matchOdd, out eBetType buyType)
        {
            matchOdd = null;
            buyType  = eBetType.Unknown;

            var count = matchOddSource.Count;

            for (int i = 1; i <= count; i++)
            {
                var matchOddCheck = matchOddSource[count - i];

                OddDTO ibetOdd;
                if (GetValidIbetMatchOdd(matchOddCheck, out ibetOdd) && matchOddCheck.AbsOdd >= GoalDefCheck)
                {
                    float checkOddDef = 1;
                    if (matchOddCheck.HomeOdd > 0 && matchOddCheck.AwayOdd > 0)
                    {
                        checkOddDef = (1 - matchOddCheck.HomeOdd) + (1 - matchOddCheck.AwayOdd);
                    }
                    else
                    {
                        checkOddDef = Math.Abs(matchOddCheck.HomeOdd + matchOddCheck.AwayOdd);
                    }

                    //so sanh nho hon hoac = 10 xu
                    if (checkOddDef <= OddDevCheck)
                    {
                        buyType = matchOddCheck.Odd > 0 ? eBetType.Away : eBetType.Home;

                        //so sanh keo tren thap nhat la 0.70
                        bool validHighOdd;
                        if (buyType == eBetType.Home)
                        {
                            validHighOdd = Math.Abs(matchOddCheck.AwayOdd) >= 0.7;
                        }
                        else
                        {
                            validHighOdd = Math.Abs(matchOddCheck.HomeOdd) >= 0.7;
                        }

                        if (validHighOdd)
                        {
                            matchOdd = matchOddCheck;
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }