Loading...
Searching...
No Matches
ZoneManagerExample.swift
Go to the documentation of this file.
1import Foundation
2
3/**
4 * ZoneManager usage example for Swift
5 * Demonstrates working with zone detection, event handling, and zone management
6 */
7class ZoneManagerExample: NSObject {
8 private var sdk: NavigineSdk?
9 private var locationManager: LocationManager?
10 private var navigationManager: NavigationManager?
11 private var zoneManager: ZoneManager?
12 private var zoneListener: ZoneListener?
13
14 override init() {
15 super.init()
16 initializeSdk()
17 setupZoneListener()
18 }
19
20 /**
21 * Initialize SDK and get managers
22 */
23 private func initializeSdk() {
24 do {
25 // [swift_NavigineSdk_getInstance]
26 // Get SDK instance
27 sdk = NavigineSdk.getInstance()
28 // [swift_NavigineSdk_getInstance]
29
30 // [swift_NavigineSdk_setUserHash]
31 // Set user hash
32 sdk?.setUserHash("USER-HASH-HERE")
33 // [swift_NavigineSdk_setUserHash]
34
35 // [swift_NavigineSdk_setServer]
36 // Set server URL (optional)
37 sdk?.setServer("https://custom.navigine.com")
38 // [swift_NavigineSdk_setServer]
39
40 // [swift_NavigineSdk_getLocationManager]
41 // Get LocationManager for working with locations
42 locationManager = sdk?.getLocationManager()
43 // [swift_NavigineSdk_getLocationManager]
44
45 // [swift_NavigineSdk_getNavigationManager]
46 // Get NavigationManager for working with navigation
47 navigationManager = sdk?.getNavigationManager(locationManager)
48 // [swift_NavigineSdk_getNavigationManager]
49
50 // [swift_NavigineSdk_getZoneManager]
51 // Get ZoneManager for working with zones
52 zoneManager = sdk?.getZoneManager(locationManager, navigationManager: navigationManager)
53 // [swift_NavigineSdk_getZoneManager]
54
55 if let locationManager = locationManager, let navigationManager = navigationManager, let zoneManager = zoneManager {
56 print("LocationManager, NavigationManager and ZoneManager successfully initialized")
57 }
58 } catch {
59 print("Error initializing SDK: \‍(error)")
60 }
61 }
62
63 /**
64 * Setup zone listener
65 */
66 private func setupZoneListener() {
67 zoneListener = ZoneListenerImpl(example: self)
68 }
69
70 /**
71 * Demonstrate ZoneManager methods
72 */
73 func demonstrateZoneManagerMethods() {
74 guard let manager = zoneManager, let listener = zoneListener else {
75 print("ZoneManager not initialized")
76 return
77 }
78
79 // [swift_ZoneManager_addZoneListener]
80 // Add zone listener
81 manager.addZoneListener(listener)
82 print("Added zone listener")
83 // [swift_ZoneManager_addZoneListener]
84
85 // Simulate some time passing for zone events
86 DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
87 // [swift_ZoneManager_removeZoneListener]
88 // Remove zone listener
89 manager.removeZoneListener(listener)
90 print("Removed zone listener")
91 // [swift_ZoneManager_removeZoneListener]
92 }
93 }
94
95 /**
96 * Demonstrate ZoneEvent usage
97 */
98 func demonstrateZoneEventUsage(_ zoneEvent: ZoneEvent) {
99 guard let zoneEvent = zoneEvent else {
100 print("ZoneEvent is nil")
101 return
102 }
103
104 // [swift_ZoneEvent_getType]
105 // Get event type
106 let type = zoneEvent.type
107 print("Zone event type: \‍(type)")
108 // [swift_ZoneEvent_getType]
109
110 // [swift_ZoneEvent_getLocationId]
111 // Get location ID
112 let locationId = zoneEvent.locationId
113 print("Zone location ID: \‍(locationId)")
114 // [swift_ZoneEvent_getLocationId]
115
116 // [swift_ZoneEvent_getSublocationId]
117 // Get sublocation ID
118 let sublocationId = zoneEvent.sublocationId
119 print("Zone sublocation ID: \‍(sublocationId)")
120 // [swift_ZoneEvent_getSublocationId]
121
122 // [swift_ZoneEvent_getId]
123 // Get zone ID
124 let id = zoneEvent.id
125 print("Zone ID: \‍(id)")
126 // [swift_ZoneEvent_getId]
127
128 // [swift_ZoneEvent_getName]
129 // Get zone name
130 let name = zoneEvent.name
131 print("Zone name: \‍(name)")
132 // [swift_ZoneEvent_getName]
133
134 // [swift_ZoneEvent_getAlias]
135 // Get zone alias
136 let alias = zoneEvent.alias
137 print("Zone alias: \‍(alias)")
138 // [swift_ZoneEvent_getAlias]
139
140 // [swift_ZoneEvent_constructor]
141 // Create new zone event
142 let newZoneEvent = ZoneEvent(type: .enter, locationId: 12345, sublocationId: 1, id: 100, name: "Test Zone", alias: "test_zone")
143 print("Created new zone event: \‍(newZoneEvent.name) (\‍(newZoneEvent.alias))")
144 // [swift_ZoneEvent_constructor]
145 }
146
147 /**
148 * Demonstrate ZoneEventType enum values
149 */
150 func demonstrateZoneEventTypes() {
151 // [swift_ZoneEventType_values]
152 // Get all zone event type values
153 print("Available zone event types:")
154 print(" - ZoneEventType.enter: \‍(ZoneEventType.enter)")
155 print(" - ZoneEventType.exit: \‍(ZoneEventType.exit)")
156 // [swift_ZoneEventType_values]
157 }
158
159 /**
160 * Demonstrate advanced zone management features
161 */
162 func demonstrateAdvancedZoneFeatures() {
163 print("=== Advanced Zone Features ===")
164
165 guard let manager = zoneManager else {
166 return
167 }
168
169 // Add multiple listeners
170 let listener1 = ZoneListenerImpl(example: self)
171 let listener2 = ZoneListenerImpl(example: self)
172
173 // [swift_ZoneManager_addZoneListener_2]
174 // Add first zone listener
175 manager.addZoneListener(listener1)
176 print("Added first zone listener")
177 // [swift_ZoneManager_addZoneListener_2]
178
179 DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
180 // [swift_ZoneManager_addZoneListener_3]
181 // Add second zone listener
182 manager.addZoneListener(listener2)
183 print("Added second zone listener")
184 // [swift_ZoneManager_addZoneListener_3]
185
186 DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
187 // Remove listeners
188 // [swift_ZoneManager_removeZoneListener_1]
189 // Remove first zone listener
190 manager.removeZoneListener(listener1)
191 print("Removed first zone listener")
192 // [swift_ZoneManager_removeZoneListener_1]
193
194 DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
195 // [swift_ZoneManager_removeZoneListener_2]
196 // Remove second zone listener
197 manager.removeZoneListener(listener2)
198 print("Removed second zone listener")
199 // [swift_ZoneManager_removeZoneListener_2]
200 }
201 }
202 }
203 }
204
205 /**
206 * Demonstrate zone event simulation
207 */
208 func demonstrateZoneEventSimulation() {
209 print("=== Zone Event Simulation ===")
210
211 // Create different types of zone events
212 let simulatedEvents: [ZoneEvent] = [
213 ZoneEvent(type: .enter, locationId: 12345, sublocationId: 1, id: 100, name: "Entrance Zone", alias: "entrance"),
214 ZoneEvent(type: .exit, locationId: 12345, sublocationId: 1, id: 100, name: "Entrance Zone", alias: "entrance"),
215 ZoneEvent(type: .enter, locationId: 12345, sublocationId: 1, id: 101, name: "Meeting Room", alias: "meeting_room"),
216 ZoneEvent(type: .enter, locationId: 12345, sublocationId: 1, id: 102, name: "Cafeteria", alias: "cafeteria"),
217 ZoneEvent(type: .exit, locationId: 12345, sublocationId: 1, id: 101, name: "Meeting Room", alias: "meeting_room"),
218 ]
219
220 // Simulate zone events
221 for (index, event) in simulatedEvents.enumerated() {
222 DispatchQueue.main.asyncAfter(deadline: .now() + Double(index + 1)) {
223 print("Simulated zone event: \‍(event.type) - \‍(event.name) (\‍(event.alias))")
224 self.demonstrateZoneEventUsage(event)
225 }
226 }
227 }
228
229 /**
230 * Demonstrate zone listener management
231 */
232 func demonstrateZoneListenerManagement() {
233 print("=== Zone Listener Management ===")
234
235 guard let manager = zoneManager else {
236 return
237 }
238
239 // Create a test listener
240 let testListener = ZoneListenerImpl(example: self)
241
242 // Add listener
243 manager.addZoneListener(testListener)
244 print("Added test zone listener")
245
246 // Simulate some time passing
247 DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
248 // Remove listener
249 manager.removeZoneListener(testListener)
250 print("Removed test zone listener")
251 }
252 }
253
254 /**
255 * Clean up resources
256 */
257 func cleanup() {
258 if let manager = zoneManager, let listener = zoneListener {
259 // [swift_ZoneManager_removeZoneListener_3]
260 // Remove zone listener
261 manager.removeZoneListener(listener)
262 // [swift_ZoneManager_removeZoneListener_3]
263 }
264 }
265
266 /**
267 * Main demonstration method
268 */
269 func runExample() {
270 print("=== ZoneManager Example ===")
271
272 demonstrateZoneManagerMethods()
273 demonstrateZoneEventTypes()
274 demonstrateZoneListenerManagement()
275 demonstrateAdvancedZoneFeatures()
276 demonstrateZoneEventSimulation()
277
278 // Wait a bit for zone events
279 DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
280 self.cleanup()
281 print("=== Example completed ===")
282 }
283 }
284}
285
286/**
287 * ZoneListener implementation
288 */
289class ZoneListenerImpl: NSObject, ZoneListener {
290 private weak var example: ZoneManagerExample?
291
292 init(example: ZoneManagerExample) {
293 self.example = example
294 super.init()
295 }
296
297 // [swift_ZoneListener_onZoneEvent]
298 func onZoneEvent(_ zoneEvent: ZoneEvent) {
299 print("Zone event detected")
300 example?.demonstrateZoneEventUsage(zoneEvent)
301 }
302 // [swift_ZoneListener_onZoneEvent]
303}
304
305/**
306 * Function to run the example
307 */
308func main() {
309 let example = ZoneManagerExample()
310 example.runExample()
311
312 // Keep the app running for a while to see the output
313 RunLoop.main.run(until: Date().addingTimeInterval(10.0))
314}
315
316// Run the example
317main()