public void StartListen() { // 打印状态日志 _context.LogSession.Print(LogLevel.Debug, _context.SessionId, $"Downlink message processer started, thread:{Thread.CurrentThread.ManagedThreadId}."); // 首先接收RmtGenMessage _messageQueue = _context.MessageTransceiver.MessageQueue; MessageBase message = _messageQueue.WaitUntilMessageCome(); RmtGenMessage rmtGenMessage = (RmtGenMessage)message; if (null == rmtGenMessage) { throw new TestflowRuntimeException(ModuleErrorCode.InvalidMessageReceived, _context.I18N.GetFStr("InvalidMessageReceived", message.GetType().Name)); } _context.RmtGenMessage = rmtGenMessage; while (!_context.Cancellation.IsCancellationRequested) { message = _messageQueue.WaitUntilMessageCome(); if (null == message) { continue; } switch (message.Type) { case MessageType.Ctrl: ProcessControlMessage((ControlMessage)message); break; case MessageType.Debug: ProcessDebugMessage((DebugMessage)message); break; case MessageType.Sync: ProcessSyncMessage((ResourceSyncMessage)message); break; case MessageType.CallBack: ProcessCallBackMessage((CallBackMessage)message); break; // 暂未在Master端实现发送RuntimeError消息的错误 case MessageType.RmtGen: case MessageType.RuntimeError: case MessageType.Status: case MessageType.TestGen: default: throw new TestflowRuntimeException(ModuleErrorCode.InvalidMessageReceived, _context.I18N.GetFStr("InvalidMessageReceived", message.GetType().Name)); } } _context.LogSession.Print(LogLevel.Debug, _context.SessionId, $"Downlink message processor stopped, Thread:{Thread.CurrentThread.ManagedThreadId}"); }
private void MessageProcessingLoop(object queueObj) { LocalMessageQueue <MessageBase> queue = queueObj as LocalMessageQueue <MessageBase>; try { while (!_cancellation.IsCancellationRequested) { MessageBase message = queue.WaitUntilMessageCome(); if (null == message) { continue; } bool operationContinue = GetConsumer(message).HandleMessage(message); // 如果消息执行后确认需要停止,则结束消息队列的处理。 if (!operationContinue) { break; } } GlobalInfo.LogService.Print(LogLevel.Info, CommonConst.PlatformSession, $"Listen thread: {Thread.CurrentThread.Name} is stopped."); } catch (ThreadAbortException) { GlobalInfo.LogService.Print(LogLevel.Warn, CommonConst.PlatformLogSession, $"thread {Thread.CurrentThread.Name} is stopped abnormally"); } catch (Exception ex) { GlobalInfo.EventQueue.Enqueue(new ExceptionEventInfo(ex)); GlobalInfo.LogService.Print(LogLevel.Fatal, CommonConst.PlatformLogSession, ex); this.Stop(); } }
private void TestStateMonitoring() { LocalMessageQueue <MessageBase> messageQueue = _slaveContext.MessageTransceiver.MessageQueue; // 首先接收RmtGenMessage MessageBase message = messageQueue.WaitUntilMessageCome(); }
public MessageBase Receive() { return(_messageQueue.WaitUntilMessageCome()); }