#import "RCTStatus.h" #import "RCTBridge.h" #import "RCTEventDispatcher.h" #import static bool isStatusInitialized; static RCTBridge *bridge; @implementation Status{ } -(RCTBridge *)bridge { return bridge; } -(void)setBridge:(RCTBridge *)newBridge { bridge = newBridge; } RCT_EXPORT_MODULE(); //////////////////////////////////////////////////////////////////// #pragma mark - Jails functions //////////////////////////////////////////////////////////////////// initJail RCT_EXPORT_METHOD(initJail: (NSString *) js callback:(RCTResponseSenderBlock)callback) { #if DEBUG NSLog(@"InitJail() method called"); #endif InitJail((char *) [js UTF8String]); callback(@[[NSNull null]]); } //////////////////////////////////////////////////////////////////// parseJail RCT_EXPORT_METHOD(parseJail:(NSString *)chatId js:(NSString *)js callback:(RCTResponseSenderBlock)callback) { #if DEBUG NSLog(@"ParseJail() method called"); #endif char * result = Parse((char *) [chatId UTF8String], (char *) [js UTF8String]); callback(@[[NSString stringWithUTF8String: result]]); } //////////////////////////////////////////////////////////////////// callJail RCT_EXPORT_METHOD(callJail:(NSString *)chatId path:(NSString *)path params:(NSString *)params callback:(RCTResponseSenderBlock)callback) { #if DEBUG NSLog(@"CallJail() method called"); #endif dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ char * result = Call((char *) [chatId UTF8String], (char *) [path UTF8String], (char *) [params UTF8String]); dispatch_async( dispatch_get_main_queue(), ^{ callback(@[[NSString stringWithUTF8String: result]]); }); }); } //////////////////////////////////////////////////////////////////// #pragma mark - startNode //////////////////////////////////////////////////////////////////// startNode RCT_EXPORT_METHOD(startNode:(RCTResponseSenderBlock)onResultCallback) { #if DEBUG NSLog(@"StartNode() method called"); #endif if (!isStatusInitialized){ isStatusInitialized = true; NSError *error = nil; NSURL *folderName =[[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"ethereum"]; if (![[NSFileManager defaultManager] fileExistsAtPath:folderName.path]) [[NSFileManager defaultManager] createDirectoryAtPath:folderName.path withIntermediateDirectories:NO attributes:nil error:&error]; if (error){ NSLog(@"error %@", error); }else NSLog(@"folderName: %@", folderName); NSString *peer1 = @"enode://e15869ba08a25e49be7568b951e15af5d77a472c8e4104a14a4951f99936d65f91240d5b5f23674aee44f1ac09d8adfc6a9bff75cd8c2df73a26442f313f2da4@162.243.63.248:30303"; NSString *peer2 = @"enode://ad61a21f83f12b0ca494611650f5e4b6427784e7c62514dcb729a3d65106de6f12836813acf39bdc35c12ecfd0e230723678109fd4e7091ce389697bd7da39b4@139.59.212.114:30303"; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { StartNode((char *) [folderName.path UTF8String]); }); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { AddPeer((char *) [peer1 UTF8String]); AddPeer((char *) [peer2 UTF8String]); }); onResultCallback(@[[NSNull null]]); return; } } RCT_EXPORT_METHOD(stopNode:(RCTResponseSenderBlock)callback) { #if DEBUG NSLog(@"stopNode() method called"); #endif // TODO: stop node callback(@[[NSNull null]]); } //////////////////////////////////////////////////////////////////// #pragma mark - Accounts method //////////////////////////////////////////////////////////////////// createAccount RCT_EXPORT_METHOD(createAccount:(NSString *)password callback:(RCTResponseSenderBlock)callback) { #if DEBUG NSLog(@"CreateAccount() method called"); #endif char * result = CreateAccount((char *) [password UTF8String]); callback(@[[NSString stringWithUTF8String: result]]); } //////////////////////////////////////////////////////////////////// recoverAccount RCT_EXPORT_METHOD(recoverAccount:(NSString *)passphrase password:(NSString *)password callback:(RCTResponseSenderBlock)callback) { #if DEBUG NSLog(@"RecoverAccount() method called"); #endif char * result = RecoverAccount((char *) [password UTF8String], (char *) [passphrase UTF8String]); callback(@[[NSString stringWithUTF8String: result]]); } //////////////////////////////////////////////////////////////////// login RCT_EXPORT_METHOD(login:(NSString *)address password:(NSString *)password callback:(RCTResponseSenderBlock)callback) { #if DEBUG NSLog(@"Login() method called"); #endif char * result = Login((char *) [address UTF8String], (char *) [password UTF8String]); callback(@[[NSString stringWithUTF8String: result]]); } //////////////////////////////////////////////////////////////////// #pragma mark - Transaction //////////////////////////////////////////////////////////////////// completeTransaction RCT_EXPORT_METHOD(completeTransaction:(NSString *)hash password:(NSString *)password callback:(RCTResponseSenderBlock)callback) { #if DEBUG NSLog(@"CompleteTransaction() method called"); #endif char * result = CompleteTransaction((char *) [hash UTF8String], (char *) [password UTF8String]); callback(@[[NSString stringWithUTF8String: result]]); } //////////////////////////////////////////////////////////////////// #pragma mark - only android methods //////////////////////////////////////////////////////////////////// RCT_EXPORT_METHOD(setAdjustResize) { #if DEBUG NSLog(@"setAdjustResize() works only on Android"); #endif } RCT_EXPORT_METHOD(setAdjustPan) { #if DEBUG NSLog(@"setAdjustPan() works only on Android"); #endif } RCT_EXPORT_METHOD(setSoftInputMode: (NSInteger) i) { #if DEBUG NSLog(@"setSoftInputMode() works only on Android"); #endif } + (void)signalEvent:(char *) signal { NSString *sig = [NSString stringWithUTF8String:signal]; #if DEBUG NSLog(@"SignalEvent"); NSLog(sig); #endif [bridge.eventDispatcher sendAppEventWithName:@"gethEvent" body:@{@"jsonEvent": sig}]; } @end