1package com.navigine.examples
3import com.navigine.idl.java.*
6 * MqttSession usage example for Kotlin
7 * Demonstrates working with MQTT session for publishing position data
9class MqttSessionExample {
10 private var sdk: NavigineSdk? = null
11 private var locationManager: LocationManager? = null
12 private var navigationManager: NavigationManager? = null
13 private var mqttSession: MqttSession? = null
14 private var mqttSessionListener: MqttSessionListener? = null
18 setupMqttSessionListener()
22 * Initialize SDK and get managers
24 private fun initializeSdk() {
26 // [kotlin_NavigineSdk_getInstance]
28 sdk = NavigineSdk.getInstance()
29 // [kotlin_NavigineSdk_getInstance]
31 // [kotlin_NavigineSdk_setUserHash]
33 sdk?.setUserHash("USER-HASH-HERE")
34 // [kotlin_NavigineSdk_setUserHash]
36 // [kotlin_NavigineSdk_setServer]
37 // Set server URL (optional)
38 sdk?.setServer("https://custom.navigine.com")
39 // [kotlin_NavigineSdk_setServer]
41 // [kotlin_NavigineSdk_getLocationManager]
42 // Get LocationManager for working with locations
43 locationManager = sdk?.getLocationManager()
44 // [kotlin_NavigineSdk_getLocationManager]
46 // [kotlin_NavigineSdk_getNavigationManager]
47 // Get NavigationManager for working with navigation
48 navigationManager = sdk?.getNavigationManager(locationManager)
49 // [kotlin_NavigineSdk_getNavigationManager]
51 // [kotlin_NavigineSdk_getMqttSession]
52 // Create MQTT session for publishing position data
53 mqttSession = sdk?.getMqttSession(navigationManager)
54 // [kotlin_NavigineSdk_getMqttSession]
56 if (mqttSession != null) {
57 println("MqttSession successfully initialized")
59 } catch (e: Exception) {
60 System.err.println("Error initializing SDK: ${e.message}")
65 * Setup MQTT session listener
67 private fun setupMqttSessionListener() {
68 mqttSessionListener = object : MqttSessionListener() {
69 // [kotlin_MqttSessionListener_onConnected]
70 override fun onConnected() {
71 println("MQTT session connected successfully")
73 // [kotlin_MqttSessionListener_onConnected]
75 // [kotlin_MqttSessionListener_onError]
76 override fun onError(error: Error) {
77 System.err.println("MQTT session error: ${error.message}")
79 // [kotlin_MqttSessionListener_onError]
81 // [kotlin_MqttSessionListener_onMessagePublished]
82 override fun onMessagePublished() {
83 println("Message published successfully")
85 // [kotlin_MqttSessionListener_onMessagePublished]
90 * Demonstrate MqttSession methods
92 fun demonstrateMqttSessionMethods() {
93 val session = mqttSession ?: run {
94 System.err.println("MqttSession not initialized")
98 val listener = mqttSessionListener ?: return
100 // [kotlin_MqttSession_addListener]
101 // Add MQTT session listener
102 session.addListener(listener)
103 // [kotlin_MqttSession_addListener]
105 // [kotlin_MqttSession_setSubTopic]
106 // Set MQTT sub-topic for publishing position data
107 // Final topic will be "navigine/mobile/positions/" + subTopic + "/" + deviceId
108 session.setSubTopic("location1")
109 // [kotlin_MqttSession_setSubTopic]
111 // [kotlin_MqttSession_connect]
112 // Connect to MQTT broker
113 // Server: MQTT broker hostname or IP address
114 // Port: MQTT broker port (typically 1883 for non-SSL, 8883 for SSL)
115 // Username: MQTT broker username for authentication
116 // Password: MQTT broker password for authentication
117 session.connect("mqtt.example.com", 1883, "username", "password")
118 // [kotlin_MqttSession_connect]
120 // Wait for connection
123 // [kotlin_MqttSession_publish]
124 // Publish a custom message to a specific MQTT topic
125 // The message will be sent asynchronously and the result will be notified through listener callbacks
126 val customTopic = "custom/device/status"
127 val customMessage = """{"status": "online", "timestamp": ${System.currentTimeMillis()}}"""
128 session.publish(customTopic, customMessage)
129 // [kotlin_MqttSession_publish]
133 * Demonstrate MQTT session with different configurations
135 fun demonstrateMqttSessionConfigurations() {
136 val session = mqttSession ?: run {
137 System.err.println("MqttSession not initialized")
141 println("=== MQTT Session Configurations ===")
143 // Example 1: Connect with default port
144 // [kotlin_MqttSession_setSubTopic]
145 // Set sub-topic. Final topic will be "navigine/mobile/positions/location1/{deviceId}"
146 session.setSubTopic("location1")
147 // [kotlin_MqttSession_setSubTopic]
148 // [kotlin_MqttSession_connect]
149 // Connect to MQTT broker with default port 1883
150 session.connect("mqtt.example.com", 1883, "user", "pass")
151 // [kotlin_MqttSession_connect]
156 // Disconnect before reconnecting with different config
157 // [kotlin_MqttSession_disconnect]
158 // Disconnect from MQTT broker
160 // [kotlin_MqttSession_disconnect]
162 // Example 2: Connect with SSL port
163 // [kotlin_MqttSession_setSubTopic]
164 // Set sub-topic. Final topic will be "navigine/mobile/positions/building-a/{deviceId}"
165 session.setSubTopic("building-a")
166 // [kotlin_MqttSession_setSubTopic]
167 // [kotlin_MqttSession_connect]
168 // Connect to MQTT broker with SSL port 8883
169 session.connect("mqtt-secure.example.com", 8883, "user", "pass")
170 // [kotlin_MqttSession_connect]
175 // Example 3: Connect with different sub-topic
176 // [kotlin_MqttSession_setSubTopic]
177 // Set different sub-topic. Final topic will be "navigine/mobile/positions/floor_2/{deviceId}"
178 session.setSubTopic("floor_2")
179 // [kotlin_MqttSession_setSubTopic]
180 // [kotlin_MqttSession_connect]
181 // Connect to MQTT broker
182 session.connect("mqtt.example.com", 1883, "user", "pass")
183 // [kotlin_MqttSession_connect]
187 * Demonstrate listener management
189 fun demonstrateListenerManagement() {
190 val session = mqttSession ?: run {
191 System.err.println("MqttSession not initialized")
195 println("=== Listener Management ===")
197 // Add multiple listeners
198 val listener1 = object : MqttSessionListener() {
199 override fun onConnected() {
200 println("Listener 1: Connected")
203 override fun onError(error: Error) {
204 System.err.println("Listener 1: Error - ${error.message}")
207 override fun onMessagePublished() {
208 println("Listener 1: Message published")
212 val listener2 = object : MqttSessionListener() {
213 override fun onConnected() {
214 println("Listener 2: Connected")
217 override fun onError(error: Error) {
218 System.err.println("Listener 2: Error - ${error.message}")
221 override fun onMessagePublished() {
222 println("Listener 2: Message published")
226 // [kotlin_MqttSession_addListener]
227 // Add first listener
228 session.addListener(listener1)
229 // [kotlin_MqttSession_addListener]
231 // [kotlin_MqttSession_addListener]
232 // Add second listener
233 session.addListener(listener2)
234 // [kotlin_MqttSession_addListener]
236 // Connect to trigger callbacks
237 // [kotlin_MqttSession_setSubTopic]
238 session.setSubTopic("location1")
239 // [kotlin_MqttSession_setSubTopic]
240 // [kotlin_MqttSession_connect]
241 session.connect("mqtt.example.com", 1883, "user", "pass")
242 // [kotlin_MqttSession_connect]
244 // Wait for connection
247 // [kotlin_MqttSession_publish]
248 // Publish custom messages to different topics
249 session.publish("custom/events", """{"event": "user_action"}""")
250 session.publish("custom/logs", "Application started")
251 // [kotlin_MqttSession_publish]
253 // Wait for messages to be published
256 // [kotlin_MqttSession_removeListener]
257 // Remove first listener
258 session.removeListener(listener1)
259 // [kotlin_MqttSession_removeListener]
261 // [kotlin_MqttSession_removeListener]
262 // Remove second listener
263 session.removeListener(listener2)
264 // [kotlin_MqttSession_removeListener]
271 mqttSession?.let { session ->
272 // [kotlin_MqttSession_removeListener]
273 // Remove MQTT session listener
274 mqttSessionListener?.let { listener ->
275 session.removeListener(listener)
277 // [kotlin_MqttSession_removeListener]
279 // [kotlin_MqttSession_disconnect]
280 // Disconnect from MQTT broker
282 // [kotlin_MqttSession_disconnect]
287 * Main demonstration method
290 println("=== MqttSession Example ===")
292 demonstrateMqttSessionMethods()
293 demonstrateMqttSessionConfigurations()
294 demonstrateListenerManagement()
296 // Wait a bit for connection events
300 println("=== Example completed ===")
305 * Function to run the example
308 val example = MqttSessionExample()