private void CheckedAndSubscribe(bool isChecked, NormalParam param) { if (isChecked) { subsManager.Subscribe(param); } else { subsManager.UnSubscribe(param); var ko = KeepOddsManager.Instance.AddOrGetKeepOdds(param.Stage); var closeSportId = param.SocketParam.condition.sporttype.Select(o => IbcTools.ConvertToSportId(o + "")).ToList(); matchManager.ForEach(me => { if (me.Stage == param.Stage && closeSportId.Contains(me.SportID)) { ko.RemoveBySrcMatchId(me.SrcMatchID); if (me.Stage == 3) { LiveInfoManager.Instance.RemoveBySrcMatchId(me.SrcMatchID, me.Stage); } me.MatchDisappear(me.Stage, param.LimitMarketIdList, true); } }); } }
private void btnInit_Click(object sender, EventArgs e) { var url = comboBox2.Text; var str = (string)comboBox1.SelectedItem; Task.Run(() => { reptile = Reptile.Instance(); Console.WriteLine("Init WorkManager"); workManager = new IbcWorkManager(); workManager.Init(); var id = Convert.ToInt32(str.Substring(4)); reptile.Init(workManager, dicServerLine[id].ServerIP, dicServerLine[id].ServerPort); reptile.Start(); subsManager = IocUnity.GetService <ISubscriptionManager>("SubscriptionManager"); matchManager = IocUnity.GetService <IMatchEntityManager>("MatchEntityManager"); if (string.IsNullOrEmpty(user) || string.IsNullOrEmpty(passWord)) { Console.WriteLine("Has no user or passWord"); return; } var loginParam = new LoginParam() { Username = user, Password = passWord, WebUrl = url, TakeMode = TakeMode.Pull }; subsManager.Subscribe(loginParam); var ibcSyncTimeParam = new NormalParam() { Stage = (int)MatchStageEnum.Live, TakeMode = TakeMode.Push, SubscribeType = "time", TimeParam = new SyncTimeParam() { id = "c1", rev = 0, condition = CommonTools.ToUnixTimeSpan(DateTime.Now) + "" } }; subsManager.Subscribe(ibcSyncTimeParam); }); }
private void DealDoInfo(JToken jtoken, NormalParam normalParam) { try { var keepOdds = KeepOddsManager.Instance.AddOrGetKeepOdds(normalParam.Stage); string oddsId = jtoken["oddsid"].ToString(); Console.WriteLine("Remove Odds = " + oddsId); var old = keepOdds.GetMarket <SrcMarketTwo>(oddsId); if (old == null) { return; } var kom = keepOdds.GetOrAdd(old.SrcMatchId); if (kom == null) { return; } kom.DeleteOddsIdList(old.MarketID, new List <string>() { oddsId }); keepOdds.RemoveMarketByOddsId(oddsId); // 有盘口移除需要对比RowNum是否变化和对应盘口关盘 var me = matchEntityManager.Get(old.SrcMatchId); if (me != null) { MatchCompareRowNumAndMarket(me, normalParam); } else { logger.Error("DealDoInfo cannot find srcMatchId = " + old.SrcMatchId + " ,oddsId = " + old.SrcCouID); } } catch (Exception e) { logger.Error(e.ToString()); } }
private void DealDmInfo(JToken jtoken, NormalParam normalParam) { try { var keepOdds = KeepOddsManager.Instance.AddOrGetKeepOdds(normalParam.Stage); string matchId = jtoken["matchid"].ToString(); var me = matchEntityManager.Get(matchId); Dictionary <string, MatchEntity> delDic = new Dictionary <string, MatchEntity>(); delDic.Add(matchId, me); if (me.SportID == 2) { // 移除相关的篮球小节比赛 foreach (var q in new[] { "01", "02", "03", "04" }) { var m = matchEntityManager.Get(matchId + q); if (m == null) { continue; } delDic.Add(matchId + q, m); } } foreach (var kv in delDic) { kv.Value.MatchDisappear(normalParam.Stage, normalParam.LimitMarketIdList, true); keepOdds.RemoveBySrcMatchId(kv.Key); LiveInfoManager.Instance.RemoveBySrcMatchId(kv.Key, normalParam.Stage); Console.WriteLine("Remove SrcMatchID = " + kv.Key); } } catch (Exception e) { logger.Error(e.ToString()); } }
private void MatchCompareRowNumAndMarket(MatchEntity currentMatchEntity, NormalParam param) { var keepOdds = KeepOddsManager.Instance.AddOrGetKeepOdds(param.Stage); var kom = keepOdds.GetOrAdd(currentMatchEntity.SrcMatchID); if (kom != null) { try { int htRowNum; int rowNum; kom.GetRowNum(out rowNum, out htRowNum); // 先发RowNum再发盘口 currentMatchEntity.CompareToRowNum(rowNum, htRowNum, param.Stage); var oddsIdList = kom.GetOddsIdList(); var nl = oddsIdList.Distinct().ToList(); if (!oddsIdList.SequenceEqual(nl)) { // 有重复的 logger.Error("Update market oddsId error = " + JsonConvert.SerializeObject(kom)); } var dic = keepOdds.ToMarketEntityBases(nl, 0, param.Stage); currentMatchEntity.CompareToMarket(dic, param.Stage, param.LimitMarketIdList); } catch (Exception ex) { logger.Error(ex.ToString()); logger.Error("CompareToMarket Failed kom = " + JsonConvert.SerializeObject(kom)); } } else { logger.Error("Cannot find kom srcMatchId = " + currentMatchEntity.SrcMatchID); } }
private void btnTest_Click(object sender, EventArgs e) { var path = @"C:\Users\Gaushee\Desktop\temp1.txt"; var txt = File.ReadAllText(path); var handle = new NormalHandle(); var pm = new NormalParam() { Stage = 3, TakeMode = TakeMode.Push, SocketParam = new SocketParam() { condition = new Condition() { sporttype = new[] { 1 } } } }; var data = new PushDataDto() { Data = txt, Param = pm, }; handle.ProcessData(data); }
private MatchEntity DealMatchInfo(JToken jtoken, NormalParam normalParam) { try { //解析比赛信息 var pmi = new ParseMatchInfo(); pmi.CompareSet(jtoken); int sportId = 0; MatchEntity me; if (pmi.SportType != null) { sportId = IbcTools.ConvertToSportId(pmi.SportType); if (sportId == 0) { return(null); } var matchDate = GetTime(pmi.KickOffTime); matchDate = matchDate.AddSeconds(-matchDate.Second); var diffMinutes = matchDate.Minute % 5; matchDate = matchDate.AddMinutes(5 - diffMinutes); var home = string.IsNullOrEmpty(pmi.HomeTeamNameExtension) ? pmi.HomeTeamName : pmi.HomeTeamName + "[" + pmi.HomeTeamNameExtension + "]"; var away = string.IsNullOrEmpty(pmi.AwayTeamNameExtension) ? pmi.AwayTeamName : pmi.AwayTeamName + "[" + pmi.AwayTeamNameExtension + "]"; if (sportId == 1 && pmi.Isneutral == "1") { home = home + " (N)"; } me = matchEntityManager.GetOrAdd(pmi.MatchId, pmi.LeagueName, home, away, matchDate, sportId); me.CompareToStage(normalParam.Stage); } else { me = matchEntityManager.Get(pmi.MatchId); } if (me == null) { logger.Error("DealMatchInfo Cannot find srcMatchId = " + pmi.MatchId); return(null); } // if stage = 3 if (normalParam.Stage == 3 && !me.IsSelfCreate && (me.SportID == 1 || me.SportID == 2)) { var lti = new LiveInfo(); lti.SportId = me.SportID; lti.SrcMatchId = pmi.MatchId; lti.HomeScore = string.IsNullOrEmpty(pmi.LiveHomeScore) ? (int?)null : Convert.ToInt32(pmi.LiveHomeScore); lti.AwayScore = string.IsNullOrEmpty(pmi.LiveAwayScore) ? (int?)null : Convert.ToInt32(pmi.LiveAwayScore); lti.HomeRed = string.IsNullOrEmpty(pmi.HomeRed) ? (int?)null : Convert.ToInt32(pmi.HomeRed); lti.AwayRed = string.IsNullOrEmpty(pmi.AwayRed) ? (int?)null : Convert.ToInt32(pmi.AwayRed); lti.Csstatus = pmi.Csstatus; lti.Liveperiod = pmi.Liveperiod; lti.PhaseStartUtc = pmi.Livetimer; lti.PhaseStartUtcUpdateTime = string.IsNullOrEmpty(pmi.Livetimer) ? (DateTime?)null : DateTime.Now; var ret = LiveInfoManager.Instance.AddOrUpdate(lti); if (me.SportID == 1) { me.CompareToScore(ret.HomeScore.Value, ret.AwayScore.Value); me.CompareToCard(ret.HomeRed.Value, ret.AwayRed.Value); } else if (me.SportID == 2) { if (!string.IsNullOrEmpty(pmi.LiveScore)) { var bkScore = JsonConvert.DeserializeObject <BasketballScore>(pmi.LiveScore); var homeScore = Convert.ToInt32(bkScore.h1q) + Convert.ToInt32(bkScore.h2q) + Convert.ToInt32(bkScore.h3q) + Convert.ToInt32(bkScore.h4q); var awayScore = Convert.ToInt32(bkScore.a1q) + Convert.ToInt32(bkScore.a2q) + Convert.ToInt32(bkScore.a3q) + Convert.ToInt32(bkScore.a4q); me.CompareToScore(homeScore, awayScore); } } me.CompareToTime(ret.Phase.Value, ret.LiveTime(LiveInfoManager.Instance.IbcDiffSyncTime)); } JsonSerializerSettings jsetting = new JsonSerializerSettings(); jsetting.NullValueHandling = NullValueHandling.Ignore; var str = JsonConvert.SerializeObject(pmi, jsetting); Console.WriteLine("match = " + str); return(me); } catch (Exception e) { logger.Error(e.ToString()); return(null); } }
private KeyValuePair <string, KeepOddsMatch>?DealOddsInfo(JToken jtoken, NormalParam normalParam, bool isExistMatch) { try { KeyValuePair <string, KeepOddsMatch>?updateKom = null; var keepOdds = KeepOddsManager.Instance.AddOrGetKeepOdds(normalParam.Stage); string oddsId = jtoken["oddsid"].ToString(); ParseOddsInfo poi = null; SrcMarketEntityBase smb = null; bool isUpdate = false; if (!keepOdds.OddsIdExist(oddsId)) { if (jtoken["matchid"] == null) { return(null); } string matchId = jtoken["matchid"].ToString(); if (!matchEntityManager.MatchExist(matchId)) { return(null); } var bettype = jtoken["bettype"].ToString(); poi = OddsFactory.CreatOdds(bettype); poi.CompareSet(jtoken, false); // 只处理需要的盘口类型 if (normalParam.LimitMarketIdList.Contains(poi.MarketId)) { KeepOddsMatch kom = null; if (!string.IsNullOrEmpty(poi.Resourceid)) { var mainMatch = matchEntityManager.Get(matchId); matchId = matchId + poi.Resourceid; if (mainMatch.SportID == 2) { var quarterMatch = matchEntityManager.Get(matchId); if (quarterMatch == null) {// 自生成篮球小节的比赛 var quarter = poi.Resourceid == "01" ? " - First Quarter" : poi.Resourceid == "02" ? " - Second Quarter" : poi.Resourceid == "03" ? " - Third Quarter" : poi.Resourceid == "03" ? " - Fourth Quarter" : " - UnKnown Quarter"; quarterMatch = matchEntityManager.GetOrAdd(matchId, mainMatch.SrcLeague + quarter, mainMatch.SrcHome, mainMatch.SrcAway, mainMatch.SrcMatchDate, mainMatch.SportID, true); } quarterMatch.CompareToStage(normalParam.Stage); kom = keepOdds.GetOrAdd(matchId); isUpdate = true; // 以更新盘口处理方式发送小节比赛里的盘口数据 } } else { kom = keepOdds.GetOrAdd(matchId); // 如果本次数据块中,新加的当前盘口之前并没有比赛信息,说明这个盘口数据是因为传输数据被分块,导致与比赛信息隔开了再发送的,此时这个盘口应当以更新方式发送 if (!isExistMatch) { isUpdate = true; } } if (kom == null) { return(null); } kom.UpdateOddsIdList(poi.MarketId, new List <string>() { oddsId }); if (MarketTools.CheckTwoMakret(poi.MarketId)) { smb = keepOdds.AddOrGetMarket <SrcMarketTwo>(oddsId); } else if (poi.MarketId == (int)MarketTypeEnum.H_1X2 || poi.MarketId == (int)MarketTypeEnum.F_1X2) { smb = keepOdds.AddOrGetMarket <SrcMarket1X2>(oddsId); } if (smb != null) { smb.SrcMatchId = matchId; smb.SrcCouID = oddsId; smb.Bettype = bettype; smb.MarketID = poi.MarketId; smb.OddsStatus = poi.OddsStatus; } } } else { // 更新的盘口直接更新缓存中 smb = keepOdds.GetMarket <SrcMarketEntityBase>(oddsId); if (smb != null) { poi = OddsFactory.CreatOdds(smb.Bettype); poi.MarketId = smb.MarketID; poi.CompareSet(jtoken); isUpdate = true; } } if (smb != null) { smb.SetOdds(poi.GetDataArr()); if (isUpdate) { updateKom = new KeyValuePair <string, KeepOddsMatch>(smb.SrcMatchId, keepOdds.GetOrAdd(smb.SrcMatchId)); } JsonSerializerSettings jsetting = new JsonSerializerSettings(); jsetting.NullValueHandling = NullValueHandling.Ignore; var str = JsonConvert.SerializeObject(smb, jsetting); Console.WriteLine("market = " + str); } //else //{ // //有些盘口是不需要的 // logger.Error("Cannot get market ParseOddsInfo = " + JsonConvert.SerializeObject(poi)); //} return(updateKom); } catch (Exception e) { logger.Error(e.ToString()); return(null); } }