Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.48 KB | None | 0 0
  1. #import "NOEKabaModule.h"
  2. #import "AppParameters.h"
  3. #import "LegicIDConnectManager.h"
  4. #import "LegicIDConnectFactory.h"
  5. #import "Legic_profile_ids.h"
  6. #import "Legic_property.h"
  7. #import "Legic_property_keys.h"
  8. #import "LegicConnector.h"
  9. #import "Legic_wallet_application.h"
  10. #import "LegicBlePluginTypes.h"
  11. #import "FileSelectionModes.h"
  12. #import "NOEBluetoothManager.h"
  13. #import "NOERegisterDelegate.h"
  14. #import "BleDataHandler.h"
  15. #import <asl.h>
  16.  
  17.  
  18. @implementation NOEKabaModule
  19.  
  20. RCT_EXPORT_MODULE(Kaba);
  21.  
  22. - (NSArray<NSString *> *)supportedEvents {
  23. return @[@"NOTIF_DEBUG", @"SYNC_UPDATE", @"STORE_DATA", @"DOOR_UNLOCKED", @"DOOR_UNLOCK_FAILED"];
  24. }
  25.  
  26. /**
  27. * initialise Manager
  28. */
  29. RCT_REMAP_METHOD(initialiseManager,
  30. initialiseManagerResolver:(RCTPromiseResolveBlock)resolve
  31. rejecter:(RCTPromiseRejectBlock)reject) {
  32.  
  33. /**
  34. * SDK event listeners
  35. */
  36. [[NSNotificationCenter defaultCenter] addObserver:self
  37. selector:@selector(handleDisplayContentNotification:)
  38. name: NOTIFICATION_DISPLAY_CONTENT
  39. object:nil];
  40. [[NSNotificationCenter defaultCenter] addObserver:self
  41. selector:@selector(handleInitalSyncCompleteNotification:)
  42. name:NOTIFICATION_INITIAL_SYNCHRONIZE_COMPLETE
  43. object:nil];
  44. [[NSNotificationCenter defaultCenter] addObserver:self
  45. selector:@selector(handleFinalSyncCompleteNotification:)
  46. name:NOTIFICATION_FINAL_SYNCHRONIZE_COMPLETE
  47. object:nil];
  48. [[NSNotificationCenter defaultCenter] addObserver:self
  49. selector:@selector(handleSyncFailedNotification:)
  50. name:NOTIFICATION_SYNCHRONIZE_FAILED
  51. object:nil];
  52. [[NSNotificationCenter defaultCenter] addObserver:self
  53. selector:@selector(handleCardsUpdatedNotification:)
  54. name:NOTIFICATION_CARDS_UPDATED
  55. object:nil];
  56. [[NSNotificationCenter defaultCenter] addObserver:self
  57. selector:@selector(handleStoreDataCorruptedNotification:)
  58. name:NOTIFICATION_STORE_DATA_CORRUPTED
  59. object:nil];
  60. /**
  61. * LegicConnector initialise
  62. */
  63. long walletId = 46773385;
  64. LegicProfileIds* bleProfile = [[LegicProfileIds alloc] initWithProfileId:PROFILEID_BLE];
  65. NSArray* profileIds = [NSArray arrayWithObjects:
  66. bleProfile,
  67. nil];
  68. @try {
  69. dispatch_async(dispatch_get_main_queue(), ^{
  70. self.manager = [[LegicConnector instance] initialise: walletId profileIds:profileIds];
  71.  
  72. [self.manager setServerURL:@"https://api.legicconnect.com/connect"];
  73. [self.manager setUsername:@"MobNoetic LabTechUser"];
  74. [self.manager setPassword:@"QwIvT7bJgZltlL0YajqVw5Uh/78lad5tmZlEvqF+vio="];
  75.  
  76. [self.manager setLoggingMode:ASL_LEVEL_NOTICE]; // Set to INFO or DEBUG for release so user cannot view SDK logs.
  77. [self.manager setConfigParam:FILE_SELECTION_MODE_PARAM_NAME Value:FILE_SELECTION_MODE_VALUE_PRESELECTED_FILE];
  78.  
  79. NOEBluetoothManager *bluetoothManager = [[NOEBluetoothManager alloc]init];
  80. self.bluetoothManager = bluetoothManager;
  81.  
  82. resolve([self.manager getSDKVersion]);
  83. });
  84. }
  85. @catch (NSException *exception) {
  86. NSLog(@"##KABALOG initialiseManager error %@",exception.reason);
  87. reject(exception.reason, exception.reason, nil);
  88. }
  89.  
  90. };
  91.  
  92. /**
  93. * Check bluetooth status
  94. * Not used !!!
  95. */
  96. RCT_REMAP_METHOD(isBluetoothEnabled,
  97. isBluetoothEnabledResolver:(RCTPromiseResolveBlock)resolve
  98. rejecter:(RCTPromiseRejectBlock)reject) {
  99.  
  100. BOOL isBluetoothEnabled = [[_bluetoothManager getState]isEqualToString:@"on"];
  101. resolve(@(isBluetoothEnabled));
  102. };
  103.  
  104.  
  105. /**
  106. * Check user registration
  107. */
  108. RCT_REMAP_METHOD(isUserRegistered,
  109. isUserRegisteredResolver:(RCTPromiseResolveBlock)resolve
  110. rejecter:(RCTPromiseRejectBlock)reject) {
  111.  
  112. BOOL isRegistered = [_manager isUserRegistered];
  113. resolve(@(isRegistered));
  114. };
  115.  
  116. - (void)sendDebug:(NSString *)message {
  117. [self sendEventWithName:@"NOTIF_DEBUG" body:@"Hello"];
  118. }
  119.  
  120. /**
  121. * Registration
  122. */
  123. RCT_REMAP_METHOD(register,
  124. userID:(NSString *)userID
  125. token:(NSString *)token
  126. registerResolver:(RCTPromiseResolveBlock)resolve
  127. rejecter:(RCTPromiseRejectBlock)reject) {
  128.  
  129. @try {
  130. _resolver = resolve;
  131. _rejecter = reject;
  132. _token = token;
  133. dispatch_async(dispatch_get_main_queue(), ^{
  134. NSArray *info = nil;
  135. LegicConfirmationMethods* confirmationMethod = [[LegicConfirmationMethods alloc] initWithMethod:NONE];
  136. [self.manager registerWallet:self Info:info PublicSEID:userID ConfirmationMethod:confirmationMethod];
  137. NSLog(@"##KABALOG registerWallet done");
  138. });
  139. }
  140. @catch (NSException *exception) {
  141. NSLog(@"##KABALOG dispatch_async error");
  142. reject(exception.reason, exception.reason, nil);
  143. }
  144. }
  145.  
  146. /**
  147. * Complete Registration
  148. */
  149. RCT_REMAP_METHOD(completeRegister,
  150. token:(NSString *)token
  151. completeRegisterResolver:(RCTPromiseResolveBlock)resolve
  152. rejecter:(RCTPromiseRejectBlock)reject)
  153. {
  154. _resolver = resolve;
  155. _rejecter = reject;
  156. _token = token;
  157. @try {
  158. [[self.manager getPersistentStore]saveUserRegistered:true];
  159. [_manager completeRegistration:self WalletToken:token];
  160. }
  161. @catch (NSException *exception) {
  162. reject(exception.reason, exception.reason, nil);
  163. }
  164. }
  165.  
  166. /**
  167. * Unregister
  168. */
  169. RCT_REMAP_METHOD(unregister,
  170. completeRegisterResolver:(RCTPromiseResolveBlock)resolve
  171. rejecter:(RCTPromiseRejectBlock)reject)
  172. {
  173. _resolver = resolve;
  174. _rejecter = reject;
  175. @try {
  176. [_manager unregisterWallet:self];
  177. }
  178. @catch (NSException *exception) {
  179. reject(exception.reason, exception.reason, nil);
  180. }
  181. }
  182.  
  183. /**
  184. * Synchronise
  185. */
  186. RCT_REMAP_METHOD(synchronise,
  187. synchroniseResolver:(RCTPromiseResolveBlock)resolve
  188. rejecter:(RCTPromiseRejectBlock)reject) {
  189. @try {
  190. [_manager synchronize];
  191. resolve(@"Starting to sync.");
  192. /**
  193. * Dispatch sync started event
  194. * @ToDo: check legic sdk event and replace this ??
  195. */
  196. [self handleSyncStartedNotification];
  197. }
  198. @catch (NSException *exception) {
  199. reject(exception.reason, exception.reason, nil);
  200. }
  201. }
  202.  
  203. /**
  204. * Sync Device
  205. */
  206. RCT_REMAP_METHOD(syncDevice,
  207. syncDeviceResolver:(RCTPromiseResolveBlock)resolve
  208. rejecter:(RCTPromiseRejectBlock)reject) {
  209. @try {
  210. [_manager syncDevice];
  211. resolve(@"Starting to sync device.");
  212. NSLog(@"##KABALOG syncDevice");;
  213. }
  214. @catch (NSException *exception) {
  215. reject(exception.reason, exception.reason, nil);
  216. }
  217. }
  218.  
  219. /**
  220. * Get all Key Card/Wallet Applications
  221. */
  222. RCT_REMAP_METHOD(getKeyCards,
  223. getKeyCardsResolver:(RCTPromiseResolveBlock)resolve
  224. rejecter:(RCTPromiseRejectBlock)reject)
  225. {
  226. @try {
  227. NSError *error = nil;
  228. NSArray *keyCardsData = [self getAllWalletApplications];
  229.  
  230. // JSON conversion
  231. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:keyCardsData options:NSJSONWritingPrettyPrinted error:&error];
  232. NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  233. resolve(jsonString);
  234. }
  235. @catch (NSException *exception) {
  236. reject(exception.reason, exception.reason, nil);
  237. }
  238. }
  239.  
  240. /**
  241. * Activate single Key Card / Wallet Application
  242. */
  243. RCT_REMAP_METHOD(activateCard,
  244. cardIndex:(nonnull NSNumber *)cardIndex
  245. activateCardResolver:(RCTPromiseResolveBlock)resolver
  246. rejecter:(RCTPromiseRejectBlock)reject)
  247. {
  248. @try {
  249. [self cardActivation:cardIndex action:@"activate" activationResolver:resolver rejecter:reject];
  250. }
  251. @catch (NSException *exception) {
  252. reject(@"oh error", @"oh error", nil);
  253. }
  254. }
  255.  
  256. /**
  257. * Deactivate single Key Card / Wallet Application
  258. */
  259. RCT_REMAP_METHOD(deactivateCard,
  260. cardIndex:(nonnull NSNumber *)cardIndex
  261. deactivateCardResolver:(RCTPromiseResolveBlock)resolver
  262. rejecter:(RCTPromiseRejectBlock)reject)
  263. {
  264. [self cardActivation:cardIndex action:@"deactivate" activationResolver:resolver rejecter:reject];
  265. }
  266.  
  267. /**
  268. * Deactivate all Key Cards / Wallet Applications
  269. */
  270. RCT_REMAP_METHOD(deactivateAllCards,
  271. deactivateAllCardsResolver:(RCTPromiseResolveBlock)resolver
  272. rejecter:(RCTPromiseRejectBlock)reject)
  273. {
  274. NSError *error = [_manager deactivateAllCards];
  275. if(error == nil)
  276. {
  277. resolver(@"All card deactivated");
  278. }
  279. else
  280. {
  281. reject([error localizedDescription], [error localizedDescription], nil);
  282. }
  283. }
  284.  
  285. /**
  286. * Close wallet / Finalise / Finish
  287. */
  288. RCT_REMAP_METHOD(finaliseManager,
  289. closeWalletResolver:(RCTPromiseResolveBlock)resolver
  290. rejecter:(RCTPromiseRejectBlock)reject)
  291. {
  292. [[LegicConnector instance] finish:resolver rejecter:reject];
  293. }
  294.  
  295. /**
  296. * Activate or deactivate single single Key Card / Wallet Application
  297. */
  298. -(void)cardActivation:(NSNumber *)cardIndex
  299. action:(NSString *)action
  300. activationResolver:(RCTPromiseResolveBlock)resolver
  301. rejecter:(RCTPromiseRejectBlock)reject
  302. {
  303. NSArray *allWallets = [self getAllWalletApplications];
  304. if([cardIndex integerValue] < [allWallets count])
  305. {
  306. id keyCardData = [allWallets objectAtIndex:[cardIndex integerValue]];
  307. NSString *status = keyCardData[@"appStatus"];
  308. if([status isEqual: @"deployed"]){
  309. NSString *walletAppId = keyCardData[@"walletAppId"];
  310. NSNumber *qualifier = keyCardData[@"qualifier"];
  311. NSError *outcomeError;
  312. if([action isEqual:@"activate"]){
  313. outcomeError = [self.manager activateCard:walletAppId Qualifier:qualifier];
  314. }
  315. else
  316. {
  317. outcomeError = [self.manager deactivateCard:walletAppId Qualifier:qualifier];
  318. }
  319. if(outcomeError == nil)
  320. {
  321. resolver(([action isEqual:@"activate"]) ? @"Card activated" : @"Card deactivated");
  322. }
  323. else{
  324. reject([outcomeError localizedDescription], [outcomeError localizedDescription], nil);
  325. }
  326. }
  327. else{
  328. reject(@"Cannot activate/deactivate card that is not in state deployed.", @"Cannot activate/deactivate card that is not in state deployed.", nil);
  329. }
  330. }
  331. else
  332. {
  333. reject(@"Cannot activate/deactivate non-existant card index.", @"Cannot activate/deactivate non-existant card index.", nil);
  334. }
  335. }
  336.  
  337. /**
  338. * Get wallet applications form legic manager
  339. */
  340. -(NSArray *)getAllWalletApplications
  341. {
  342. // Mutable data holders
  343. NSArray *keyCards = [self.manager getAllCards];
  344. NSMutableArray *keyCardsData = [NSMutableArray array];
  345.  
  346. for(LegicWalletApplication* application in keyCards)
  347. {
  348. /**
  349. * @ToDo: rewrite this section with proper json object generator
  350. */
  351. NSString* appStatus = [[application getAppStatus] getStatusString];
  352. NSString* walletAppId = [application getWalletAppId];
  353. NSNumber* qualifier = [application getQualifier];
  354. NSArray* images = [[application getMetadata] getImages];
  355. NSString* parentId = [application getParentId];
  356. NSString* metadataVersion = [application getMetadataVersion];
  357. NSString* techName = [[application getTechnologyName] getTechnologyNameString];
  358. NSString* SEType = [[application getSEType] getSETypeString];
  359.  
  360. NSMutableDictionary *keyCardData = [NSMutableDictionary dictionary];
  361. [keyCardData setObject:(appStatus) ? appStatus : @"" forKey: @"appStatus"];
  362. [keyCardData setObject:(walletAppId) ? walletAppId : @"" forKey: @"walletAppId"];
  363. [keyCardData setObject:(qualifier) ? qualifier : @"" forKey: @"qualifier"];
  364. [keyCardData setObject:(images) ? images : @"" forKey: @"images"]; // replace with empty array
  365. [keyCardData setObject:(metadataVersion) ? metadataVersion : @"" forKey: @"metadataVersion"];
  366. [keyCardData setObject:(techName) ? techName : @"" forKey: @"techName"];
  367. [keyCardData setObject:(SEType) ? SEType : @"" forKey: @"SEType"];
  368. [keyCardData setObject:(parentId) ? parentId : @"" forKey: @"parentId"];
  369.  
  370. // Metadata
  371. LegicWalletMetadata *metadata = [application getMetadata];
  372. if(metadata){
  373. NSString* name = [metadata getName];
  374. NSString* companyName = [metadata getCompanyName];
  375. // NSData* iconData = [metadata getIconData]; // for now we don't need this & NSData conversion not possible with this method
  376. NSString* validFromDate = [metadata getValidFromDate];
  377. NSString* validToDate = [metadata getValidToDate];
  378. NSString* category = [metadata getCategory];
  379. NSArray* metaImages = [metadata getImages];
  380. NSString* remarks = [metadata getRemarks];
  381. NSString* creatorUserName = [metadata getCreatorUserName];
  382. NSNumber* creatorTimestamp = [metadata getCreatorTimestamp];
  383. NSString* modifierUserName = [metadata getModifierUserName];
  384. NSNumber* modifierTimestamp = [metadata getModifierTimestamp];
  385.  
  386. NSMutableDictionary *keyCardMetaData = [NSMutableDictionary dictionary];
  387. [keyCardMetaData setObject:(name) ? name : @"" forKey: @"name"];
  388. [keyCardMetaData setObject:(companyName) ? companyName : @"" forKey: @"companyName"];
  389. //[keyCardMetaData setObject:(iconData) ? iconData : @"" forKey: @"iconData"];
  390. [keyCardMetaData setObject:(validFromDate) ? validFromDate : @"" forKey: @"validFromDate"];
  391. [keyCardMetaData setObject:(validToDate) ? validToDate : @"" forKey: @"validToDate"];
  392. [keyCardMetaData setObject:(category) ? category : @"" forKey: @"category"];
  393. [keyCardMetaData setObject:(metaImages) ? metaImages : @"" forKey: @"images"]; // replace with empty array
  394. [keyCardMetaData setObject:(remarks) ? remarks : @"" forKey: @"remarks"];
  395. [keyCardMetaData setObject:(creatorUserName) ? creatorUserName : @"" forKey: @"creatorUserName"];
  396. [keyCardMetaData setObject:(creatorTimestamp) ? creatorTimestamp : @"" forKey: @"creatorTimestamp"];
  397. [keyCardMetaData setObject:(modifierUserName) ? modifierUserName : @"" forKey: @"modifierUserName"];
  398. [keyCardMetaData setObject:(modifierTimestamp) ? modifierTimestamp : @"" forKey: @"modifierTimestamp"];
  399.  
  400. NSDictionary *customParams = [metadata getCustomParameters];
  401. NSMutableDictionary *keyCardMetaDataCustomParams = [NSMutableDictionary dictionary];
  402.  
  403. for(NSString *key in [customParams allKeys])
  404. {
  405. [keyCardMetaDataCustomParams setObject:[[customParams objectForKey:key]objectAtIndex:1] forKey:[key lowercaseString]];
  406. }
  407. // Set custom params to meta NSdic.
  408. [keyCardMetaData setObject:keyCardMetaDataCustomParams forKey: @"customParameters"];
  409.  
  410. // Set meta data to main NSdic.
  411. [keyCardData setObject:keyCardMetaData forKey: @"metadata"];
  412.  
  413. // Push to main keysData NSArray
  414. [keyCardsData addObject:keyCardData];
  415. }
  416. }
  417. return keyCardsData;
  418. }
  419.  
  420. /**
  421. * SDK delegate callbacks
  422. */
  423. -(void)success:(BOOL)alreadyRegistered
  424. {
  425. NSString* registered = @"Not Already Registered.";
  426. if(alreadyRegistered)
  427. {
  428. NSLog(@"##KABALOG Already Registered");
  429. registered = @"Already Registered.";
  430. }
  431. else {
  432. NSLog(@"##KABALOG Not Already Registered");
  433. }
  434. self.resolver(self.token);
  435. }
  436.  
  437. -(void)fail:(LegicStatus *)status
  438. {
  439. self.rejecter([status getDescription], [status getDescription], nil);
  440. NSLog(@"##KABALOG Registere error %@", [status getDescription]);
  441. //[self checkRegistration];
  442. }
  443.  
  444. -(void)result:(BOOL)successful status:(LegicStatus *)status
  445. {
  446. if(!successful)
  447. {
  448. NSString* title = NSLocalizedString(@"connection_error_title", @"Connection error title");
  449. NSString* message = [NSString stringWithFormat:@"%ld, %@", (long)[status getCode], [status getDescription]];
  450. self.rejecter(title, message, nil);
  451. }
  452. else
  453. {
  454. self.resolver(@"Success");
  455. }
  456. }
  457.  
  458. -(void)token:(NSString *)token
  459. {
  460. if(token != nil)
  461. {
  462. }
  463. }
  464.  
  465. /**
  466. * SDK Listener callbacks
  467. */
  468. -(void)handleDisplayContentNotification:(NSNotification*)notification
  469. {
  470.  
  471. NSDictionary *userInfo = [notification userInfo];
  472. NSData* returnedData = [userInfo objectForKey:BLE_MESSAGE];
  473. NSNumber *objecCode = [userInfo objectForKey:BLE_CODE];
  474.  
  475. NSLog(@"##KABALOG BLE Data from BLE: %@, Code: %@ intValue: %d", returnedData, objecCode, objecCode.intValue);
  476.  
  477. switch(objecCode.intValue)
  478. {
  479. case PluginMessageTypeIdcMessage:
  480. {
  481. // This is a message returned by lock once it has evaluated the digital key credential.
  482. // It allows UI to get information about the process from Lock for example unlock success or deny,
  483. // error code if deny, first access information, battery status and voltage and others as defines by lock.
  484. BleDataHandler *handler = [[BleDataHandler alloc] initWithCode:objecCode.intValue Message:returnedData];
  485.  
  486. if([handler isAccessGranted])
  487. {
  488. NSLog(@"##KABALOG BLE Access Granted!\n");
  489. [self handleDoorUnlockedNotification];
  490. }
  491. else
  492. {
  493. // When access not granted can also get a handle of the door lock error code through getAccessError of BleDataHandler
  494. NSLog(@"##KABALOG BLE Access Not Granted!\n");
  495. [self handleDoorUnlockFailedNotification];
  496. }
  497.  
  498. NSLog(@"##KABALOG BLE Access %@", [handler getMessageString]);
  499.  
  500. break;
  501. }
  502. case PluginMessageTypeBluetoothState:
  503. {
  504. // Bluetooth state change
  505. E_LegicBlePluginBLEState stateCode = (E_LegicBlePluginBLEState)*(const unsigned char*)[returnedData bytes];
  506. if(stateCode == PluginBLEStateErrorBleNotActivated || stateCode == PluginBLEStateErrorGeneral)
  507. {
  508. // Display something to the user to tell him that BLE has been deactivated or theres a general BLE error
  509. NSLog(@"##KABALOG BLE has been deactivated or theres a general BLE error");
  510. }
  511. break;
  512. }
  513. case PluginMessageTypeProjectState:
  514. {
  515. // Do not need to handle this yet.
  516. break;
  517. }
  518. case PluginMessageTypeIdcPolling:
  519. {
  520. // Do not need to handle this yet.
  521. break;
  522. }
  523. case PluginMessageTypeIdcFileWasRead:
  524. {
  525. // Digital Key was read by lock but not yet evaluated. At this point lock is
  526. // asking for UI to grant permission to evaluate the credential and unlock if successful.
  527. unsigned char value[3] = { 0, 1, 1 };
  528. NSData* dataToSend = [NSData dataWithBytes:value length:3];
  529. //[[SDKManager instance] sendMessageToBLEReader:0 data:dataToSend];
  530. [self.manager sendMessageToBLEReader:0 Message:dataToSend];
  531. break;
  532. }
  533. }
  534.  
  535. }
  536.  
  537.  
  538. -(void)handleSyncStartedNotification
  539. {
  540. NSLog(@"##KABALOG handleSyncStartedNotification notification");
  541. [self sendEventWithName:@"SYNC_UPDATE" body:@{@"status": @"SYNC_STARTED"}];
  542. }
  543.  
  544. -(void)handleInitalSyncCompleteNotification:(NSNotification*)notification
  545.  
  546. {
  547. NSLog(@"##KABALOG handleInitalSyncCompleteNotification notification");
  548. [self sendEventWithName:@"SYNC_UPDATE" body:@{@"status": @"INITIAL_SYNC_COMPLETED"}];
  549. }
  550.  
  551. -(void)handleFinalSyncCompleteNotification:(NSNotification*)notification
  552.  
  553. {
  554. NSLog(@"##KABALOG handleFinalSyncCompleteNotification notification");
  555. [self sendEventWithName:@"SYNC_UPDATE" body:@{@"status": @"SYNC_COMPLETED"}];
  556. }
  557.  
  558. -(void)handleSyncFailedNotification:(NSNotification*)notification
  559. {
  560. NSLog(@"##KABALOG handleSyncFailedNotification notification");
  561. [self sendEventWithName:@"SYNC_UPDATE" body:@{@"status": @"SYNC_FAILED"}];
  562. }
  563.  
  564. -(void)handleCardsUpdatedNotification:(NSNotification*)notification
  565. {
  566. NSLog(@"##KABALOG handleCardsUpdatedNotification notification");
  567. [self sendEventWithName:@"SYNC_UPDATE" body:@{@"status": @"SYNC_CARDS_UPDATED"}];
  568. }
  569.  
  570. -(void)handleStoreDataCorruptedNotification:(NSNotification*)notification
  571. {
  572. NSLog(@"##KABALOG handleStoreDataCorruptedNotification notification");
  573. [self sendEventWithName:@"STORE_DATA" body:@{@"status": @"STORE_DATA_CORRUPTED"}];
  574. }
  575.  
  576. -(void)handleDoorUnlockedNotification
  577. {
  578. NSLog(@"##KABALOG handleStoreDataCorruptedNotification notification");
  579. [self sendEventWithName:@"DOOR_UNLOCKED" body:@{@"status": @"Access granted"}];
  580. }
  581.  
  582. -(void)handleDoorUnlockFailedNotification
  583. {
  584. NSLog(@"##KABALOG handleDoorUnlockFailedNotification notification");
  585. [self sendEventWithName:@"DOOR_UNLOCK_FAILED" body:@{@"status": @"Access denied"}];
  586. }
  587.  
  588. @end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement