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(); }); }
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); } }
private eBetType GetAgainstBetType(eBetType betType) { if (betType == eBetType.Home) { return(eBetType.Away); } return(eBetType.Home); }
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; } }
/// <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; } }
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; } }
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); }
private PrepareBetDTO CallPrepareIbetAgain(MatchOddDTO matchOdd, eBetType betType, bool isLive, float oddDef, string bpMatch) { return(IbetEngine.PrepareBet(matchOdd, betType, isLive, oddDef, bpMatch)); }
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; } }
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; } }
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); }
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; } }
public BetInfoQueue(MatchOddDTO matchOdd, eBetType betType, bool isLive) { MatchOdd = matchOdd; BetType = betType; IsLive = isLive; }
//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); }
private eBetType GetAgainstBetType(eBetType betType) { return(betType == eBetType.Home ? eBetType.Away : eBetType.Home); }
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); }); } } }
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); }
private PrepareBetDTO CallPrepareIbet(MatchOddDTO matchOdd, eBetType betType, bool isLive, float oddDef) { return(IbetEngine.PrepareBet(matchOdd, betType, isLive, oddDef, true)); }
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; } }
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); }