예제 #1
0
 private void SynchronousReceive(object state)
 {
     try
     {
         while (!_cancellation.IsCancellationRequested)
         {
             IMessage    rawMessage = UpLinkMessenger.Receive();
             MessageBase message    = rawMessage as MessageBase;
             if (null != message)
             {
                 if (message.Type == MessageType.Status)
                 {
                     _statusMessageQueue.Enqueue(message);
                 }
                 else if (message.Type == MessageType.CallBack)
                 {
                     _callBackMessageQueue.Enqueue(message);
                 }
                 else
                 {
                     _engineMessageQueue.Enqueue(message);
                 }
                 GlobalInfo.LogService.Print(LogLevel.Debug, CommonConst.PlatformLogSession,
                                             $"Message received, Type:{message.Type}, Index:{message.Index}.");
             }
             else
             {
                 GlobalInfo.LogService.Print(LogLevel.Warn, CommonConst.PlatformSession,
                                             $"Unexpected message received. Type:{rawMessage.GetType().Name}, id:{rawMessage.Id}");
             }
         }
     }
     catch (ThreadAbortException)
     {
         GlobalInfo.LogService.Print(LogLevel.Warn, CommonConst.PlatformLogSession,
                                     $"thread {Thread.CurrentThread.Name} is stopped abnormally");
     }
     catch (Exception ex)
     {
         // 只有在因为非用户操作的情况下停止才执行停止操作
         this.Stop();
         GlobalInfo.EventQueue.Enqueue(new ExceptionEventInfo(ex));
         GlobalInfo.LogService.Print(LogLevel.Fatal, CommonConst.PlatformLogSession, ex);
     }
     finally
     {
         GlobalInfo.LogService.Print(LogLevel.Info, CommonConst.PlatformLogSession,
                                     $"thread {Thread.CurrentThread.Name} is Stopped.");
     }
 }
예제 #2
0
 private void PeakMessage()
 {
     try
     {
         while (!_cancellation.IsCancellationRequested)
         {
             IMessage message = _downLinkMessenger.Peak();
             _messageQueue.Enqueue((MessageBase)message);
         }
     }
     catch (ThreadAbortException)
     {
         _slaveContext.LogSession.Print(LogLevel.Warn, CommonConst.PlatformLogSession, "Transceiver peak thread aborted");
     }
 }