Exemplo n.º 1
0
        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);
                    }
                });
            }
        }
Exemplo n.º 2
0
        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);
            });
        }
Exemplo n.º 3
0
        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());
            }
        }
Exemplo n.º 4
0
        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());
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        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);
            }
        }