public void receiveMsg() { Task.Factory.StartNew( () => { try { using (var subscriber = new SubscriberSocket()) { subscriber.Connect(_DataPublisherServePubString); subscriber.SubscribeToAnyTopic(); //subscriber.Subscribe("StartTrain"); //subscriber.Subscribe("StopTrain"); //while (true) while (!cts.Token.IsCancellationRequested) { try { cts.Token.ThrowIfCancellationRequested(); var responseMessage = subscriber.ReceiveMultipartMessage(); if (responseMessage != null) { var frame = responseMessage.Pop(); var xx = frame?.ConvertToString(); switch (xx) { //历史遥测数据 case "HistoryTm": //实时遥测数据 case "RealtimeTm": case "Group1": frame = responseMessage.Pop(); var byteArray = frame?.ToByteArray(); Model.TmParameterValues t1 = ProtobufHelper.BytesToObject <Model.TmParameterValues>(byteArray, 0, byteArray.Length); foreach (var item in t1.ValueList) { //RedisHelper.Default.SetStringKey<Model.TmParameterValue>("C513:" + item.Symbol + ":" + DateTools.DoubleToTime(item.Time).ToString("yyyyMMddHHmmssfff"), item); //SortedSet RedisHelper.Default.SortedSetObject <Model.TmParameterValue>("C513:" + item.Symbol + ":" + DateTools.DoubleToTime(item.Time).ToString("yyyyMMdd"), item, item.Time); //Console.WriteLine($"Topic:{xx} 内容:Symbol:{item.Symbol},Time:{item.Time},Value:{item.Value},Code:{item.Code},Text:{item.Text}"); } hubContext.Clients.All.SendAsync("RecivMessage", new { MsgType = "business", Symbol = "TM", dataList = t1.ValueList }); break; case "TrainProcess": //训练学习进度 frame = responseMessage.Pop(); var byteArray2 = frame?.ToByteArray(); TrainProcessModel t2 = ProtobufHelper.BytesToObject <TrainProcessModel>(byteArray2, 0, byteArray2.Length); //Console.WriteLine($"Topic:{xx} 进度:{t2.Process.ToString()}"); hubContext.Clients.All.SendAsync("RecivMessage", new { MsgType = "modeltrain", process = t2.Process }); break; case "TMCEvent": //测控事件检测结果 frame = responseMessage.Pop(); var byteArray3 = frame?.ToByteArray(); TMCEventModel t3 = ProtobufHelper.BytesToObject <TMCEventModel>(byteArray3, 0, byteArray3.Length); try { msgIntoDB.AddTMCEvent(t3); } catch (Exception er) { logSend(er.Message); } // Console.WriteLine($"Topic:{xx} Name:{t3.Name},BeginTime:{t3.BeginTime},EndTime:{t3.EndTime}"); break; case "TmParameterAbnormity": //异常检测结果 frame = responseMessage.Pop(); var byteArray4 = frame?.ToByteArray(); TmParameterAbnormity t4 = ProtobufHelper.BytesToObject <TmParameterAbnormity>(byteArray4, 0, byteArray4.Length); //Console.WriteLine($"Topic:{xx} Symbol:{t4.Symbol},TMCEvent:{t4.TMCEvent},BeginTime:{t4.BeginTime},EndTime:{t4.EndTime}"); try { msgIntoDB.AddBusinessAlarm(t4); } catch (Exception er) { logSend(er.Message); } break; case "TmParameterCycle": //周期检测结果 frame = responseMessage.Pop(); var byteArray5 = frame?.ToByteArray(); TmParameterCycle t5 = ProtobufHelper.BytesToObject <TmParameterCycle>(byteArray5, 0, byteArray5.Length); //Console.WriteLine($"Topic:{xx} Symbol:{t5.Symbol},Cycle:{t5.Cycle}"); try { msgIntoDB.AddCycleResult(t5); } catch (Exception er) { logSend(er.Message); } break; case "ServiceState": //软件状态 frame = responseMessage.Pop(); var byteArray6 = frame?.ToByteArray(); ServiceStateModel t6 = ProtobufHelper.BytesToObject <ServiceStateModel>(byteArray6, 0, byteArray6.Length); Console.WriteLine($"Topic:{xx} Name: {t6.Name},State: {t6.State}"); break; case "Log": //软件日志 frame = responseMessage.Pop(); var byteArray7 = frame?.ToByteArray(); LogModel t7 = ProtobufHelper.BytesToObject <LogModel>(byteArray7, 0, byteArray7.Length); //Console.WriteLine($"Topic:{xx} Source:{t7.Source},SatelliteTime:{t7.SatelliteTime},SystemTime:{t7.SystemTime},Message:{t7.Message}"); try { msgIntoDB.AddLog(t7); } catch (Exception er) { logSend(er.Message); } break; case "StartTrain": case "StopTrain": var tt = xx; break; default: if (xx.IndexOf("BUFFER") >= 0) { frame = responseMessage.Pop(); var rawData = RawData.Parser.ParseFrom(frame?.ToByteArray()); if (rawData != null) { var mv = new { MsgType = "business", rawData = rawData, Symbol = rawData.Symbol, Data = ByteConverter.BytesFormatToHexString(rawData.Data.ToByteArray()).Split(' ') }; //RedisHelper.Default.SetStringKey<string>("C513:" + rawData.Symbol + ":" + DateTools.DoubleToTime(rawData.Time).ToString("yyyyMMddHHmmssfff"), JsonConvert.SerializeObject(rawData)); //SortedSet RedisHelper.Default.SortedSetObject <string>("C513:" + rawData.Symbol + ":" + DateTools.DoubleToTime(rawData.Time).ToString("yyyyMMdd"), JsonConvert.SerializeObject(rawData), rawData.Time); System.Threading.Thread.Sleep(1000); // 通过消息处理器上下文发送消息到客户端 hubContext.Clients.All.SendAsync("RecivMessage", mv); } } break; } } } catch (Exception er) { Log4netHelper.Error(this, er); logSend(er.Message); } } } } catch (Exception er) { Log4netHelper.Error(this, er); logSend(er.Message); } }, cts.Token); }