Skip to content

fix: engine can intialize with app NativeEventEmitter #36

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 2 additions & 15 deletions expo-example/app/replication/status.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,11 @@ import start from '@/service/replicator/start';
import stop from '@/service/replicator/stop';
import ReplicatorIdActionForm from '@/components/ReplicatorIdActionForm/ReplicatorIdActionForm';
import { useStyleScheme } from '@/components/Themed/Themed';
import { NativeEventEmitter, NativeModules, SafeAreaView } from 'react-native';
import { SafeAreaView } from 'react-native';
import ResultListView from '@/components/ResultsListView/ResultsListView';
import MessageQueue from 'react-native/Libraries/BatchedBridge/MessageQueue';

export default function ReplicatorStatusScreen() {
//debug the message queue
const spyMessageQueue = (message: any) => {
if (
message.type === 0 &&
message.method === 'emit' &&
message.module === 'RCTDeviceEventEmitter'
) {
console.log(`::MESSAGE-QUEUE:: ${message.args}`);
}
};

export default function ReplicatorStatusScreen() {
const styles = useStyleScheme();
const { statusChangeMessages, setStatusChangeMessages } = useContext(
ReplicatorStatusChangeContext
Expand All @@ -40,8 +29,6 @@ export default function ReplicatorStatusScreen() {
const replicatorId = replId.toString();
setSelectedReplicatorId(replicatorId);
try {
//debug the message queue
MessageQueue.spy(spyMessageQueue);
const token = statusToken[replicatorId];
if (token === undefined) {
setInformationMessages((prev) => [
Expand Down
134 changes: 67 additions & 67 deletions expo-example/ios/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
PODS:
- boost (1.84.0)
- cbl-reactnative (0.2.1):
- cbl-reactnative (0.2.3):
- CouchbaseLite-Swift-Enterprise (= 3.2.1)
- DoubleConversion
- glog
Expand Down Expand Up @@ -2185,93 +2185,93 @@ EXTERNAL SOURCES:

SPEC CHECKSUMS:
boost: 1dca942403ed9342f98334bf4c3621f011aa7946
cbl-reactnative: dc6c2f40c22c456b3c26952f7cc7815a3ce34318
cbl-reactnative: aec81403856ac5f91d3792b18da6a67551402f76
CouchbaseLite-Swift-Enterprise: 6a1eddeed0b450d00d2336bcf60c9a71e228f0e4
DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385
EXConstants: dd2fe64c6cdb1383b694c309a63028a8e9f2be6d
EXConstants: 277129d9a42ba2cf1fad375e7eaa9939005c60be
EXJSONUtils: 01fc7492b66c234e395dcffdd5f53439c5c29c93
EXManifests: f30a0c5d3d6cad8db9c01bab579e0aa0df5d3cb2
Expo: 148aac4ce0da148c63447d09ae41ddb153f35506
expo-dev-client: 8c99b4979086a27f19e773e96ef10219102a5c4f
expo-dev-launcher: 6a9b0c2e95bcf9cff57a59f7b39bcd7d4b9fb0d1
expo-dev-menu: cba09bf0b6a97b8297434eb2cdc44106aaf51c11
EXManifests: 8de88191fe548cd5aeafa4228ed92283b483b923
Expo: 8948e8e417f699ed125a80389e150aabbae404bf
expo-dev-client: efd9785534d9facffebd23bb9d105e5eb71fd04f
expo-dev-launcher: 4f0e42fcb65ad340370ff2fe23df9791b22ec502
expo-dev-menu: 0755441fcaa71f7094cefd2cebab1c0de0dfad33
expo-dev-menu-interface: 4baf2f8b3b79ce37cf4b900e4b3ba6df3384f0a1
ExpoAsset: 8138f2a9ec55ae1ad7c3871448379f7d97692d15
ExpoFileSystem: dc2679a2b5d4c465ca881129074da95faee943d5
ExpoFont: 7522d869d84ee2ee8093ee997fef5b86f85d856b
ExpoHead: a623db43433938dcfbd6a38c27381055d01a0f3a
ExpoKeepAwake: 783e68647b969b210a786047c3daa7b753dcac1f
ExpoLinking: a8332a219379ba80f8e612d5a5de4a3da446886e
ExpoModulesCore: f71914f0725f2f4ca7a8d25dc551263e730d5d7f
ExpoRandom: 099ddce39b39ffb984b45118d031e8713e962a50
ExpoSplashScreen: 47a5c337586329223b70b5ef777d34c1f9edf412
ExpoSystemUI: 97ec8f20af5e8ca18d3191c5c72e8a04e6e2f02d
ExpoWebBrowser: f08aaf1c8a02af8a768d83793186cb6d2c69f529
EXUpdatesInterface: 1dcebac98ac5dad4289e6ff2bd5616822e894397
ExpoAsset: 6f7a8887cbb9fb39fdb0808e7f6f74ba0e1ae9b6
ExpoFileSystem: 83da9dbce2371cc72c3a3ef49e0df54a117310f1
ExpoFont: 12b0217e42ac97029d0f317f0486039a8508cf52
ExpoHead: 8f54ac800b3ef60095313aa49f091c9c94c7304e
ExpoKeepAwake: 22173f45d767c7d37403fdf48292726901d69ce7
ExpoLinking: 40e30b571ffb77b280a38bed137d89b21f46f2a0
ExpoModulesCore: aae34f5458cf6ce1632f17f00de0f10d8552d954
ExpoRandom: d1444df65007bdd4070009efd5dab18e20bf0f00
ExpoSplashScreen: a86597b744a79c9d26da9317a1f8d894b0bc846c
ExpoSystemUI: 018496c0221ae4993cfc56b14e723af8c9a5aa22
ExpoWebBrowser: b658ba8a9161f1b54afb279591cfce2cb73330fa
EXUpdatesInterface: 7c977640bdd8b85833c19e3959ba46145c5719db
FBLazyVector: be7314029d6ec6b90f0f75ce1195b8130ed9ac4f
fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be
glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a
hermes-engine: 0555a84ea495e8e3b4bde71b597cd87fbb382888
RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648
RCT-Folly: 84578c8756030547307e4572ab1947de1685c599
RCTDeprecation: 2c5e1000b04ab70b53956aa498bf7442c3c6e497
RCTRequired: 5f785a001cf68a551c5f5040fb4c415672dbb481
RCTTypeSafety: 6b98db8965005d32449605c0d005ecb4fee8a0f7
React: 8077bf7c185afb515be82518507e16f71a247a5e
React-callinvoker: 519eee9520727805e2867a6d8dad4ebbeed543db
React-Core: e364ceda7d086c7d14adeec0eb880a90073e3dde
React-CoreModules: 291be650024d9db086c95fd1d7e7d9607c6de62b
React-cxxreact: 5cf17d13ca0fc0734e1bb0ed9615d1d1fc45ef78
React-Core: 14708d0ebf0f961647347a7ae9cebcfaa75c99aa
React-CoreModules: 42b62e50cb4ac9a8ca92b48b263355cebcc1a523
React-cxxreact: 846f1d9eb37a3dec19738d195d313deb7e9ee36b
React-debug: 931ca94abd6b1bcab539e356e20df788afecae8f
React-defaultsnativemodule: fa1917ffdbb17e2a03f9a2b26e6f7342f59662c0
React-domnativemodule: c9dcbf0a872f3d02210f005c084d0fc1fdb83f2d
React-Fabric: e1774fe4b579e34c2c5721e9351c8ce869e7b5f0
React-FabricComponents: 528ff9f96d150379ed404221d70cc7019ca76865
React-FabricImage: 31680b7ddc740e040277176fbd6541fcf0fd44af
React-defaultsnativemodule: 6f56c95a8cd7b7fcfa6f983b19270753000c1a4e
React-domnativemodule: 42711869923d77713e8d090f489580c330ff2033
React-Fabric: 2709bcae28c5b567337b3bad4ec1aa8b81aa1241
React-FabricComponents: f35e150acf873109d244bd8c4535425d51f26672
React-FabricImage: 6dd7af0496dae7924553f8b3cd2b134d86256a48
React-featureflags: 7c7a74b65ee5a228f520b387ebfe0e8d9cecc622
React-featureflagsnativemodule: bc298d49634a5b2e0576b9bda6a0dc337ef158f8
React-graphics: 7f0d3e06d356e8476bd8ba95d90762fc01138ebc
React-hermes: f83fafe6a1c845dace7abad4a5d7366cbb42ab96
React-idlecallbacksnativemodule: 733deb5f645226868cf49a0eb798c62082a3fb34
React-ImageManager: 2b9274ea973f43597a554a182d7ef525836172c6
React-jserrorhandler: 3b521485275d295cfc6ec6bfa921a1d608693ecf
React-jsi: fd23c1d759feb709784fd4c835b510b90a94dd12
React-jsiexecutor: 74628d57accc03d4b5df53db813ef6dcd704c9ae
React-jsinspector: 89a1e27e97c762de81bd4b9cb1314750304bba38
React-jsitracing: 11b6646d7b2ecdc7a475f65b2cb12d3805964195
React-logger: 26155dc23db5c9038794db915f80bd2044512c2e
React-Mapbuffer: ad1ba0205205a16dbff11b8ade6d1b3959451658
React-microtasksnativemodule: 36e3a415c6a3a5c4784b5c6bad38013b8ca35be4
react-native-safe-area-context: 4532f1a0c5d34a46b9324ccaaedcb5582a302b7d
React-featureflagsnativemodule: 2e98d69110ccee1cf10acafad34041940457545c
React-graphics: ba13cb82b71ec2e0ad9dac2ae31867b5656d5a28
React-hermes: 4bfb5c90304c4d2aa36b3404ddd00df591dcae8a
React-idlecallbacksnativemodule: 4a77976e6b6d74ebe2008ade2e46c69484a69f45
React-ImageManager: 0464b2fac74d9d06d44abc3e85035424fc0d1a70
React-jserrorhandler: 4c8ee0547d89d1bfe9cd740ca83d229934cc94e4
React-jsi: 927e83b5aef299ca42842cd1ad696c4cf301d5eb
React-jsiexecutor: ba6b1fbaa388a99fcfb750529fed3ce65efbda4f
React-jsinspector: 1f9f161bf0961df50d2843802a431eb4fd4059cf
React-jsitracing: f6f65398e2d58bd24523ba210b277681e9cf2ee0
React-logger: 2736a90a3fdaed3dab1e2e9c5a5e9b3be00c287d
React-Mapbuffer: bd6a2ffbf401f11cfc8b5e8f38acab9fe117620c
React-microtasksnativemodule: e3e161b03573a22cf4e05434fe5309c7847ef197
react-native-safe-area-context: b13be9714d9771fbde0120bc519c963484de3a71
React-nativeconfig: aeed6e2a8ac02b2df54476afcc7c663416c12bf7
React-NativeModulesApple: c5b7813da94136f50ef084fa1ac077332dcfc658
React-perflogger: 6afb7eebf7d9521cc70481688ccddf212970e9d3
React-performancetimeline: 81884d35896b22d51832e7c8748c8330ec73c491
React-NativeModulesApple: c0783e5e21c71aa2764ac33120abc96208466fa6
React-perflogger: 2991d4258277af250eb7a2705980ebb3ef9ba85e
React-performancetimeline: 76a55d0be7293adfce8603eafb8dbae92234352d
React-RCTActionSheet: c940a35d71686941ac2b96dd07bde11ea0f0c34f
React-RCTAnimation: e1dbb4e530d6f58437ab2fae372de3788ecdffab
React-RCTAppDelegate: 3aa8a7b8bff5afcc00f947471c2fc93bd2093de5
React-RCTBlob: 9cdac4721a76e2d132fb1760eafd0a8f150d1c96
React-RCTFabric: b833ecb9bb715858731f658accae0804bd2f4a7b
React-RCTImage: f09f5165807e1a69a2bbac6c7168a8ed57ed4e26
React-RCTLinking: 4ea06b79cba7e15d8af4d86b1dcede6bd29a47fd
React-RCTNetwork: 43a38148c7a4a2380e76b08f07f02ee8eaac8965
React-RCTSettings: cc60bb6b38eed0683696b5ddf45b0a4a1441147b
React-RCTText: fbe5e6e886beefd5d432790bc50b7aa2b6504264
React-RCTVibration: 061dbf7a0a1e77bfc1c4672e7be6884dc12f18bf
React-RCTAnimation: db10ffa5b463794089b5319818f1df1e0b996422
React-RCTAppDelegate: c398e067ecde4909eab8b48adf06bf03783cd335
React-RCTBlob: 2ede907cfc8039c5f5da32b3ba9e144b663c3c98
React-RCTFabric: 9612452b193ce3daa3a05fdbeba4ffea756b17f8
React-RCTImage: 3d6b5cc404c62d2b2cd767061a56bd48b4300f5e
React-RCTLinking: 548cf5c3fe935f3d0c8df5dc3c234283df48cea6
React-RCTNetwork: 59f683fee79f9187b8ee4c270343b474ad37b42c
React-RCTSettings: b14bd94b2ac87c803375a0873746ef31c7b0eead
React-RCTText: 24e7a9b64341d6a1c98e1eabc5471b88c8bc61f1
React-RCTVibration: 2830b19dca45d23dc61b3c93c25fbc7b85979202
React-rendererconsistency: 52b471890a1946991f2db81aa6867b14d93f4ea5
React-rendererdebug: 3f63479f704e266a3bf104c897315a885c72859b
React-rendererdebug: c2496eb27c25d367b7e80a8a4a1babc21b6cc64b
React-rncore: 33ea67bfd2eeaa4f4a0c9e0e8bd55e9b7ccb9faa
React-RuntimeApple: bcd91a191637ab5895593135de74ac54bf88df5d
React-RuntimeCore: 3a42a7f12f5f6cc4cb0e22446540165d204d7a15
React-RuntimeApple: 28bcdbce4517b9428ab127d42d7b6bfeb27eb69c
React-RuntimeCore: d629b37225984a26c57803d857c8357c839f3fef
React-runtimeexecutor: db3f17084ee7b71ab84912c527d428cc3a137841
React-RuntimeHermes: 91bcd6aeec4bab20cebd33cb8984e3825ccdc77e
React-runtimescheduler: 92a5a092ded9a9aaac765ac940d26b52bac48901
React-RuntimeHermes: 5d857268954776a1c6f0e0ecff1f7860806bb43b
React-runtimescheduler: 00be5844aa2c7d72fd47293e0798bb41462ecfee
React-timing: 54693ad0872f64127f7cb41675b1be4fd28ea4dc
React-utils: 2bcaf4f4dfe361344bce2fae428603d518488630
ReactCodegen: ae99a130606068ed40d1d9c0d5f25fda142a0647
ReactCommon: 89c87b343deacc8610b099ac764848f0ce937e3e
RNReanimated: 365e7d6c1ed443cf8e1b7ba4f0b15dd9f82f052a
RNScreens: b03d696c70cc5235ce4587fcc27ae1a93a48f98c
RNSVG: 3d2bdcaef51c8071880a9c0072fe324f4423a3ba
React-utils: ee370a52b08a000963af1a60c31e6c87a70620a5
ReactCodegen: 5148a0102fc8f0a1f9b05d955da886b44447679d
ReactCommon: b8485556b596ef2f44f59bc586113bda138fb804
RNReanimated: 929c26a706dfe1af8feee9f2cf78004394e4dd04
RNScreens: e21c8d32fe97737ecc30f1f21e7b6f69f341a1f5
RNSVG: bb4bfcb8ec723a6f34b074a1b7cd40ee35246fe5
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
Yoga: 3deb2471faa9916c8a82dda2a22d3fba2620ad37

Expand Down
4 changes: 2 additions & 2 deletions expo-example/ios/expoexample.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@
);
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
PRODUCT_BUNDLE_IDENTIFIER = "com.couchbase.rn.expo-example";
PRODUCT_NAME = "expoexample";
PRODUCT_NAME = expoexample;
SWIFT_OBJC_BRIDGING_HEADER = "expoexample/expoexample-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
Expand Down Expand Up @@ -395,7 +395,7 @@
);
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = "com.couchbase.rn.expo-example";
PRODUCT_NAME = "expoexample";
PRODUCT_NAME = expoexample;
SWIFT_OBJC_BRIDGING_HEADER = "expoexample/expoexample-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
Expand Down
1 change: 1 addition & 0 deletions expo-example/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 6 additions & 3 deletions expo-example/providers/DatabaseProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,16 @@ import ReplicatorContext from '@/providers/ReplicatorContext';
import ReplicatorStatusChangeContext from '@/providers/ReplicatorStatusChangeContext';
import ReplicatorDocumentChangeContext from '@/providers/ReplicationDocumentChangeContext';
import ReplicatorStatusTokenContext from './ReplicatorStatusTokenContext';
import { NativeEventEmitter, NativeModules } from 'react-native';
type DatabaseProviderProps = {
children: ReactNode;
};

const eventEmitter = new NativeEventEmitter(NativeModules.CblReactnative);

const engine = new CblReactNativeEngine(eventEmitter);
engine.debugConsole = true; //very noisy, only use for debugging

const DatabaseProvider: React.FC<DatabaseProviderProps> = ({ children }) => {
// State to store for database, replication, and reporting
const [databases, setDatabases] = useState<Record<string, Database>>({});
Expand Down Expand Up @@ -44,9 +50,6 @@ const DatabaseProvider: React.FC<DatabaseProviderProps> = ({ children }) => {
[documentChangeMessages, setDocumentChangeMessages]
);

const engine = new CblReactNativeEngine();
engine.debugConsole = true; //very noisy, only use for debugging

return (
<DatabaseContext.Provider value={databasesValue}>
<ReplicatorContext.Provider value={replicatorIdsValue}>
Expand Down
50 changes: 37 additions & 13 deletions src/CblReactNativeEngine.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,18 @@ export class CblReactNativeEngine implements ICoreEngine {
}
);

_eventEmitter = new NativeEventEmitter(this.CblReactNative);
_eventEmitter: NativeEventEmitter;

constructor() {
constructor(customEventEmitter?: NativeEventEmitter) {
EngineLocator.registerEngine(EngineLocator.key, this);

if (customEventEmitter) {
this.debugLog('Using provided custom event emitter');
this._eventEmitter = customEventEmitter;
return;
}

this._eventEmitter = new NativeEventEmitter(this.CblReactNative);
}

//private logging function
Expand Down Expand Up @@ -430,13 +438,17 @@ export class CblReactNativeEngine implements ICoreEngine {
});
}

// eslint-disable-next-line
collection_RemoveChangeListener(args: CollectionChangeListenerArgs): Promise<void> {
collection_RemoveChangeListener(
// eslint-disable-next-line
args: CollectionChangeListenerArgs
): Promise<void> {
return Promise.resolve(undefined);
}

// eslint-disable-next-line
collection_RemoveDocumentChangeListener(args: CollectionChangeListenerArgs): Promise<void> {
collection_RemoveDocumentChangeListener(
// eslint-disable-next-line
args: CollectionChangeListenerArgs
): Promise<void> {
return Promise.resolve(undefined);
}

Expand Down Expand Up @@ -830,12 +842,18 @@ export class CblReactNativeEngine implements ICoreEngine {
}

// eslint-disable-next-line
file_GetFileNamesInDirectory(args: { path: string; }): Promise<{ files: string[] }> {
file_GetFileNamesInDirectory(args: {
path: string;
}): Promise<{ files: string[] }> {
return Promise.resolve({ files: [] });
}

// eslint-disable-next-line
query_AddChangeListener( args: QueryChangeListenerArgs, lcb: ListenerCallback): Promise<void> {
query_AddChangeListener(
// eslint-disable-next-line
args: QueryChangeListenerArgs,
// eslint-disable-next-line
lcb: ListenerCallback
): Promise<void> {
return Promise.resolve(undefined);
}

Expand Down Expand Up @@ -875,8 +893,10 @@ export class CblReactNativeEngine implements ICoreEngine {
});
}

// eslint-disable-next-line
query_RemoveChangeListener( args: QueryRemoveChangeListenerArgs): Promise<void> {
query_RemoveChangeListener(
// eslint-disable-next-line
args: QueryRemoveChangeListenerArgs
): Promise<void> {
return Promise.resolve(undefined);
}

Expand Down Expand Up @@ -954,8 +974,12 @@ export class CblReactNativeEngine implements ICoreEngine {
});
}

// eslint-disable-next-line
replicator_AddDocumentChangeListener(args: ReplicationChangeListenerArgs, lcb: ListenerCallback): Promise<void> {
replicator_AddDocumentChangeListener(
// eslint-disable-next-line
args: ReplicationChangeListenerArgs,
// eslint-disable-next-line
lcb: ListenerCallback
): Promise<void> {
return Promise.resolve(undefined);
}

Expand Down