Exemplo n.º 1
0
        /// <summary>
        /// Called on a background thread to raise an event indicating that a message has been picked up.
        /// </summary>
        /// <param name="message"></param>
        private void ProcessAndDispatchMessageQueueItem(MessageDispatch message)
        {
            if (message.Port30003MessageEventArgs != null)
            {
                OnPort30003MessageReceived(message.Port30003MessageEventArgs);
            }
            else if (message.RawBytesEventArgs != null)
            {
                OnRawBytesReceived(message.RawBytesEventArgs);
            }
            else if (message.ModeSBytesEventArgs != null)
            {
                OnModeSBytesReceived(message.ModeSBytesEventArgs);
            }
            else
            {
                var modeSMessageArgs = message.ModeSMessageEventArgs;
                OnModeSMessageReceived(modeSMessageArgs);

                BaseStationMessage cookedMessage;
                lock (_SyncLock) {
                    cookedMessage = RawMessageTranslator == null ? null : RawMessageTranslator.Translate(modeSMessageArgs.ReceivedUtc, modeSMessageArgs.ModeSMessage, modeSMessageArgs.AdsbMessage);
                }
                if (cookedMessage != null)
                {
                    OnPort30003MessageReceived(new BaseStationMessageEventArgs(cookedMessage));
                }
            }
        }