@@ -21,51 +21,80 @@ class MqttService
2121 private MqttClient client ;
2222 private Thread mqttThread ;
2323
24+ private void Connect ( MqttClient client )
25+ {
26+ while ( ! client . IsConnected )
27+ {
28+ if ( ! Settings . MqttServiceRunning )
29+ break ;
30+ try
31+ {
32+ // Attempt to connect
33+ var clientId = Guid . NewGuid ( ) . ToString ( ) ;
34+ if ( Settings . MqttSettings . ClientID != "" )
35+ clientId = Settings . MqttSettings . ClientID ;
36+ client . Connect ( clientId , Settings . MqttSettings . Username , Settings . MqttSettings . Password ) ;
37+ // If connected successfully, subscribe to topics, publish messages, etc.
38+ if ( client . IsConnected )
39+ {
40+ Logger . WriteLog ( "Connected to MQTT server at: {0}:{1}" , Settings . MqttSettings . Server , Settings . MqttSettings . Port ) ;
41+ foreach ( MqttRulesDefinition rule in Settings . MqttRulesSettings )
42+ {
43+ if ( rule != null && rule . Topic != "" )
44+ {
45+ Logger . WriteLog ( "MQTT Subscribing to topic: {0}" , rule . Topic ) ;
46+ client . Subscribe ( new string [ ] { rule . Topic } ,
47+ new byte [ ] { MqttMsgBase . QOS_LEVEL_EXACTLY_ONCE } ) ;
48+ }
49+ }
50+ }
51+ }
52+ catch ( Exception ex )
53+ {
54+ // Handle connection error
55+ Logger . WriteLog ( "Unable to connect to MQTT server at: {0}:{1} error: {2}" , Settings . MqttSettings . Server , Settings . MqttSettings . Port , ex . Message ) ;
56+ }
57+
58+
59+
60+ // If connection failed, wait for a while before attempting to reconnect
61+ if ( ! client . IsConnected )
62+ {
63+ Thread . Sleep ( 5000 ) ; // Wait for 5 seconds before retrying
64+ Logger . WriteLog ( "MQTT Not connected..." ) ;
65+ }
66+ }
67+ }
68+
2469 private void ServiceStart ( )
2570 {
2671 Logger . WriteLog ( "Mqtt service Thread is running..." ) ;
2772
2873
2974 client = new MqttClient ( Settings . MqttSettings . Server , Settings . MqttSettings . Port , false , null , null , MqttSslProtocols . None ) ;
30-
3175
3276 // register handler to a received message
3377 client . MqttMsgPublishReceived += MqttMsgPublishReceived ;
3478 client . ConnectionClosed += OnDisconnect ;
35-
36- var clientId = Guid . NewGuid ( ) . ToString ( ) ;
37- if ( Settings . MqttSettings . ClientID != "" )
38- clientId = Settings . MqttSettings . ClientID ;
39- try
40- {
41- client . Connect ( Settings . MqttSettings . ClientID , Settings . MqttSettings . Username , Settings . MqttSettings . Password ) ;
42- }
43- catch ( Exception ex )
44- {
45- Logger . WriteLog ( "Unable to connect to MQTT server at: {0}:{1} error: {2}" , Settings . MqttSettings . Server , Settings . MqttSettings . Port , ex . Message ) ;
46- }
47- Settings . MqttServiceRunning = true ;
4879
49- if ( client . IsConnected )
50- {
51- Logger . WriteLog ( "Connected to MQTT server at: {0}:{1}" , Settings . MqttSettings . Server , Settings . MqttSettings . Port ) ;
52- foreach ( MqttRulesDefinition rule in Settings . MqttRulesSettings )
53- {
54- if ( rule != null && rule . Topic != "" )
55- client . Subscribe ( new string [ ] { rule . Topic } ,
56- new byte [ ] { MqttMsgBase . QOS_LEVEL_EXACTLY_ONCE } ) ;
57- }
58- }
80+ Connect ( client ) ;
81+
82+ Settings . MqttServiceRunning = true ;
5983
6084 while ( mqttThread . ThreadState == ThreadState . Running )
6185 {
6286 Thread . Sleep ( 500 ) ;
6387 }
88+ Logger . WriteLog ( "MQTT Service finished work" ) ;
6489 }
6590
66- private static void OnDisconnect ( object sender , EventArgs e )
91+ private void OnDisconnect ( object sender , EventArgs e )
6792 {
6893 Logger . WriteLog ( "MQTT Server disconnected..." ) ;
94+ // Attempt to reconnect
95+ MqttClient cl = ( MqttClient ) sender ;
96+ if ( cl != null )
97+ Connect ( cl ) ;
6998 }
7099
71100
0 commit comments