Skip to content

Commit

Permalink
feat: Introduce the InitilizationArgProvider to allow create the init…
Browse files Browse the repository at this point in the history
…ilization arg lazily
  • Loading branch information
littleGnAl committed Oct 18, 2023
1 parent 53fe31e commit b227f31
Show file tree
Hide file tree
Showing 8 changed files with 27 additions and 21 deletions.
15 changes: 8 additions & 7 deletions lib/src/iris_handles.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ abstract class IrisHandle {

/// [IrisHandle] implementation that hold a value of [Object] type. And return the
/// value when the callable function is called.
class _ObjectIrisHandle extends IrisHandle {
const _ObjectIrisHandle(this._h);
class ObjectIrisHandle extends IrisHandle {
/// Construct the [ObjectIrisHandle]
const ObjectIrisHandle(this._h);

final Object _h;

Expand All @@ -26,31 +27,31 @@ class _ObjectIrisHandle extends IrisHandle {
}

/// The [IrisHandle] of the iris's `IrisApiEngine`
class IrisApiEngineHandle extends _ObjectIrisHandle {
class IrisApiEngineHandle extends ObjectIrisHandle {
/// Construct the [IrisApiEngineHandle]
const IrisApiEngineHandle(Object h) : super(h);
}

/// The [IrisHandle] of the iris's `ApiParam`
class IrisApiParamHandle extends _ObjectIrisHandle {
class IrisApiParamHandle extends ObjectIrisHandle {
/// Construct the [IrisApiParamHandle]
const IrisApiParamHandle(Object h) : super(h);
}

/// The [IrisHandle] of the iris's `IrisCEventHandler`
class IrisCEventHandlerHandle extends _ObjectIrisHandle {
class IrisCEventHandlerHandle extends ObjectIrisHandle {
/// Construct the [IrisCEventHandlerHandle]
const IrisCEventHandlerHandle(Object h) : super(h);
}

/// The [IrisHandle] of the iris's `IrisEventHandler`
class IrisEventHandlerHandle extends _ObjectIrisHandle {
class IrisEventHandlerHandle extends ObjectIrisHandle {
/// Construct the [IrisEventHandlerHandle]
const IrisEventHandlerHandle(Object h) : super(h);
}

/// The [IrisHandle] of the `BufferParam`
class BufferParamHandle extends _ObjectIrisHandle {
class BufferParamHandle extends ObjectIrisHandle {
/// Construct the [BufferParamHandle]
const BufferParamHandle(Object h) : super(h);
}
3 changes: 2 additions & 1 deletion lib/src/iris_method_channel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ class IrisMethodChannel {
});
}

Future<InitilizationResult?> initilize(List<int> args) async {
Future<InitilizationResult?> initilize(
List<InitilizationArgProvider> args) async {
if (_initilized) {
return null;
}
Expand Down
13 changes: 5 additions & 8 deletions lib/src/platform/io/iris_method_channel_internal_io.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class _InitilizationArgs {
final SendPort eventPortSendPort;
final SendPort? onExitSendPort;
final PlatformBindingsProvider provider;
final List<int> argNativeHandles;
final List<InitilizationArgProvider> argNativeHandles;
}

class InitilizationResultIO implements InitilizationResult {
Expand Down Expand Up @@ -316,7 +316,7 @@ class _IrisMethodChannelNative {
}

CreateApiEngineResult initilize(
SendPort sendPort, List<ffi.Pointer<ffi.Void>> args) {
SendPort sendPort, List<InitilizationArgProvider> args) {
_irisEvent.initialize();
_irisEvent.registerEventHandler(sendPort);

Expand Down Expand Up @@ -412,10 +412,6 @@ class IrisMethodChannelInternalIO implements IrisMethodChannelInternal {
final SendPort? onExitSendPort = args.onExitSendPort;
final PlatformBindingsProvider provider = args.provider;

final List<ffi.Pointer<ffi.Void>> argsInner = args.argNativeHandles
.map<ffi.Pointer<ffi.Void>>((e) => ffi.Pointer.fromAddress(e))
.toList();

final apiCallPort = ReceivePort();

final nativeBindingDelegate = provider.provideNativeBindingDelegate();
Expand All @@ -428,7 +424,7 @@ class IrisMethodChannelInternalIO implements IrisMethodChannelInternal {
final _IrisMethodChannelNative executor = _IrisMethodChannelNative(
nativeBindingDelegate, irisEvent as IrisEventIO);
final CreateApiEngineResult executorInitilizationResult =
executor.initilize(mainEventSendPort, argsInner);
executor.initilize(mainEventSendPort, args.argNativeHandles);

int? debugIrisCEventHandlerNativeHandle;
int? debugIrisEventHandlerNativeHandle;
Expand Down Expand Up @@ -503,7 +499,8 @@ class IrisMethodChannelInternalIO implements IrisMethodChannelInternal {
}

@override
Future<InitilizationResult?> initilize(List<int> args) async {
Future<InitilizationResult?> initilize(
List<InitilizationArgProvider> args) async {
if (_initilized) {
return null;
}
Expand Down
8 changes: 7 additions & 1 deletion lib/src/platform/iris_method_channel_interface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,14 @@ class DestroyNativeEventHandlerListRequest extends IrisMethodCallListRequest {
/// * You should not do some asynchronous jobs inside this listener.
typedef HotRestartListener = void Function(Object? message);

abstract class InitilizationArgProvider {
IrisHandle provide(IrisApiEngineHandle apiEngineHandle);
}

// typedef InitilizationArgProvider = Object Function(Object apiEngineHandle);

abstract class IrisMethodChannelInternal {
Future<InitilizationResult?> initilize(List<int> args);
Future<InitilizationResult?> initilize(List<InitilizationArgProvider> args);

// Future<CallApiResult> invokeMethod(IrisMethodCall methodCall);

Expand Down
2 changes: 1 addition & 1 deletion lib/src/platform/platform_bindings_delegate_interface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class CreateApiEngineResult {
abstract class PlatformBindingsDelegateInterface {
void initialize();

CreateApiEngineResult createApiEngine(List<Object> args);
CreateApiEngineResult createApiEngine(List<InitilizationArgProvider> args);

int callApi(
IrisMethodCall methodCall,
Expand Down
3 changes: 2 additions & 1 deletion lib/src/platform/web/iris_method_channel_internal_web.dart
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,8 @@ class IrisMethodChannelInternalWeb implements IrisMethodChannelInternal {
}

@override
Future<InitilizationResult?> initilize(List<int> args) async {
Future<InitilizationResult?> initilize(
List<InitilizationArgProvider> args) async {
_platformBindingsDelegate =
_nativeBindingsProvider.provideNativeBindingDelegate();
final createApiEngineResult =
Expand Down
2 changes: 1 addition & 1 deletion test/platform/fake/fake_platform_binding_delegate_io.dart
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ class FakeNativeBindingDelegate extends PlatformBindingsDelegateInterface {
}

@override
CreateApiEngineResult createApiEngine(List<Object> args) {
CreateApiEngineResult createApiEngine(List<InitilizationArgProvider> args) {
return CreateApiEngineResult(
IrisApiEngineHandle(ffi.Pointer<ffi.Void>.fromAddress(100)),
extraData: <String, Object>{'extra_handle': 1000},
Expand Down
2 changes: 1 addition & 1 deletion test/platform/fake/fake_platform_binding_delegate_web.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class FakeNativeBindingDelegate extends PlatformBindingsDelegateInterface {
}

@override
CreateApiEngineResult createApiEngine(List<Object> args) {
CreateApiEngineResult createApiEngine(List<InitilizationArgProvider> args) {
return CreateApiEngineResult(
IrisApiEngineHandle(FakeTypeWeb()),
extraData: <String, Object>{'extra_handle': 1000},
Expand Down

0 comments on commit b227f31

Please sign in to comment.