private void SetNewsData(ResNewsFlashDataPacket dataPacket) { List <OneNews24HOrgDataRec> packetData = (dataPacket).News24HData; if (NewsFlashData.Count == 0) { NewsFlashData = packetData; } else { long memDate = 0; long packetDate = 0; int insertIndex = -1; bool isAddEnd = false; for (int i = 0; i < packetData.Count; i++) { isAddEnd = false; packetDate = ((long)packetData[i].PublishDate) * 1000000 + packetData[i].PublishTime; for (int j = 0; j < NewsFlashData.Count; j++) { memDate = ((long)NewsFlashData[j].PublishDate * 1000000) + NewsFlashData[j].PublishTime; if (packetData[i].InfoCode == NewsFlashData[j].InfoCode) { insertIndex = -1; break; } if (packetDate >= memDate) { insertIndex = j; break; } if (j == NewsFlashData.Count - 1) { isAddEnd = true; insertIndex = -1; } } if (insertIndex >= 0) { NewsFlashData.Insert(insertIndex, packetData[i]); } else if (isAddEnd) { NewsFlashData.AddRange(packetData.GetRange(i, packetData.Count - i)); break; } } } }
/// <summary> /// 异步接收数据 /// </summary> /// <param name="response"></param> public void SendDataCallBack(MessageEntity response) { if (response.MsgBody is byte[]) { InfoOrgBaseDataPacket dataPacket = null; using (MemoryStream ms = new MemoryStream(response.MsgBody as byte[])) { lock (ms) { using (BinaryReader br = new BinaryReader(ms)) { FuncTypeInfoOrg requestId = (FuncTypeInfoOrg)br.ReadByte(); switch (requestId) { case FuncTypeInfoOrg.InfoMineOrg: dataPacket = new ResInfoOrgDataPacket(); break; case FuncTypeInfoOrg.News24H: dataPacket = new ResNews24HOrgDataPacket(); break; case FuncTypeInfoOrg.ProfitForecast: dataPacket = new ResProfitForecastOrgDataPacket(); break; case FuncTypeInfoOrg.ImportantNews: dataPacket = new ResImportantNewsDataPacket(); break; case FuncTypeInfoOrg.NewsFlash: dataPacket = new ResNewsFlashDataPacket(); break; case FuncTypeInfoOrg.OrgRate: dataPacket = new ResInfoRateOrgDataPacket(); break; case FuncTypeInfoOrg.ResearchReport: dataPacket = new ResResearchReportOrgDataPacket(); break; case FuncTypeInfoOrg.NewInfoMineOrg: dataPacket = new ResNewInfoOrgDataPacket(); break; case FuncTypeInfoOrg.InfoMineOrgByIds: dataPacket = new ResInfoOrgByIdsDataPacket(); break; } if (dataPacket != null) { dataPacket.RequestId = requestId; if (_dicMsgId.ContainsKey((String)response.Tag)) { dataPacket.MsgId = _dicMsgId[(String)response.Tag]; LogUtilities.LogMessage("收到响应, id=" + (String)response.Tag + ", msgId=" + dataPacket.MsgId); lock (_dicMsgId) _dicMsgId.Remove((String)response.Tag); } dataPacket.Decoding(br); } } } } if (dataPacket != null) { lock (_DataPacketQueue) _DataPacketQueue.Enqueue(new CMRecvDataEventArgs(TcpService.ZXCFT, dataPacket, ((byte[])response.MsgBody).Length)); } } }