Пример #1
0
 private void AssignHandleProcess(ITakeData data)
 {
     try
     {
         var handle = HandleFactory.CreateHandle(data.DataType);
         if (handle == null)
         {
             logger.Error("Cannot create handle , DataType = " + data.DataType);
             return;
         }
         handle.ProcessData(data);
     }
     catch (Exception e)
     {
         logger.Error(e.ToString());
     }
 }
Пример #2
0
        public void ProcessData(ITakeData data)
        {
            try
            {
                var pd     = data as PushDataDto;
                var pm     = pd.Param as NormalParam;
                var jArray = FormatToJArray(pd.Data);
                Dictionary <string, KeepOddsMatch> dicUpdateKom = new Dictionary <string, KeepOddsMatch>();
                MatchEntity currentMatchEntity = null;
                foreach (var item in jArray)
                {
                    if (item.ToString().Contains("type"))
                    {
                        //  同步时间时间处理
                        if (pm.SubscribeType == "time")
                        {
                            var str      = item.Next["t"].ToString();
                            var ibcNow   = Convert.ToInt64(str.Substring(0, str.Length - 3));
                            var localNow = CommonTools.ToUnixTimeSpan(DateTime.Now);
                            LiveInfoManager.Instance.IbcDiffSyncTime = Convert.ToInt32(localNow - ibcNow);
                            return;
                        }

                        KeyValuePair <string, KeepOddsMatch>?kom = null;
                        switch (item["type"].ToString())
                        {
                        //如果type是m,包含的match对象
                        case "m":
                        {
                            //  发送前一次已经统计完的比赛盘口,再进行新的比赛统计
                            if (currentMatchEntity != null)
                            {
                                MatchCompareRowNumAndMarket(currentMatchEntity, pm);
                            }
                            currentMatchEntity = DealMatchInfo(item, pm);
                            break;
                        }

                        //如果type是o,包含的odds对象
                        case "o": kom = DealOddsInfo(item, pm, currentMatchEntity != null); break;

                        //如果type是dm,说明该场比赛结束了,可以删除了
                        case "dm": DealDmInfo(item, pm); break;

                        //如果type是do,说明该盘口关闭了
                        case "do": DealDoInfo(item, pm); break;

                        //其他类暂不处理
                        default: break;
                        }
                        if (kom.HasValue && !dicUpdateKom.ContainsKey(kom.Value.Key))
                        {
                            dicUpdateKom.Add(kom.Value.Key, kom.Value.Value);
                        }
                    }
                    else
                    {
                        //不包含就说明是其他信息,再做处理
                    }
                }

                //  循环完发送最后一个比赛盘口
                if (currentMatchEntity != null)
                {
                    MatchCompareRowNumAndMarket(currentMatchEntity, pm);
                }

                //  发送只有盘口更新的数据
                if (dicUpdateKom.Any())
                {
                    foreach (var kv in dicUpdateKom)
                    {
                        var me = matchEntityManager.Get(kv.Key);
                        if (me == null)
                        {
                            logger.Error("Update market cannot find me SrcMatchId = " + kv.Key);
                            continue;
                        }

                        MatchCompareRowNumAndMarket(me, pm);
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                logger.Error(JsonConvert.SerializeObject(data));
            }
        }