Esempio n. 1
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions <MQTTBrokerOption> options, MqttEventsHandler mqttEventsHandler, IMqttServerStorage storage)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseSwaggerUi3();
            //app.UseHealthChecks("/health", new HealthCheckOptions()
            //{
            //    Predicate = _ => true,
            //    ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
            //});

            //      app.UseHealthChecksUI();
            app.UseHttpsRedirection();
            app.UseCookiePolicy();
            app.UseAuthentication();
            app.UseMvc();
            app.UseDefaultFiles();
            app.UseStaticFiles();
            app.UseMqttEndpoint();
            _storage = storage;
            app.UseMqttServerEx(server =>
            {
                server.ClientConnectedHandler            = new MqttServerClientConnectedHandlerDelegate(args => mqttEventsHandler.Server_ClientConnected(server, args));
                server.StartedHandler                    = new MqttServerStartedHandlerDelegate(args => mqttEventsHandler.Server_Started(server, args));
                server.StoppedHandler                    = new MqttServerStoppedHandlerDelegate(args => mqttEventsHandler.Server_Stopped(server, args));
                server.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(args => mqttEventsHandler.Server_ApplicationMessageReceived(server, args));
                server.ClientSubscribedTopicHandler      = new MqttServerClientSubscribedHandlerDelegate(args => mqttEventsHandler.Server_ClientSubscribedTopic(server, args));
                server.ClientUnsubscribedTopicHandler    = new MqttServerClientUnsubscribedTopicHandlerDelegate(args => mqttEventsHandler.Server_ClientUnsubscribedTopic(server, args));
                server.ClientConnectionValidatorHandler  = new MqttServerClientConnectionValidatorHandlerDelegate(args => mqttEventsHandler.MqttConnectionValidatorContextAsync(args.Context));
            });
            app.UseMqttBrokerLogger();
            app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            });
            app.UseSwagger(config => config.PostProcess = (document, request) =>
            {
                if (request.Headers.ContainsKey("X-External-Host"))
                {
                    // Change document server settings to public
                    document.Host     = request.Headers["X-External-Host"].First();
                    document.BasePath = request.Headers["X-External-Path"].First();
                }
            });
            app.UseSwaggerUi3(config => config.TransformToExternalPath = (internalUiRoute, request) =>
            {
                // The header X-External-Path is set in the nginx.conf file
                var externalPath = request.Headers.ContainsKey("X-External-Path") ? request.Headers["X-External-Path"].First() : "";
                return(externalPath + internalUiRoute);
            });
            app.UseAuthentication();
        }
Esempio n. 2
0
 public ServerBuilder(
     IConfiguration configuration,
     IMqttRepository repo,
     IMqttServerStorage storage,
     IMqttServerFactory factory,
     IMqttServerConnectionValidator validator,
     ILogger <ServerBuilder> logger)
 {
     _configuration = configuration;
     _storage       = storage;
     _factory       = factory;
     _validator     = validator;
     _logger        = logger;
 }
