Loading...
Searching...
No Matches
mqtt_session_example.dart
Go to the documentation of this file.
1import 'dart:async';
2import 'package:navigine_sdk/navigine_sdk.dart';
3
8class MqttSessionExample {
9 NavigineSdk? _sdk;
10 LocationManager? _locationManager;
11 NavigationManager? _navigationManager;
12 MqttSession? _mqttSession;
13 MqttSessionListener? _mqttSessionListener;
14
15 MqttSessionExample() {
16 _initializeSdk();
17 _setupMqttSessionListener();
18 }
19
23 void _initializeSdk() {
24 try {
25 // [dart_NavigineSdk_getInstance]
26 // Get SDK instance
27 _sdk = NavigineSdk.getInstance();
28 // [dart_NavigineSdk_getInstance]
29
30 // [dart_NavigineSdk_setUserHash]
31 // Set user hash
32 _sdk?.setUserHash("USER-HASH-HERE");
33 // [dart_NavigineSdk_setUserHash]
34
35 // [dart_NavigineSdk_setServer]
36 // Set server URL (optional)
37 _sdk?.setServer("https://custom.navigine.com");
38 // [dart_NavigineSdk_setServer]
39
40 // [dart_NavigineSdk_getLocationManager]
41 // Get LocationManager for working with locations
42 _locationManager = _sdk?.getLocationManager();
43 // [dart_NavigineSdk_getLocationManager]
44
45 // [dart_NavigineSdk_getNavigationManager]
46 // Get NavigationManager for working with navigation
47 _navigationManager = _sdk?.getNavigationManager(_locationManager!);
48 // [dart_NavigineSdk_getNavigationManager]
49
50 // [dart_NavigineSdk_getMqttSession]
51 // Create MQTT session for publishing position data
52 _mqttSession = _sdk?.getMqttSession(_navigationManager!);
53 // [dart_NavigineSdk_getMqttSession]
54
55 if (_mqttSession != null) {
56 print("MqttSession successfully initialized");
57 }
58 } catch (e) {
59 print("Error initializing SDK: $e");
60 }
61 }
62
66 void _setupMqttSessionListener() {
67 _mqttSessionListener = MqttSessionListener(
68 // [dart_MqttSessionListener_onConnected]
69 onConnected: () {
70 print("MQTT session connected successfully");
71 },
72 // [dart_MqttSessionListener_onConnected]
73 // [dart_MqttSessionListener_onError]
74 onError: (Error error) {
75 print("MQTT session error: ${error.message}");
76 },
77 // [dart_MqttSessionListener_onError]
78 // [dart_MqttSessionListener_onMessagePublished]
80 print("Message published successfully");
81 },
82 // [dart_MqttSessionListener_onMessagePublished]
83 );
84 }
85
89 Future<void> demonstrateMqttSessionMethods() async {
90 if (_mqttSession == null) {
91 print("MqttSession not initialized");
92 return;
93 }
94
95 if (_mqttSessionListener == null) return;
96
97 // [dart_MqttSession_addListener]
98 // Add MQTT session listener
99 _mqttSession!.addListener(_mqttSessionListener!);
100 // [dart_MqttSession_addListener]
101
102 // [dart_MqttSession_setSubTopic]
103 // Set MQTT sub-topic for publishing position data
104 // Final topic will be "navigine/mobile/positions/" + subTopic + "/" + deviceId
105 _mqttSession!.setSubTopic("location1");
106 // [dart_MqttSession_setSubTopic]
107
108 // [dart_MqttSession_connect]
109 // Connect to MQTT broker
110 // Server: MQTT broker hostname or IP address
111 // Port: MQTT broker port (typically 1883 for non-SSL, 8883 for SSL)
112 // Username: MQTT broker username for authentication
113 // Password: MQTT broker password for authentication
114 _mqttSession!.connect("mqtt.example.com", 1883, "username", "password");
115 // [dart_MqttSession_connect]
116
117 // Wait for connection
118 await Future.delayed(Duration(seconds: 2));
119
120 // [dart_MqttSession_publish]
121 // Publish a custom message to a specific MQTT topic
122 // The message will be sent asynchronously and the result will be notified through listener callbacks
123 String customTopic = "custom/device/status";
124 String customMessage = '{"status": "online", "timestamp": ${DateTime.now().millisecondsSinceEpoch}}';
125 _mqttSession!.publish(customTopic, customMessage);
126 // [dart_MqttSession_publish]
127 }
128
132 Future<void> demonstrateMqttSessionConfigurations() async {
133 if (_mqttSession == null) {
134 print("MqttSession not initialized");
135 return;
136 }
137
138 print("=== MQTT Session Configurations ===");
139
140 // Example 1: Connect with default port
141 // [dart_MqttSession_setSubTopic]
142 // Set sub-topic. Final topic will be "navigine/mobile/positions/location1/{deviceId}"
143 _mqttSession!.setSubTopic("location1");
144 // [dart_MqttSession_setSubTopic]
145 // [dart_MqttSession_connect]
146 // Connect to MQTT broker with default port 1883
147 _mqttSession!.connect("mqtt.example.com", 1883, "user", "pass");
148 // [dart_MqttSession_connect]
149
150 // Wait a bit
151 await Future.delayed(Duration(seconds: 1));
152
153 // Disconnect before reconnecting with different config
154 // [dart_MqttSession_disconnect]
155 // Disconnect from MQTT broker
156 _mqttSession!.disconnect();
157 // [dart_MqttSession_disconnect]
158
159 // Example 2: Connect with SSL port
160 // [dart_MqttSession_setSubTopic]
161 // Set sub-topic. Final topic will be "navigine/mobile/positions/building-a/{deviceId}"
162 _mqttSession!.setSubTopic("building-a");
163 // [dart_MqttSession_setSubTopic]
164 // [dart_MqttSession_connect]
165 // Connect to MQTT broker with SSL port 8883
166 _mqttSession!.connect("mqtt-secure.example.com", 8883, "user", "pass");
167 // [dart_MqttSession_connect]
168
169 // Wait a bit
170 await Future.delayed(Duration(seconds: 1));
171
172 // Example 3: Connect with different sub-topic
173 // [dart_MqttSession_setSubTopic]
174 // Set different sub-topic. Final topic will be "navigine/mobile/positions/floor_2/{deviceId}"
175 _mqttSession!.setSubTopic("floor_2");
176 // [dart_MqttSession_setSubTopic]
177 // [dart_MqttSession_connect]
178 // Connect to MQTT broker
179 _mqttSession!.connect("mqtt.example.com", 1883, "user", "pass");
180 // [dart_MqttSession_connect]
181 }
182
186 Future<void> demonstrateListenerManagement() async {
187 if (_mqttSession == null) {
188 print("MqttSession not initialized");
189 return;
190 }
191
192 print("=== Listener Management ===");
193
194 // Add multiple listeners
196 onConnected: () {
197 print("Listener 1: Connected");
198 },
199 onError: (Error error) {
200 print("Listener 1: Error - ${error.message}");
201 },
203 print("Listener 1: Message published");
204 },
205 );
206
208 onConnected: () {
209 print("Listener 2: Connected");
210 },
211 onError: (Error error) {
212 print("Listener 2: Error - ${error.message}");
213 },
215 print("Listener 2: Message published");
216 },
217 );
218
219 // [dart_MqttSession_addListener]
220 // Add first listener
221 _mqttSession!.addListener(listener1);
222 // [dart_MqttSession_addListener]
223
224 // [dart_MqttSession_addListener]
225 // Add second listener
226 _mqttSession!.addListener(listener2);
227 // [dart_MqttSession_addListener]
228
229 // Connect to trigger callbacks
230 // [dart_MqttSession_setSubTopic]
231 _mqttSession!.setSubTopic("location1");
232 // [dart_MqttSession_setSubTopic]
233 // [dart_MqttSession_connect]
234 _mqttSession!.connect("mqtt.example.com", 1883, "user", "pass");
235 // [dart_MqttSession_connect]
236
237 // Wait for connection
238 await Future.delayed(Duration(seconds: 2));
239
240 // [dart_MqttSession_publish]
241 // Publish custom messages to different topics
242 _mqttSession!.publish("custom/events", '{"event": "user_action"}');
243 _mqttSession!.publish("custom/logs", "Application started");
244 // [dart_MqttSession_publish]
245
246 // Wait for messages to be published
247 await Future.delayed(Duration(seconds: 1));
248
249 // [dart_MqttSession_removeListener]
250 // Remove first listener
251 _mqttSession!.removeListener(listener1);
252 // [dart_MqttSession_removeListener]
253
254 // [dart_MqttSession_removeListener]
255 // Remove second listener
256 _mqttSession!.removeListener(listener2);
257 // [dart_MqttSession_removeListener]
258 }
259
263 void cleanup() {
264 if (_mqttSession != null) {
265 // [dart_MqttSession_removeListener]
266 // Remove MQTT session listener
267 if (_mqttSessionListener != null) {
268 _mqttSession!.removeListener(_mqttSessionListener!);
269 }
270 // [dart_MqttSession_removeListener]
271
272 // [dart_MqttSession_disconnect]
273 // Disconnect from MQTT broker
274 _mqttSession!.disconnect();
275 // [dart_MqttSession_disconnect]
276 }
277 }
278
282 Future<void> runExample() async {
283 print("=== MqttSession Example ===");
284
285 await demonstrateMqttSessionMethods();
286 await demonstrateMqttSessionConfigurations();
287 await demonstrateListenerManagement();
288
289 // Wait a bit for connection events
290 await Future.delayed(Duration(seconds: 3));
291
292 cleanup();
293 print("=== Example completed ===");
294 }
295}
296
300Future<void> main() async {
302 await example.runExample();
303}