public MQTTClientContext(ILogger <MQTTClientContext> logger, IMqttClientFacade mqttClientFacade, IEnumerable <IMeetingApplicationPoller> meetingApplicationPollers, ICommandTriager commandTriager) { _logger = logger; _mqttClientFacade = mqttClientFacade; var contextMenu = new ContextMenuStrip(); _trayIcon = new NotifyIcon() { ContextMenuStrip = contextMenu, Visible = true, Text = "MQTT Client", Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location) }; // Add minimum required buttons AddConnectionStatus(_mqttClientFacade); AddExitButton(); ShowLaunchBaloon(); // Start MQTT client _mqttClientFacade.OnMessage(commandTriager.BaseTopic, commandTriager.OnReceive); _mqttClientFacade.Start(); // Register all meeting pollers foreach (IMeetingApplicationPoller meetingApplicationPoller in meetingApplicationPollers) { AddMeetingStatus(meetingApplicationPoller); meetingApplicationPoller.StartPolling(); } }
/// <summary> /// Adds connection status text /// </summary> /// <param name="mqttClientFacade"></param> private void AddConnectionStatus(IMqttClientFacade mqttClientFacade) { _logger.LogDebug("Adding MQTT connection status menu item"); var statusItem = new ToolStripMenuItem(); statusItem.Enabled = false; statusItem.Text = "Unknown Status"; statusItem.Name = "connection_satus_item"; mqttClientFacade.OnConnected(() => statusItem.Text = $"Connected to {mqttClientFacade.ConnectionSettings.BrokerURL}"); mqttClientFacade.OnDisconnected(() => statusItem.Text = $"Disconnected from {mqttClientFacade.ConnectionSettings.BrokerURL}"); _trayIcon.ContextMenuStrip.Items.Add(statusItem); }