Skip to content

Commit

Permalink
feat: add native module method to call gomobile restart
Browse files Browse the repository at this point in the history
Signed-off-by: Godefroy Ponsinet <godefroy.ponsinet@outlook.com>
  • Loading branch information
90dy committed Nov 5, 2018
1 parent cd0f0af commit cee0b06
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 19 deletions.
Expand Up @@ -25,7 +25,7 @@ public String getName() {
}

@ReactMethod
public void start(Promise promise) throws Exception {
public void start(Promise promise) {
try {
Core.start(this.filesDir, this.logger);
promise.resolve(null);
Expand All @@ -36,7 +36,18 @@ public void start(Promise promise) throws Exception {
}

@ReactMethod
public void getPort(Promise promise) throws Exception {
public void restart(Promise promise) {
try {
Core.restart(this.filesDir, this.logger);
promise.resolve(null);
} catch (Exception err) {
this.logger.format(Level.ERROR, this.getName(), "Unable to restart core: %s", err);
promise.reject(err);
}
}

@ReactMethod
public void getPort(Promise promise) {
try {
Long data = Core.getPort();
promise.resolve(data.toString());
Expand Down
1 change: 1 addition & 0 deletions client/react-native/common/relay/environment.js
Expand Up @@ -12,6 +12,7 @@ if (__DEV__) {
if (Platform.OS === 'web') {
NativeModules.CoreModule = {
start: async () => {},
restart: async () => {},
getPort: async () => {
const url = new URL(window.location.href)
return url.searchParams.get('gql-port') || '8700'
Expand Down
9 changes: 9 additions & 0 deletions client/react-native/gomobile/core.go
Expand Up @@ -116,3 +116,12 @@ func Start(datastorePath string, logger Logger) error {

return nil
}

func Restart(datastorePath string, logger Logger) error {
if currentAccount == nil {
return errors.New("daemon not started")
}
currentAccount.Close()
currentAccount = nil
return Start(datastorePath, logger)
}
3 changes: 3 additions & 0 deletions client/react-native/ios/modules/core/CoreModule.m
Expand Up @@ -13,6 +13,9 @@ @interface RCT_EXTERN_REMAP_MODULE(CoreModule, CoreModule, NSObject)
RCT_EXTERN_METHOD(start:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject);

RCT_EXTERN_METHOD(restart:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject);

RCT_EXTERN_METHOD(getPort:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject);

Expand Down
53 changes: 36 additions & 17 deletions client/react-native/ios/modules/core/CoreModule.swift
Expand Up @@ -12,30 +12,49 @@ var logger = Logger("chat.berty.io", "CoreModule")

@objc(CoreModule)
class CoreModule: NSObject {

func getFilesDir() throws -> String {
let filesDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first
let filesPath = filesDir?.path
let fileExist = FileManager.default.fileExists(atPath: filesPath!)

if fileExist == false {
try FileManager.default.createDirectory(at: filesDir!, withIntermediateDirectories: true, attributes: nil)
}

return filesPath!
}

@objc func start(_ resolve: RCTPromiseResolveBlock!, reject: RCTPromiseRejectBlock!) {
var err: NSError?

let filesDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first
let filesPath = filesDir?.path
let fileExist = FileManager.default.fileExists(atPath: filesPath!)

if fileExist == false {
do {
try FileManager.default.createDirectory(at: filesDir!, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
logger.format("create directory error: ", level: .Error, error.userInfo.description)
reject("\(String(describing: error.code))", error.userInfo.description, error)
do {
CoreStart(try self.getFilesDir(), logger, &err)
if let error = err {
throw error
}
}

CoreStart(filesPath, logger, &err)
if let error = err {
logger.format("core module init error: %@", level: .Error, error.userInfo.description)
resolve(nil)
} catch let error as NSError {
logger.format("core module start error: %@", level: .Error, error.userInfo.description)
reject("\(String(describing: error.code))", error.userInfo.description, error)
}
resolve(nil)
}


@objc func restart(_ resolve: RCTPromiseResolveBlock!, reject: RCTPromiseRejectBlock!) {
var err: NSError?

do {
CoreRestart(try self.getFilesDir(), logger, &err)
if let error = err {
throw error
}
resolve(nil)
} catch let error as NSError {
logger.format("core module restart error: %@", level: .Error, error.userInfo.description)
reject("\(String(describing: error.code))", error.userInfo.description, error)
}
}

@objc func getPort(_ resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
var err: NSError?
var port: Int = 0
Expand Down

0 comments on commit cee0b06

Please sign in to comment.