public LuGaMqtt( LuGaMqttConfig config, IRepository <Event> eventRepository) { this.eventRepository = eventRepository; var factory = new MqttFactory(); var options = new ManagedMqttClientOptionsBuilder() .WithAutoReconnectDelay(TimeSpan.FromSeconds(Constants.ReconnectDelay)) .WithClientOptions(new MqttClientOptionsBuilder() .WithClientId(config.ClientId) .WithTcpServer(config.Host, config.Port) .WithCredentials(config.Username, config.Password) .Build()) .Build(); client = factory.CreateManagedMqttClient(); client.ApplicationMessageReceived += (s, e) => { if (e.ApplicationMessage.Topic.IndexOf(Constants.MessageTopic1, StringComparison.Ordinal) <= -1 || e.ApplicationMessage.Topic.IndexOf(Constants.MessageTopic2, StringComparison.Ordinal) != -1) { return; } var pulled = e.ApplicationMessage.Topic.Split(Constants.SplitCharacter); var @event = new Event() { DeviceId = pulled[1], Action = pulled[3].Split("_").ElementAt(0), Zone = pulled[3].Split("_").ElementAt(1), Value = Encoding.UTF8.GetString(e.ApplicationMessage.Payload), TimeStamp = DateTime.UtcNow }; this.eventRepository.Add(@event); }; client.Connected += async(s, e) => { Debug.WriteLine(Constants.ConnectedOutput); await client.SubscribeAsync( new TopicFilterBuilder() .WithTopic(Constants.SubscribeTopic) .Build() ); }; client.Disconnected += (s, e) => { Debug.WriteLine(Constants.DisconnectedOutput); }; Task.Run(() => Background(options)); }
static int Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; string environment = Environment.GetEnvironmentVariable(Constants.Environment); if (String.IsNullOrWhiteSpace(environment)) { throw new ArgumentNullException("Environment not found in:" + Constants.Environment); } Debug.WriteLine("Environment: {0}", environment); // all passwords should be stored in // %APPDATA%\microsoft\UserSecrets\luga\secrets.json // https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?tabs=visual-studio var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{environment}.json", optional: true) .AddEnvironmentVariables(); if (environment != null && environment.Contains("Dev")) { builder.AddUserSecrets <Program>(); } var cfg = builder.Build(); var connectionString = cfg.GetConnectionString(Constants.ConnectionString); return((int)HostFactory.Run(x => { var mqttConfig = new LuGaMqttConfig ( cfg[Constants.Username], cfg[Constants.Password], cfg[Constants.ClientId], cfg[Constants.Host], Convert.ToInt32(cfg[Constants.Port])); var eventsRepository = new EventsRepository(connectionString); x.Service(y => new LuGaMqtt(mqttConfig, eventsRepository)); x.SetServiceName(Constants.ServiceName); x.SetDisplayName(Constants.ServiceName); })); }