Loading...
Searching...
No Matches
ZoneManagerExample.m
Go to the documentation of this file.
2
7@implementation ZoneManagerExample
8
9- (instancetype)init {
10 self = [super init];
11 if (self) {
12 [self initializeSdk];
13 [self setupZoneListener];
14 }
15 return self;
16}
17
21- (void)initializeSdk {
22 @try {
23 // [objc_NavigineSdk_getInstance]
24 // Get SDK instance
25 self.sdk = [NCNavigineSdk getInstance];
26 // [objc_NavigineSdk_getInstance]
27
28 // [objc_NavigineSdk_setUserHash]
29 // Set user hash
30 [self.sdk setUserHash:@"USER-HASH-HERE"];
31 // [objc_NavigineSdk_setUserHash]
32
33 // [objc_NavigineSdk_setServer]
34 // Set server URL (optional)
35 [self.sdk setServer:@"https://custom.navigine.com"];
36 // [objc_NavigineSdk_setServer]
37
38 // [objc_NavigineSdk_getLocationManager]
39 // Get LocationManager for working with locations
40 self.locationManager = [self.sdk getLocationManager];
41 // [objc_NavigineSdk_getLocationManager]
42
43 // [objc_NavigineSdk_getNavigationManager]
44 // Get NavigationManager for working with navigation
45 self.navigationManager = [self.sdk getNavigationManager:self.locationManager];
46 // [objc_NavigineSdk_getNavigationManager]
47
48 // [objc_NavigineSdk_getZoneManager]
49 // Get ZoneManager for working with zones
50 self.zoneManager = [self.sdk getZoneManager:self.locationManager navigationManager:self.navigationManager];
51 // [objc_NavigineSdk_getZoneManager]
52
53 if (self.locationManager != nil && self.navigationManager != nil && self.zoneManager != nil) {
54 NSLog(@"LocationManager, NavigationManager and ZoneManager successfully initialized");
55 }
56 } @catch (NSException *exception) {
57 NSLog(@"Error initializing SDK: %@", exception.reason);
58 }
59}
60
64- (void)setupZoneListener {
65 self.zoneListener = [[ZoneListenerImpl alloc] initWithExample:self];
66}
67
71- (void)demonstrateZoneManagerMethods {
72 if (self.zoneManager == nil) {
73 NSLog(@"ZoneManager not initialized");
74 return;
75 }
76
77 // [objc_ZoneManager_addZoneListener]
78 // Add zone listener
79 [self.zoneManager addZoneListener:self.zoneListener];
80 NSLog(@"Added zone listener");
81 // [objc_ZoneManager_addZoneListener]
82
83 // Simulate some time passing for zone events
84 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
85 // [objc_ZoneManager_removeZoneListener]
86 // Remove zone listener
87 [self.zoneManager removeZoneListener:self.zoneListener];
88 NSLog(@"Removed zone listener");
89 // [objc_ZoneManager_removeZoneListener]
90 });
91}
92
96- (void)demonstrateZoneEventUsage:(NCZoneEvent *)zoneEvent {
97 if (zoneEvent == nil) {
98 NSLog(@"ZoneEvent is nil");
99 return;
100 }
101
102 // [objc_ZoneEvent_getType]
103 // Get event type
104 NCZoneEventType type = zoneEvent.type;
105 NSLog(@"Zone event type: %ld", (long)type);
106 // [objc_ZoneEvent_getType]
107
108 // [objc_ZoneEvent_getLocationId]
109 // Get location ID
110 int32_t locationId = zoneEvent.locationId;
111 NSLog(@"Zone location ID: %d", locationId);
112 // [objc_ZoneEvent_getLocationId]
113
114 // [objc_ZoneEvent_getSublocationId]
115 // Get sublocation ID
116 int32_t sublocationId = zoneEvent.sublocationId;
117 NSLog(@"Zone sublocation ID: %d", sublocationId);
118 // [objc_ZoneEvent_getSublocationId]
119
120 // [objc_ZoneEvent_getId]
121 // Get zone ID
122 int32_t id = zoneEvent.id;
123 NSLog(@"Zone ID: %d", id);
124 // [objc_ZoneEvent_getId]
125
126 // [objc_ZoneEvent_getName]
127 // Get zone name
128 NSString *name = zoneEvent.name;
129 NSLog(@"Zone name: %@", name);
130 // [objc_ZoneEvent_getName]
131
132 // [objc_ZoneEvent_getAlias]
133 // Get zone alias
134 NSString *alias = zoneEvent.alias;
135 NSLog(@"Zone alias: %@", alias);
136 // [objc_ZoneEvent_getAlias]
137
138 // [objc_ZoneEvent_constructor]
139 // Create new zone event
140 NCZoneEvent *newZoneEvent = [[NCZoneEvent alloc] initWithType:NCZoneEventTypeEnter
141 locationId:12345
142 sublocationId:1
143 id:100
144 name:@"Test Zone"
145 alias:@"test_zone"];
146 NSLog(@"Created new zone event: %@ (%@)", newZoneEvent.name, newZoneEvent.alias);
147 // [objc_ZoneEvent_constructor]
148}
149
153- (void)demonstrateZoneEventTypes {
154 // [objc_ZoneEventType_values]
155 // Get all zone event type values
156 NSLog(@"Available zone event types:");
157 NSLog(@" - NCZoneEventTypeEnter: %ld", (long)NCZoneEventTypeEnter);
158 NSLog(@" - NCZoneEventTypeExit: %ld", (long)NCZoneEventTypeExit);
159 // [objc_ZoneEventType_values]
160}
161
165- (void)demonstrateAdvancedZoneFeatures {
166 NSLog(@"=== Advanced Zone Features ===");
167
168 if (self.zoneManager == nil) {
169 return;
170 }
171
172 // Add multiple listeners
173 ZoneListenerImpl *listener1 = [[ZoneListenerImpl alloc] initWithExample:self];
174 ZoneListenerImpl *listener2 = [[ZoneListenerImpl alloc] initWithExample:self];
175
176 // [objc_ZoneManager_addZoneListener_2]
177 // Add first zone listener
178 [self.zoneManager addZoneListener:listener1];
179 NSLog(@"Added first zone listener");
180 // [objc_ZoneManager_addZoneListener_2]
181
182 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
183 // [objc_ZoneManager_addZoneListener_3]
184 // Add second zone listener
185 [self.zoneManager addZoneListener:listener2];
186 NSLog(@"Added second zone listener");
187 // [objc_ZoneManager_addZoneListener_3]
188
189 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
190 // Remove listeners
191 // [objc_ZoneManager_removeZoneListener_1]
192 // Remove first zone listener
193 [self.zoneManager removeZoneListener:listener1];
194 NSLog(@"Removed first zone listener");
195 // [objc_ZoneManager_removeZoneListener_1]
196
197 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
198 // [objc_ZoneManager_removeZoneListener_2]
199 // Remove second zone listener
200 [self.zoneManager removeZoneListener:listener2];
201 NSLog(@"Removed second zone listener");
202 // [objc_ZoneManager_removeZoneListener_2]
203 });
204 });
205 });
206}
207
211- (void)demonstrateZoneEventSimulation {
212 NSLog(@"=== Zone Event Simulation ===");
213
214 // Create different types of zone events
215 NSArray<NCZoneEvent *> *simulatedEvents = @[
216 [[NCZoneEvent alloc] initWithType:NCZoneEventTypeEnter locationId:12345 sublocationId:1 id:100 name:@"Entrance Zone" alias:@"entrance"],
217 [[NCZoneEvent alloc] initWithType:NCZoneEventTypeExit locationId:12345 sublocationId:1 id:100 name:@"Entrance Zone" alias:@"entrance"],
218 [[NCZoneEvent alloc] initWithType:NCZoneEventTypeEnter locationId:12345 sublocationId:1 id:101 name:@"Meeting Room" alias:@"meeting_room"],
219 [[NCZoneEvent alloc] initWithType:NCZoneEventTypeEnter locationId:12345 sublocationId:1 id:102 name:@"Cafeteria" alias:@"cafeteria"],
220 [[NCZoneEvent alloc] initWithType:NCZoneEventTypeExit locationId:12345 sublocationId:1 id:101 name:@"Meeting Room" alias:@"meeting_room"],
221 ];
222
223 // Simulate zone events
224 for (int i = 0; i < simulatedEvents.count; i++) {
225 NCZoneEvent *event = simulatedEvents[i];
226 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((i + 1) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
227 NSLog(@"Simulated zone event: %ld - %@ (%@)", (long)event.type, event.name, event.alias);
228 [self demonstrateZoneEventUsage:event];
229 });
230 }
231}
232
236- (void)demonstrateZoneListenerManagement {
237 NSLog(@"=== Zone Listener Management ===");
238
239 if (self.zoneManager == nil) {
240 return;
241 }
242
243 // Create a test listener
244 ZoneListenerImpl *testListener = [[ZoneListenerImpl alloc] initWithExample:self];
245
246 // Add listener
247 [self.zoneManager addZoneListener:testListener];
248 NSLog(@"Added test zone listener");
249
250 // Simulate some time passing
251 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
252 // Remove listener
253 [self.zoneManager removeZoneListener:testListener];
254 NSLog(@"Removed test zone listener");
255 });
256}
257
261- (void)cleanup {
262 if (self.zoneManager != nil && self.zoneListener != nil) {
263 // [objc_ZoneManager_removeZoneListener_3]
264 // Remove zone listener
265 [self.zoneManager removeZoneListener:self.zoneListener];
266 // [objc_ZoneManager_removeZoneListener_3]
267 }
268}
269
273- (void)runExample {
274 NSLog(@"=== ZoneManager Example ===");
275
276 [self demonstrateZoneManagerMethods];
277 [self demonstrateZoneEventTypes];
278 [self demonstrateZoneListenerManagement];
279 [self demonstrateAdvancedZoneFeatures];
280 [self demonstrateZoneEventSimulation];
281
282 // Wait a bit for zone events
283 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
284 [self cleanup];
285 NSLog(@"=== Example completed ===");
286 });
287}
288
289@end
290
294@interface ZoneListenerImpl : NSObject <NCZoneListener>
295
296@property (nonatomic, weak) ZoneManagerExample *example;
297
298- (instancetype)initWithExample:(ZoneManagerExample *)example;
299
300@end
301
302@implementation ZoneListenerImpl
303
304- (instancetype)initWithExample:(ZoneManagerExample *)example {
305 self = [super init];
306 if (self) {
307 self.example = example;
308 }
309 return self;
310}
311
312// [objc_ZoneListener_onZoneEvent]
313- (void)onZoneEvent:(NCZoneEvent *)zoneEvent {
314 NSLog(@"Zone event detected");
315 [self.example demonstrateZoneEventUsage:zoneEvent];
316}
317// [objc_ZoneListener_onZoneEvent]
318
319@end
320
324int main(int argc, const char * argv[]) {
325 @autoreleasepool {
326 ZoneManagerExample *example = [[ZoneManagerExample alloc] init];
327 [example runExample];
328
329 // Keep the app running for a while to see the output
330 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10.0]];
331 }
332 return 0;
333}