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()); } }
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)); } }