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));
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="connector"></param>
        /// <param name="bytesExtractor"></param>
        /// <param name="rawMessageTranslator"></param>
        public void ChangeSource(IConnector connector, IMessageBytesExtractor bytesExtractor, IRawMessageTranslator rawMessageTranslator)
        {
            var changed   = false;
            var reconnect = false;

            lock (_SyncLock) {
                reconnect = Connector != null && Connector.EstablishingConnections;
                if (connector != Connector || bytesExtractor != BytesExtractor || rawMessageTranslator != RawMessageTranslator)
                {
                    if (RawMessageTranslator != null && RawMessageTranslator != rawMessageTranslator)
                    {
                        RawMessageTranslator.Dispose();
                    }

                    if (Connector != connector)
                    {
                        if (Connector != null)
                        {
                            UnhookConnector();
                            Connector.Dispose();
                        }
                        Connector = connector;
                        Connector.IsSingleConnection = true;
                        HookConnector();
                    }

                    BytesExtractor       = bytesExtractor;
                    RawMessageTranslator = rawMessageTranslator;
                    if (RawMessageTranslator != null)
                    {
                        RawMessageTranslator.Statistics = Statistics;
                    }

                    TotalMessages    = 0;
                    TotalBadMessages = 0;

                    changed = true;
                }
            }

            if (changed)
            {
                OnSourceChanged(EventArgs.Empty);
                if (reconnect)
                {
                    Connect();
                }
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Disposes of or finalises the object.
 /// </summary>
 /// <param name="disposing"></param>
 private void Dispose(bool disposing)
 {
     _Disposed = true;
     if (disposing)
     {
         lock (_SyncLock) {
             if (Provider != null)
             {
                 Provider.Close();
             }
             if (_MessageProcessingAndDispatchQueue != null)
             {
                 _MessageProcessingAndDispatchQueue.Dispose();
             }
             if (RawMessageTranslator != null)
             {
                 RawMessageTranslator.Dispose();
             }
         }
     }
 }
Exemplo n.º 4
0
 /// <summary>
 /// Disposes of or finalises the object.
 /// </summary>
 /// <param name="disposing"></param>
 private void Dispose(bool disposing)
 {
     _Disposed = true;
     if (disposing)
     {
         lock (_SyncLock) {
             if (Connector != null)
             {
                 Connector.CloseConnection();
                 UnhookConnector();
                 Connector.Dispose();
             }
             if (_MessageProcessingAndDispatchQueue != null)
             {
                 _MessageProcessingAndDispatchQueue.Dispose();
             }
             if (RawMessageTranslator != null)
             {
                 RawMessageTranslator.Dispose();
             }
         }
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="bytesExtractor"></param>
        /// <param name="rawMessageTranslator"></param>
        /// <param name="autoReconnect"></param>
        public void ChangeSource(IListenerProvider provider, IMessageBytesExtractor bytesExtractor, IRawMessageTranslator rawMessageTranslator, bool autoReconnect)
        {
            lock (_SyncLock) {
                bool changed = false;

                if (provider != Provider || bytesExtractor != BytesExtractor || rawMessageTranslator != RawMessageTranslator)
                {
                    if (Provider != null)
                    {
                        Disconnect();
                    }
                    if (RawMessageTranslator != null && RawMessageTranslator != rawMessageTranslator)
                    {
                        RawMessageTranslator.Dispose();
                    }

                    Provider             = provider;
                    BytesExtractor       = bytesExtractor;
                    RawMessageTranslator = rawMessageTranslator;

                    TotalMessages    = 0;
                    TotalBadMessages = 0;

                    changed = true;
                }

                if (changed)
                {
                    OnSourceChanged(EventArgs.Empty);
                    if (autoReconnect)
                    {
                        Connect(false);
                    }
                }
            }
        }