using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using MQTTnet.AspNetCore; using MQTTnetServer.Settings; using System; using System.Collections.Generic; using System.IO; using System.Net; namespace MQTTnetServer { /// /// Main Entry point /// public class Program { /// /// Main /// /// public static void Main(string[] args) { try { CreateWebHostBuilder(args).Build().Run(); } catch (FileNotFoundException e) { Console.WriteLine("Could not find application settings file in: " + e.FileName); return; } } /// /// Configure and Start Kestrel /// /// /// public static IWebHostBuilder CreateWebHostBuilder(string[] args) { var webHost = WebHost.CreateDefaultBuilder(args); var listen = ReadListenSettings(); webHost .UseKestrel(o => { if (listen?.Length > 0) { foreach (var item in listen) { if (item.Address?.Trim() == "*") { if (item.Protocol == ListenProtocolTypes.MQTT) { o.ListenAnyIP(item.Port, c => c.UseMqtt()); } else { o.ListenAnyIP(item.Port); } } else if (item.Address?.Trim() == "localhost") { if (item.Protocol == ListenProtocolTypes.MQTT) { o.ListenLocalhost(item.Port, c => c.UseMqtt()); } else { o.ListenLocalhost(item.Port); } } else { if (IPAddress.TryParse(item.Address, out var ip)) { if (item.Protocol == ListenProtocolTypes.MQTT) { o.Listen(ip, item.Port, c => c.UseMqtt()); } else { o.Listen(ip, item.Port); } } } } } else { o.ListenAnyIP(1883, l => l.UseMqtt()); o.ListenAnyIP(5000); } }); webHost.UseStartup(); return webHost; } /// /// Read Application Settings /// /// public static ListenModel[] ReadListenSettings() { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddEnvironmentVariables() .Build(); var listen = new List(); builder.Bind("MQTTnetServer:Listen", listen); return listen.ToArray(); } } }