Beispiel #1
0
        //--//

        public GatewayService(IAsyncQueue <QueuedItem> queue, EventProcessor processor, Func <string, QueuedItem> dataTransform = null)
        {
            if (queue == null || processor == null)
            {
                throw new ArgumentException("task queue and event processor cannot be null");
            }

            if (dataTransform != null)
            {
                _dataTransform = dataTransform;
            }
            else
            {
                _dataTransform = m => new QueuedItem
                {
                    JsonData = m
                };
            }

            _queue          = queue;
            _eventProcessor = processor;
        }
        //--//

        public GatewayService( IAsyncQueue<QueuedItem> queue, EventProcessor processor, Func<string, QueuedItem> dataTransform = null )
        {
            if( queue == null || processor == null )
            {
                throw new ArgumentException( "task queue and event processor cannot be null" );
            }

            if( dataTransform != null )
            {
                _dataTransform = dataTransform;
            }
            else
            {
                _dataTransform = m => new QueuedItem
                    {
                        JsonData = m
                    };
            }

            _queue = queue;
            _eventProcessor = processor;
        }
        //--//
        public WindowsService( ILogger logger )
        {
            if( logger == null )
            {
                throw new ArgumentException( "Cannot run service without logging" );
            }

            _logger = logger;

            if( logger is TunableLogger )
            {
                TunableLogger.LoggingLevel loggingLevel = TunableLogger.LevelFromString( ConfigurationManager.AppSettings.Get( "LoggingLevel" ) );

                ( ( TunableLogger )logger ).Level = ( loggingLevel != TunableLogger.LoggingLevel.Undefined ) ? loggingLevel : TunableLogger.LoggingLevel.Errors;
            }

            try
            {
                _THREADING.TaskScheduler.UnobservedTaskException += OnUnobservedTaskException;

                // Name the Windows Service
                ServiceName = Constants.WindowsServiceName;

                _gatewayQueue = new GatewayQueue<QueuedItem>( );
                IotHubConfig iotHubConfig = Loader.GetIotHubConfig( );

                if( iotHubConfig == null )
                {
                    _logger.LogError( "IoT Hub connection configuration is missing" );
                    return;
                }
                _MessageSender = new MessageSender<SensorDataContract>(iotHubConfig.IotHubConnectionString, _logger);

                _batchSenderThread = new BatchSenderThread<QueuedItem, SensorDataContract>(
                                                    _gatewayQueue,
                                                    _MessageSender,
                                                    null,//m => DataTransforms.AddTimeCreated(DataTransforms.SensorDataContractFromQueuedItem(m, _Logger)),
                                                    new Func<QueuedItem, string>( m => m.JsonData ),
                                                    _logger );

                _dataIntakeLoader = new DeviceAdapterLoader( Loader.GetSources( ), Loader.GetEndpoints( ), _logger );

                TaskWrapper.Run( ( ) => IPAddressHelper.GetIPAddressString( ref _gatewayIPAddressString ) );

                DataTransformsConfig dataTransformsConfig = Loader.GetDataTransformsConfig( );
                if( dataTransformsConfig.AttachIP || dataTransformsConfig.AttachTime )
                {
                    Func<string, SensorDataContract> transform = ( m => DataTransforms.SensorDataContractFromString( m, _logger ) );

                    if( dataTransformsConfig.AttachTime )
                    {
                        var transformPrev = transform;
                        transform = ( m => DataTransforms.AddTimeCreated( transformPrev( m ) ) );
                    }

                    if( dataTransformsConfig.AttachTime )
                    {
                        var transformPrev = transform;
                        transform = ( m => DataTransforms.AddIPToLocation( transformPrev( m ), _gatewayIPAddressString ) );
                    }

                    _gatewayTransform = ( m => DataTransforms.QueuedItemFromSensorDataContract( transform( m ) ) );
                }
            }
            catch( Exception ex )
            {
                _logger.LogError( "Exception creating WindowsService: " + ex.Message );
            }
        }
Beispiel #4
0
        //--//

        private static void InitGateway( ILogger logger )
        {
            if( logger == null )
            {
                throw new ArgumentException( "Cannot run service without logging" );
            }

            _logger = logger;

            if( logger is TunableLogger )
            {
                TunableLogger.LoggingLevel loggingLevel = TunableLogger.LevelFromString( ConfigurationManager.AppSettings.Get( "LoggingLevel" ) );

                ( ( TunableLogger )logger ).Level = ( loggingLevel != TunableLogger.LoggingLevel.Undefined ) ? loggingLevel : TunableLogger.LoggingLevel.Errors;
            }

            try
            {
                System.Threading.Tasks.TaskScheduler.UnobservedTaskException += OnUnobservedTaskException;

                // Name the Windows Service
                
                _gatewayQueue = new GatewayQueue<QueuedItem>( );
                AMQPConfig amqpConfig = Loader.GetAMQPConfig( );

                if( amqpConfig == null )
                {
                    _logger.LogError( "AMQP configuration is missing" );
                    return;
                }
                _AMPQSender = new AMQPSender<SensorDataContract>(
                                                    amqpConfig.AMQPSAddress,
                                                    amqpConfig.EventHubName,
                                                    amqpConfig.EventHubMessageSubject,
                                                    amqpConfig.EventHubDeviceId,
                                                    amqpConfig.EventHubDeviceDisplayName,
                                                    _logger
                                                    );
                
                _batchSenderThread = new BatchSenderThread<QueuedItem, SensorDataContract>(
                                                    _gatewayQueue,
                                                    _AMPQSender,
                                                    null,//m => DataTransforms.AddTimeCreated(DataTransforms.SensorDataContractFromQueuedItem(m, _Logger)),
                                                    new Func<QueuedItem, string>( m => m.JsonData ),
                                                    _logger );

                _dataIntakeLoader = new DeviceAdapterLoader( Loader.GetSources( ), Loader.GetEndpoints( ), _logger );

                TaskWrapper.Run( ( ) => IPAddressHelper.GetIPAddressString( ref _gatewayIPAddressString ) );

                DataTransformsConfig dataTransformsConfig = Loader.GetDataTransformsConfig( );
                if( dataTransformsConfig.AttachIP || dataTransformsConfig.AttachTime )
                {
                    Func<string, SensorDataContract> transform = ( m => DataTransforms.SensorDataContractFromString( m, _logger ) );

                    if( dataTransformsConfig.AttachTime )
                    {
                        var transformPrev = transform;
                        transform = ( m => DataTransforms.AddTimeCreated( transformPrev( m ) ) );
                    }

                    if( dataTransformsConfig.AttachTime )
                    {
                        var transformPrev = transform;
                        transform = ( m => DataTransforms.AddIPToLocation( transformPrev( m ), _gatewayIPAddressString ) );
                    }

                    _gatewayTransform = ( m => DataTransforms.QueuedItemFromSensorDataContract( transform( m ) ) );
                }
            }
            catch( Exception ex )
            {
                _logger.LogError( "Exception creating Gateway: " + ex.Message );
            }
        }