Loading...
Searching...
No Matches
ZoneManagerExample.kt
Go to the documentation of this file.
1import kotlinx.coroutines.delay
2import kotlinx.coroutines.runBlocking
3import kotlinx.coroutines.GlobalScope
4import kotlinx.coroutines.launch
5
6/**
7 * ZoneManager usage example for Kotlin
8 * Demonstrates working with zone detection, event handling, and zone management
9 */
10class ZoneManagerExample {
11 private var sdk: NavigineSdk? = null
12 private var locationManager: LocationManager? = null
13 private var navigationManager: NavigationManager? = null
14 private var zoneManager: ZoneManager? = null
15 private var zoneListener: ZoneListener? = null
16
17 init {
18 initializeSdk()
19 setupZoneListener()
20 }
21
22 /**
23 * Initialize SDK and get managers
24 */
25 private fun initializeSdk() {
26 try {
27 // [kotlin_NavigineSdk_getInstance]
28 // Get SDK instance
29 sdk = NavigineSdk.getInstance()
30 // [kotlin_NavigineSdk_getInstance]
31
32 // [kotlin_NavigineSdk_setUserHash]
33 // Set user hash
34 sdk?.setUserHash("USER-HASH-HERE")
35 // [kotlin_NavigineSdk_setUserHash]
36
37 // [kotlin_NavigineSdk_setServer]
38 // Set server URL (optional)
39 sdk?.setServer("https://custom.navigine.com")
40 // [kotlin_NavigineSdk_setServer]
41
42 // [kotlin_NavigineSdk_getLocationManager]
43 // Get LocationManager for working with locations
44 locationManager = sdk?.getLocationManager()
45 // [kotlin_NavigineSdk_getLocationManager]
46
47 // [kotlin_NavigineSdk_getNavigationManager]
48 // Get NavigationManager for working with navigation
49 navigationManager = sdk?.getNavigationManager(locationManager)
50 // [kotlin_NavigineSdk_getNavigationManager]
51
52 // [kotlin_NavigineSdk_getZoneManager]
53 // Get ZoneManager for working with zones
54 zoneManager = sdk?.getZoneManager(locationManager, navigationManager)
55 // [kotlin_NavigineSdk_getZoneManager]
56
57 if (locationManager != null && navigationManager != null && zoneManager != null) {
58 println("LocationManager, NavigationManager and ZoneManager successfully initialized")
59 }
60 } catch (e: Exception) {
61 System.err.println("Error initializing SDK: ${e.message}")
62 }
63 }
64
65 /**
66 * Setup zone listener
67 */
68 private fun setupZoneListener() {
69 zoneListener = object : ZoneListener() {
70 // [kotlin_ZoneListener_onZoneEvent]
71 override fun onZoneEvent(zoneEvent: ZoneEvent) {
72 println("Zone event detected")
73 demonstrateZoneEventUsage(zoneEvent)
74 }
75 // [kotlin_ZoneListener_onZoneEvent]
76 }
77 }
78
79 /**
80 * Demonstrate ZoneManager methods
81 */
82 fun demonstrateZoneManagerMethods() {
83 val manager = zoneManager ?: run {
84 System.err.println("ZoneManager not initialized")
85 return
86 }
87
88 val listener = zoneListener ?: return
89
90 // [kotlin_ZoneManager_addZoneListener]
91 // Add zone listener
92 manager.addZoneListener(listener)
93 println("Added zone listener")
94 // [kotlin_ZoneManager_addZoneListener]
95
96 // Simulate some time passing for zone events
97 GlobalScope.launch {
98 delay(2000)
99
100 // [kotlin_ZoneManager_removeZoneListener]
101 // Remove zone listener
102 manager.removeZoneListener(listener)
103 println("Removed zone listener")
104 // [kotlin_ZoneManager_removeZoneListener]
105 }
106 }
107
108 /**
109 * Demonstrate ZoneEvent usage
110 */
111 fun demonstrateZoneEventUsage(zoneEvent: ZoneEvent) {
112 if (zoneEvent == null) {
113 System.err.println("ZoneEvent is null")
114 return
115 }
116
117 // [kotlin_ZoneEvent_getType]
118 // Get event type
119 val type = zoneEvent.type
120 println("Zone event type: $type")
121 // [kotlin_ZoneEvent_getType]
122
123 // [kotlin_ZoneEvent_getLocationId]
124 // Get location ID
125 val locationId = zoneEvent.locationId
126 println("Zone location ID: $locationId")
127 // [kotlin_ZoneEvent_getLocationId]
128
129 // [kotlin_ZoneEvent_getSublocationId]
130 // Get sublocation ID
131 val sublocationId = zoneEvent.sublocationId
132 println("Zone sublocation ID: $sublocationId")
133 // [kotlin_ZoneEvent_getSublocationId]
134
135 // [kotlin_ZoneEvent_getId]
136 // Get zone ID
137 val id = zoneEvent.id
138 println("Zone ID: $id")
139 // [kotlin_ZoneEvent_getId]
140
141 // [kotlin_ZoneEvent_getName]
142 // Get zone name
143 val name = zoneEvent.name
144 println("Zone name: $name")
145 // [kotlin_ZoneEvent_getName]
146
147 // [kotlin_ZoneEvent_getAlias]
148 // Get zone alias
149 val alias = zoneEvent.alias
150 println("Zone alias: $alias")
151 // [kotlin_ZoneEvent_getAlias]
152
153 // [kotlin_ZoneEvent_constructor]
154 // Create new zone event
155 val newZoneEvent = ZoneEvent(
156 ZoneEventType.ENTER,
157 12345,
158 1,
159 100,
160 "Test Zone",
161 "test_zone"
162 )
163 println("Created new zone event: ${newZoneEvent.name} (${newZoneEvent.alias})")
164 // [kotlin_ZoneEvent_constructor]
165 }
166
167 /**
168 * Demonstrate ZoneEventType enum values
169 */
170 fun demonstrateZoneEventTypes() {
171 // [kotlin_ZoneEventType_values]
172 // Get all zone event type values
173 val types = ZoneEventType.values()
174 println("Available zone event types:")
175 types.forEach { type ->
176 println(" - $type")
177 }
178 // [kotlin_ZoneEventType_values]
179 }
180
181 /**
182 * Demonstrate advanced zone management features
183 */
184 suspend fun demonstrateAdvancedZoneFeatures() {
185 println("=== Advanced Zone Features ===")
186
187 val manager = zoneManager ?: return
188
189 // Add multiple listeners
190 val listener1 = object : ZoneListener() {
191 override fun onZoneEvent(event: ZoneEvent) {
192 println("Listener 1: Zone event - ${event.name}")
193 }
194 }
195
196 val listener2 = object : ZoneListener() {
197 override fun onZoneEvent(event: ZoneEvent) {
198 println("Listener 2: Zone event - ${event.name}")
199 }
200 }
201
202 // [kotlin_ZoneManager_addZoneListener_2]
203 // Add first zone listener
204 manager.addZoneListener(listener1)
205 println("Added first zone listener")
206 // [kotlin_ZoneManager_addZoneListener_2]
207
208 delay(1000)
209
210 // [kotlin_ZoneManager_addZoneListener_3]
211 // Add second zone listener
212 manager.addZoneListener(listener2)
213 println("Added second zone listener")
214 // [kotlin_ZoneManager_addZoneListener_3]
215
216 // Wait for zone events
217 delay(3000)
218
219 // Remove listeners
220 // [kotlin_ZoneManager_removeZoneListener_1]
221 // Remove first zone listener
222 manager.removeZoneListener(listener1)
223 println("Removed first zone listener")
224 // [kotlin_ZoneManager_removeZoneListener_1]
225
226 delay(1000)
227
228 // [kotlin_ZoneManager_removeZoneListener_2]
229 // Remove second zone listener
230 manager.removeZoneListener(listener2)
231 println("Removed second zone listener")
232 // [kotlin_ZoneManager_removeZoneListener_2]
233 }
234
235 /**
236 * Demonstrate zone event simulation
237 */
238 fun demonstrateZoneEventSimulation() {
239 println("=== Zone Event Simulation ===")
240
241 // Create different types of zone events
242 val simulatedEvents = listOf(
243 ZoneEvent(ZoneEventType.ENTER, 12345, 1, 100, "Entrance Zone", "entrance"),
244 ZoneEvent(ZoneEventType.EXIT, 12345, 1, 100, "Entrance Zone", "entrance"),
245 ZoneEvent(ZoneEventType.ENTER, 12345, 1, 101, "Meeting Room", "meeting_room"),
246 ZoneEvent(ZoneEventType.ENTER, 12345, 1, 102, "Cafeteria", "cafeteria"),
247 ZoneEvent(ZoneEventType.EXIT, 12345, 1, 101, "Meeting Room", "meeting_room"),
248 )
249
250 // Simulate zone events
251 simulatedEvents.forEachIndexed { index, event ->
252 GlobalScope.launch {
253 delay((index + 1) * 1000L)
254 println("Simulated zone event: ${event.type} - ${event.name} (${event.alias})")
255 demonstrateZoneEventUsage(event)
256 }
257 }
258 }
259
260 /**
261 * Demonstrate zone listener management
262 */
263 fun demonstrateZoneListenerManagement() {
264 println("=== Zone Listener Management ===")
265
266 val manager = zoneManager ?: return
267
268 // Create a test listener
269 val testListener = object : ZoneListener() {
270 override fun onZoneEvent(event: ZoneEvent) {
271 println("Test listener received event: ${event.name}")
272 }
273 }
274
275 // Add listener
276 manager.addZoneListener(testListener)
277 println("Added test zone listener")
278
279 // Simulate some time passing
280 GlobalScope.launch {
281 delay(2000)
282
283 // Remove listener
284 manager.removeZoneListener(testListener)
285 println("Removed test zone listener")
286 }
287 }
288
289 /**
290 * Clean up resources
291 */
292 fun cleanup() {
293 val manager = zoneManager
294 val listener = zoneListener
295 if (manager != null && listener != null) {
296 // [kotlin_ZoneManager_removeZoneListener_3]
297 // Remove zone listener
298 manager.removeZoneListener(listener)
299 // [kotlin_ZoneManager_removeZoneListener_3]
300 }
301 }
302
303 /**
304 * Main demonstration method
305 */
306 suspend fun runExample() {
307 println("=== ZoneManager Example ===")
308
309 demonstrateZoneManagerMethods()
310 demonstrateZoneEventTypes()
311 demonstrateZoneListenerManagement()
312 demonstrateAdvancedZoneFeatures()
313 demonstrateZoneEventSimulation()
314
315 // Wait a bit for zone events
316 delay(5000)
317
318 cleanup()
319 println("=== Example completed ===")
320 }
321}
322
323/**
324 * Function to run the example
325 */
326fun main() = runBlocking {
327 val example = ZoneManagerExample()
328 example.runExample()
329}