Esempio n. 3
0
        public static void UseIotSharpMqttServer(this IApplicationBuilder app)
        {
            app.UseMqttEndpoint();
            var mqttEvents             = app.ApplicationServices.CreateScope().ServiceProvider.GetService <MQTTServerHandler>();
            IMqttServerStorage storage = app.ApplicationServices.CreateScope().ServiceProvider.GetService <IMqttServerStorage>();

            app.UseMqttServerEx(server =>
            {
                server.ClientConnectedHandler            = new MqttServerClientConnectedHandlerDelegate(args => mqttEvents.Server_ClientConnected(server, args));
                server.StartedHandler                    = new MqttServerStartedHandlerDelegate(args => mqttEvents.Server_Started(server, args));
                server.StoppedHandler                    = new MqttServerStoppedHandlerDelegate(args => mqttEvents.Server_Stopped(server, args));
                server.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(args => mqttEvents.Server_ApplicationMessageReceived(server, args));
                server.ClientSubscribedTopicHandler      = new MqttServerClientSubscribedHandlerDelegate(args => mqttEvents.Server_ClientSubscribedTopic(server, args));
                server.ClientUnsubscribedTopicHandler    = new MqttServerClientUnsubscribedTopicHandlerDelegate(args => mqttEvents.Server_ClientUnsubscribedTopic(server, args));
                server.ClientConnectionValidatorHandler  = new MqttServerClientConnectionValidatorHandlerDelegate(args => mqttEvents.Server_ClientConnectionValidator(server, args));
                server.ClientDisconnectedHandler         = new MqttServerClientDisconnectedHandlerDelegate(args => mqttEvents.Server_ClientDisconnected(server, args));
            });

            var mqttNetLogger  = app.ApplicationServices.GetService <IMqttNetLogger>();
            var _loggerFactory = app.ApplicationServices.GetService <ILoggerFactory>();
            var logger         = _loggerFactory.CreateLogger <IMqttNetLogger>();

            mqttNetLogger.LogMessagePublished += (object sender, MqttNetLogMessagePublishedEventArgs e) =>
            {
                var message = $"ID:{e.TraceMessage.LogId},ThreadId:{e.TraceMessage.ThreadId},Source:{e.TraceMessage.Source},Timestamp:{e.TraceMessage.Timestamp},Message:{e.TraceMessage.Message}";
                switch (e.TraceMessage.Level)
                {
                case MqttNetLogLevel.Verbose:
                    logger.LogTrace(e.TraceMessage.Exception, message);
                    break;

                case MqttNetLogLevel.Info:
                    logger.LogInformation(e.TraceMessage.Exception, message);
                    break;

                case MqttNetLogLevel.Warning:
                    logger.LogWarning(e.TraceMessage.Exception, message);
                    break;

                case MqttNetLogLevel.Error:
                    logger.LogError(e.TraceMessage.Exception, message);
                    break;

                default:
                    break;
                }
            };
        }
Esempio n. 4
0
        public static void UseIotSharpMqttServer(this IApplicationBuilder app)
        {
            var mqttEvents             = app.ApplicationServices.CreateScope().ServiceProvider.GetService <MQTTServerHandler>();
            IMqttServerStorage storage = app.ApplicationServices.CreateScope().ServiceProvider.GetService <IMqttServerStorage>();

            app.UseMqttServerEx(server =>
            {
                server.ClientConnectedHandler            = new MqttServerClientConnectedHandlerDelegate(args => mqttEvents.Server_ClientConnected(server, args));
                server.StartedHandler                    = new MqttServerStartedHandlerDelegate(args => mqttEvents.Server_Started(server, args));
                server.StoppedHandler                    = new MqttServerStoppedHandlerDelegate(args => mqttEvents.Server_Stopped(server, args));
                server.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(args => mqttEvents.Server_ApplicationMessageReceived(server, args));
                server.ClientSubscribedTopicHandler      = new MqttServerClientSubscribedHandlerDelegate(args => mqttEvents.Server_ClientSubscribedTopic(server, args));
                server.ClientUnsubscribedTopicHandler    = new MqttServerClientUnsubscribedTopicHandlerDelegate(args => mqttEvents.Server_ClientUnsubscribedTopic(server, args));
                server.ClientConnectionValidatorHandler  = new MqttServerClientConnectionValidatorHandlerDelegate(args => mqttEvents.Server_ClientConnectionValidator(server, args));
                server.ClientDisconnectedHandler         = new MqttServerClientDisconnectedHandlerDelegate(args => mqttEvents.Server_ClientDisconnected(server, args));
            });
        }
Esempio n. 5
0
 public MqttServerOptionsBuilder WithStorage(IMqttServerStorage value)
 {
     _options.Storage = value;
     return(this);
 }
Esempio n. 6
0
        public static void UseMqttBrokerOption(this MqttServerOptionsBuilder builder, IMqttServerStorage storage)
        {
            var options = MQTTBrokerOption;

            if (options.BrokerCertificate != null)
            {
                builder.WithEncryptionCertificate(options.BrokerCertificate.Export(X509ContentType.Pfx))
                .WithEncryptedEndpoint()
                .WithEncryptedEndpointPort(options.SSLPort);
            }
            builder.WithDefaultEndpoint()
            .WithDefaultEndpointPort(options.Port)
            .WithStorage(storage)
            .Build();
        }