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 List <BetDTO> GetEventOdds(ICollection <SportBet> collection) { List <BetDTO> bets = new List <BetDTO>(); foreach (var bet in collection) { BetDTO betAvailable = new BetDTO(); betAvailable.ID = bet.ID; betAvailable.OddType = bet.Code; List <OddDTO> oddCollection = new List <OddDTO>(); foreach (var oddType in bet.OddProvider.GetAvailables()) { OddDTO singleOdd = new OddDTO(); singleOdd.ID = string.Format("{0}_{1}", bet.ID, oddType.Key); singleOdd.Code = oddType.Key; singleOdd.Price = bet.GetOddPrice(oddType.Key); oddCollection.Add(singleOdd); } betAvailable.OddCollection = oddCollection; bets.Add(betAvailable); } return(bets); }
/// <summary> /// tại sao ko return luôn object param để confirm gọi /// </summary> /// <param name="match"></param> /// <param name="odd"></param> /// <param name="leagueId"></param> /// <param name="type"></param> /// <param name="strong"></param> /// <param name="odd_f_type"></param> /// <returns></returns> public CommonParamRequest PrepareBet(OddDTO odd, string type, string strong = "C", string odd_f_type = "M") { string url = _urlDomain + String.Format("/app/member/FT_order/FT_order_re.php?gid={0}&uid={1}&odd_f_type={2}&type={3}&gnum={4}&strong={5}&langx=en-us", odd.OddID, _token, odd_f_type, type, odd.TeamId, strong); try { HttpWebRequest request = CreateCommonRequest(url); //add more Referer; // "http://fr1111.com/app/member/select.php?uid={0}&langx=en-us"; request.Referer = String.Format(RefererPrepareBet, _urlDomain, _token); var doc = new HtmlAgilityPack.HtmlDocument(); HttpWebResponse response = request.GetResponse() as HttpWebResponse; if (request.HaveResponse == true && response != null) { // Get the response stream using (StreamReader reader = new StreamReader(response.GetResponseStream())) { var st = reader.ReadToEnd(); doc.LoadHtml(st); var list = doc.DocumentNode.Descendants("input").Where(d => d.Attributes.Contains("type") && d.Attributes["type"].Value.Contains("hidden")); if (list != null && list.Any()) { CommonParamRequest param = new CommonParamRequest { active = list.FirstOrDefault(p => p.Attributes["name"].Value == "active").Attributes["value"].Value, autoOdd = "Y", concede_r = list.FirstOrDefault(p => p.Attributes["name"].Value == "concede_r").Attributes["value"].Value, gid = list.FirstOrDefault(p => p.Attributes["name"].Value == "gid").Attributes["value"].Value, gmax_single = list.FirstOrDefault(p => p.Attributes["name"].Value == "gmax_single").Attributes["value"].Value, gmin_single = list.FirstOrDefault(p => p.Attributes["name"].Value == "gmin_single").Attributes["value"].Value, gnum = list.FirstOrDefault(p => p.Attributes["name"].Value == "gnum").Attributes["value"].Value, ioradio_r_h = list.FirstOrDefault(p => p.Attributes["name"].Value == "ioradio_r_h").Attributes["value"].Value, langx = "en-us", line_type = list.FirstOrDefault(p => p.Attributes["name"].Value == "line_type").Attributes["value"].Value, odd_f_type = "M", // list.FirstOrDefault(p => p.Attributes["name"].Value == "odd_f_type").Attributes["value"].Value, pay_type = list.FirstOrDefault(p => p.Attributes["name"].Value == "pay_type").Attributes["value"].Value, radio_r = list.FirstOrDefault(p => p.Attributes["name"].Value == "radio_r").Attributes["value"].Value, restcredit = list.FirstOrDefault(p => p.Attributes["name"].Value == "restcredit").Attributes["value"].Value, restsinglecredit = list.FirstOrDefault(p => p.Attributes["name"].Value == "restsinglecredit").Attributes["value"].Value, singlecredit = list.FirstOrDefault(p => p.Attributes["name"].Value == "singlecredit").Attributes["value"].Value, singleorder = list.FirstOrDefault(p => p.Attributes["name"].Value == "singleorder").Attributes["value"].Value, strong = "C", //list.FirstOrDefault(p => p.Attributes["name"].Value == "strong").Attributes["value"].Value, type = list.FirstOrDefault(p => p.Attributes["name"].Value == "type").Attributes["value"].Value, uid = _token, wagerstotal = list.FirstOrDefault(p => p.Attributes["name"].Value == "wagerstotal").Attributes["value"].Value, }; return(param); } } } return(null); } catch (Exception) { return(null); } }
private PrepareBetDTO CallPrepareBet(MatchIsnDTO match, OddDTO odd, eBetType betType, bool isLive, float oddDef) { switch (match.ServerType) { //case eServerType.Ibet: // return PiEngine.PrepareBet(matchOdd, betType, isLive, oddDef); case eServerType.Isn: return(IsnEngine.PrepareBet(match, odd, betType, isLive, oddDef)); default: return(IsnEngine.PrepareBet(match, odd, betType, isLive, oddDef)); //throw new Exception("CallPrepareBet => FAIL : Unknow matchOdd->eServerType param"); } }
private void FireLogScan(MatchPiDTO piMatchOdd, OddDTO piOdd, MatchIsnDTO isnMatch, OddDTO isnOdd, eServerScan serverScan) { var msg = new LogScanMessage() { ProcessorName = this.ProcessorName, Time = DateTime.Now.ToString("HH:mm:ss.fff"), HomeTeamName = piMatchOdd.HomeTeamName, AwayTeamName = piMatchOdd.AwayTeamName, OddType = piOdd.OddType, Odd = piOdd.Odd, FirstOddValues = piOdd.HomeOdd + " | " + piOdd.AwayOdd, SecondOddValues = isnOdd.HomeOdd + " | " + isnOdd.AwayOdd, ServerScan = serverScan }; Task.Run(() => { DataContainer.LogScanQueue.Enqueue(msg); DataContainer.LogScanResetEvent.Set(); }); }
private void UpdateOdd(MatchDTO matchDTO, string oddID, eOddType oddType, string odd, string home, string away, string checkHorA = "") { float homeOdd = 0f; float awayOdd = 0f; float.TryParse(home, out homeOdd); float.TryParse(away, out awayOdd); float oddValue = ConvertOdd(odd, checkHorA); OddDTO odDto = matchDTO.Odds.FirstOrDefault(m => m.OddID == oddID); if (odDto == null) { odDto = new OddDTO(); matchDTO.Odds.Add(odDto); } odDto.IsDeleted = false; odDto.OddID = oddID; odDto.OddType = oddType; odDto.Odd = oddValue; odDto.HomeOdd = homeOdd; odDto.AwayOdd = awayOdd; }
private bool GetValidIbetMatchOdd(MatchOddDTO sboMatchOdd, out OddDTO oddObj) { bool isValid = false; oddObj = null; 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) { var odd = ibetMatch.Odds.FirstOrDefault(o => !o.IsDeleted && o.OddType == sboMatchOdd.OddType && o.Odd.Equals(sboMatchOdd.Odd)); if (odd != null) { oddObj = odd; isValid = true; } } return(isValid); }
/// <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; } }
//// compare from sbo (dataUpdated) to Pi (targetSource) public void CompareOdd(List <MatchIsnDTO> dataUpdated, List <MatchPiDTO> targetSource, bool isLive) { try { foreach (var isnMatch in dataUpdated) { if (/*!DataContainer.LeaguesDenyKeywords.Any(data.LeagueName.ToUpper().Contains) * &&*/(!DataContainer.MatchsDenyKeywords.Any(isnMatch.HomeTeamName.ToUpper().Contains) || !DataContainer.MatchsDenyKeywords.Any(isnMatch.AwayTeamName.ToUpper().Contains))) { MatchPiDTO piMatchTarget = targetSource.FirstOrDefault(m => (String.Equals(m.HomeTeamName, isnMatch.HomeTeamName, StringComparison.CurrentCultureIgnoreCase) || String.Equals(m.AwayTeamName, isnMatch.AwayTeamName, StringComparison.CurrentCultureIgnoreCase) ) ); if (piMatchTarget != null) { foreach (var isnOdd in isnMatch.Odds) { OddDTO piOdd = piMatchTarget.Odds.FirstOrDefault(o => o.Odd.Equals(isnOdd.Odd) && /*&& !(o.HomeOdd == 0 && o.AwayOdd == 0)*/ o.OddType == isnOdd.OddType); if (piOdd != null) { //bool isValid1 = IsValidOddPair(isnOdd.HomeOdd, piOdd.AwayOdd, CompareValueDifferent); bool isValid1 = IsValidOddPair(isnOdd.HomeOdd, piOdd.AwayOdd, CompareValueDifferent); //Debug.WriteLine(isnOdd.HomeOdd + "|" + piOdd.AwayOdd); // && IsValidPick(isnOdd, eBetType.Home); if (isValid1) { ProcessPrepareBet(piMatchTarget, piOdd, eBetType.Away, isnMatch, isnOdd, eBetType.Home, isLive); return; } bool isValid2 = IsValidOddPair(isnOdd.AwayOdd, piOdd.HomeOdd, CompareValueDifferent); //Debug.WriteLine(isnOdd.AwayOdd + "|" + piOdd.HomeOdd); // && IsValidPick(isnOdd, eBetType.Away); if (isValid2) { ProcessPrepareBet(piMatchTarget, piOdd, eBetType.Home, isnMatch, isnOdd, eBetType.Away, isLive); return; } } } } } } } catch (Exception ex) { Logger.Fatal(ProcessorName, ex); } }
private static object GetPropValue(OddDTO odd, string prop) { PropertyInfo propInfo = o_properties[prop]; return(propInfo.GetGetMethod(false).Invoke(odd, null)); }
public static bool Apply(OddDTO odd, string op, string prop, object target) { return(s_operators[op](GetPropValue(odd, prop), target)); }
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; } }
//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); }
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; } }
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; } }
//// compare from sbo (dataUpdated) to Pi (targetSource) public void CompareOdd(List <MatchOddDTO> dataUpdated, List <MatchPiDTO> targetSource, bool isLive) { try { foreach (var sbo in dataUpdated) { if (!DataContainer.LeaguesDenyKeywords.Any(sbo.LeagueName.ToUpper().Contains) && (!DataContainer.MatchsDenyKeywords.Any(sbo.HomeTeamName.ToUpper().Contains) || !DataContainer.MatchsDenyKeywords.Any(sbo.AwayTeamName.ToUpper().Contains))) { MatchPiDTO piMatchTarget = targetSource.FirstOrDefault(m => (String.Equals(m.HomeTeamName, sbo.HomeTeamName, StringComparison.CurrentCultureIgnoreCase) || String.Equals(m.AwayTeamName, sbo.AwayTeamName, StringComparison.CurrentCultureIgnoreCase))); if (piMatchTarget != null) { OddDTO piOdd = piMatchTarget.Odds.FirstOrDefault(o => o.PiOdd.Equals(sbo.Odd) && o.OddType.Equals(sbo.OddType)); if (piOdd != null) { bool isValid1 = IsValidOddPair(sbo.HomeOdd, piOdd.AwayOdd, CompareValueDifferent) && IsValidPick(sbo, eBetType.Home); if (isValid1) { MatchOddDTO sboMatchSource = GetSboMatch(sbo, isLive); if (sboMatchSource != null) { // if (data.HomeOdd.Equals(sboMatchSource.OldOdd) && data.HomeOdd != sboMatchSource.NewUpdateOdd) // { // continue; // } sboMatchSource.HomeOdd = sbo.HomeOdd; sboMatchSource.AwayOdd = sbo.AwayOdd; ProcessPrepareBet(piMatchTarget, piOdd, eBetType.Away, sboMatchSource, eBetType.Home, isLive); return; } } bool isValid2 = IsValidOddPair(sbo.AwayOdd, piOdd.HomeOdd, CompareValueDifferent) && IsValidPick(sbo, eBetType.Away); if (isValid2) { MatchOddDTO sboMatchSource = GetSboMatch(sbo, isLive); if (sboMatchSource != null) { // if (data.AwayOdd == sboMatchSource.OldOdd && data.AwayOdd != sboMatchSource.NewUpdateOdd) // { // continue; // } sboMatchSource.HomeOdd = sbo.HomeOdd; sboMatchSource.AwayOdd = sbo.AwayOdd; ProcessPrepareBet(piMatchTarget, piOdd, eBetType.Home, sboMatchSource, eBetType.Away, isLive); return; } } } } } } } catch (Exception ex) { Logger.Fatal(ProcessorName, ex); } }
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; } }