use RCTDeviceEventEmitter to send events to javascript; implements #195

Former-commit-id: 82bc347735
This commit is contained in:
Adrian Tiberius 2016-09-01 17:55:40 +03:00
parent 9253b788ea
commit d4961e1416
6 changed files with 24 additions and 29 deletions

View File

@ -139,7 +139,7 @@ dependencies {
compile project(':react-native-image-crop-picker') compile project(':react-native-image-crop-picker')
compile project(':react-native-webview-bridge') compile project(':react-native-webview-bridge')
//compile(name:'statusgo-android-16', ext:'aar') //compile(name:'statusgo-android-16', ext:'aar')
compile(group: 'status-im', name: 'status-go', version: '0.1.0-574f67', ext: 'aar') compile(group: 'status-im', name: 'status-go', version: '0.1.0-574f68-service', ext: 'aar')
compile fileTree(dir: "node_modules/realm/android/libs", include: ["*.jar"]) compile fileTree(dir: "node_modules/realm/android/libs", include: ["*.jar"])
} }

View File

@ -5,6 +5,7 @@ import android.os.Bundle;
import android.os.Message; import android.os.Message;
import android.os.RemoteException; import android.os.RemoteException;
import com.facebook.react.bridge.*; import com.facebook.react.bridge.*;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.statusim.geth.service.ConnectorHandler; import com.statusim.geth.service.ConnectorHandler;
import com.statusim.geth.service.GethConnector; import com.statusim.geth.service.GethConnector;
import com.statusim.geth.service.GethMessages; import com.statusim.geth.service.GethMessages;
@ -113,6 +114,11 @@ class GethModule extends ReactContextBaseJavaModule implements LifecycleEventLis
callback.invoke(result); callback.invoke(result);
} }
break; break;
case GethMessages.MSG_GETH_EVENT:
String event = data.getString("event");
WritableMap params = Arguments.createMap();
params.putString("jsonEvent", event);
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("gethEvent", params);
default: default:
isClaimed = false; isClaimed = false;
} }
@ -233,21 +239,4 @@ class GethModule extends ReactContextBaseJavaModule implements LifecycleEventLis
geth.completeTransaction(callbackIdentifier, hash, password); geth.completeTransaction(callbackIdentifier, hash, password);
} }
private static Callback signalEventCallback;
//todo: move this method to GethService
public static void signalEvent(String jsonEvent) {
Log.d(TAG, "Signal event: " + jsonEvent);
if(signalEventCallback != null) {
signalEventCallback.invoke(jsonEvent);
}
}
@ReactMethod
public void registerSignalEventCallback(Callback callback) {
Log.d(TAG, "registerSignalEventCallback");
signalEventCallback = callback;
}
} }

View File

@ -63,4 +63,8 @@ public class GethMessages {
*/ */
public static final int MSG_TRANSACTION_COMPLETED = 11; public static final int MSG_TRANSACTION_COMPLETED = 11;
/**
* Geth event
*/
public static final int MSG_GETH_EVENT = 12;
} }

View File

@ -21,6 +21,8 @@ public class GethService extends Service {
private static String dataFolder; private static String dataFolder;
private static Messenger applicationMessenger = null;
private static class IncomingHandler extends Handler { private static class IncomingHandler extends Handler {
private final WeakReference<GethService> service; private final WeakReference<GethService> service;
@ -49,7 +51,10 @@ public class GethService extends Service {
Log.d(TAG, "Signal event: " + jsonEvent); Log.d(TAG, "Signal event: " + jsonEvent);
Bundle replyData = new Bundle(); Bundle replyData = new Bundle();
replyData.putString("event", jsonEvent); replyData.putString("event", jsonEvent);
//createAndSendReply(message, GethMessages.MSG_SIGNAL_EVENT, replyData);
Message replyMessage = Message.obtain(null, GethMessages.MSG_GETH_EVENT, 0, 0, null);
replyMessage.setData(replyData);
sendReply(applicationMessenger, replyMessage);
} }
@Nullable @Nullable
@ -221,6 +226,7 @@ public class GethService extends Service {
} }
private void login(Message message) { private void login(Message message) {
applicationMessenger = message.replyTo;
Bundle data = message.getData(); Bundle data = message.getData();
String address = data.getString("address"); String address = data.getString("address");
String password = data.getString("password"); String password = data.getString("password");
@ -230,6 +236,9 @@ public class GethService extends Service {
Bundle replyData = new Bundle(); Bundle replyData = new Bundle();
replyData.putString("result", result); replyData.putString("result", result);
createAndSendReply(message, GethMessages.MSG_LOGGED_IN, replyData); createAndSendReply(message, GethMessages.MSG_LOGGED_IN, replyData);
// Test signalEvent
//signalEvent("{ \"type\": \"test\", \"event\": \"test event\" }");
} }
private void completeTransaction(Message message){ private void completeTransaction(Message message){
@ -271,9 +280,7 @@ public class GethService extends Service {
private static void sendReply(Messenger messenger, Message message) { private static void sendReply(Messenger messenger, Message message) {
try { try {
messenger.send(message); messenger.send(message);
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Exception sending message id: " + message.what, e); Log.e(TAG, "Exception sending message id: " + message.what, e);
} }
} }

View File

@ -6,14 +6,8 @@
(when (exists? (.-NativeModules r/react-native)) (when (exists? (.-NativeModules r/react-native))
(.-Geth (.-NativeModules r/react-native)))) (.-Geth (.-NativeModules r/react-native))))
(defn register-signal-callback [] (.addListener r/device-event-emitter "gethEvent"
(when geth #(dispatch [:signal-event (.-jsonEvent %)]))
(.registerSignalEventCallback
geth
#(do (dispatch [:signal-event %])
(register-signal-callback)))))
(register-signal-callback)
(defn start-node [on-result on-already-running] (defn start-node [on-result on-already-running]
(when geth (when geth

View File

@ -5,6 +5,7 @@
(def react-native (u/require "react-native")) (def react-native (u/require "react-native"))
(def native-modules (.-NativeModules react-native)) (def native-modules (.-NativeModules react-native))
(def device-event-emitter (.-DeviceEventEmitter react-native))
(def geth (.-Geth native-modules)) (def geth (.-Geth native-modules))
(def react-native-dialogs (u/require "react-native-dialogs")) (def react-native-dialogs (u/require "react-native-dialogs"))