Skip to content

Commit

Permalink
[web] Optimize callApi logic (#1309)
Browse files Browse the repository at this point in the history
* [web] Optimize `callApi` logic
  • Loading branch information
littleGnAl committed Sep 11, 2023
1 parent 49ebb8a commit 0517617
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 10 deletions.
2 changes: 1 addition & 1 deletion example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ class _MyAppState extends State<MyApp> {
body: _data[index]['widget'] as Widget?,
);

if (Platform.isAndroid) {
if (!kIsWeb && Platform.isAndroid) {
widget = AndroidForegroundServiceWidget(
child: widget);
}
Expand Down
8 changes: 8 additions & 0 deletions lib/src/impl/platform/web/iris_web_rtc_bindings_js.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
@JS()
library iris_web_rtc;

import 'package:iris_method_channel/iris_method_channel_bindings_web.dart';
import 'package:js/js.dart';

@JS('AgoraWrapper.initIrisRtc')
external void initIrisRtc(IrisApiEngine irisApiEngine);
31 changes: 23 additions & 8 deletions lib/src/impl/platform/web/js_iris_api_engine_binding_delegate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import 'dart:js_util';

import 'package:agora_rtc_engine/src/binding_forward_export.dart';
import 'package:agora_rtc_engine/src/impl/platform/web/iris_web_rtc_bindings_js.dart';
import 'package:iris_method_channel/iris_method_channel.dart';
import 'package:iris_method_channel/iris_method_channel_bindings_web.dart'
as js;
Expand All @@ -15,9 +16,12 @@ class IrisApiEngineBindingsDelegateJS

@override
CreateApiEngineResult createApiEngine(List<Object> args) {
final apiEnginePtr = js.CreateIrisApiEngine();
final apiEnginePtr = js.createIrisApiEngine();
initIrisRtc(apiEnginePtr);

return CreateApiEngineResult(IrisApiEngineHandle(apiEnginePtr));
final res = CreateApiEngineResult(IrisApiEngineHandle(apiEnginePtr));

return res;
}

static const _skipCalls = ['CreateIrisRtcRendering'];
Expand All @@ -39,14 +43,25 @@ class IrisApiEngineBindingsDelegateJS
) async {
final nApiEnginePtr = apiEnginePtr() as js.IrisApiEngine;

List<Object> buffer = [];
List<int> lenOfBuffer = [];
int bufferCount = 0;
if (methodCall.rawBufferParams != null) {
bufferCount = methodCall.rawBufferParams!.length;
for (final rb in methodCall.rawBufferParams!) {
buffer.add(rb.intPtr());
lenOfBuffer.add(rb.length);
}
}

final nParam = js.EventParam(
event: methodCall.funcName,
data: methodCall.params,
data_size: methodCall.params.length,
result: '',
buffer: [],
length: [],
buffer_count: 0,
buffer: buffer,
length: lenOfBuffer,
buffer_count: bufferCount,
);

if (_skipCalls.contains(methodCall.funcName)) {
Expand All @@ -55,7 +70,7 @@ class IrisApiEngineBindingsDelegateJS
}

final promiseFuture =
promiseToFuture(js.CallIrisApiAsync(nApiEnginePtr, nParam));
promiseToFuture(js.callIrisApi(nApiEnginePtr, nParam));

final js.CallIrisApiResult irisApiResult = await promiseFuture;

Expand All @@ -67,7 +82,7 @@ class IrisApiEngineBindingsDelegateJS
IrisCEventHandlerHandle eventHandler,
) {
return IrisEventHandlerHandle(
js.CreateIrisEventHandler(eventHandler() as js.IrisCEventHandler));
js.createIrisEventHandler(eventHandler() as js.IrisCEventHandler));
}

@override
Expand All @@ -77,7 +92,7 @@ class IrisApiEngineBindingsDelegateJS

@override
void destroyNativeApiEngine(IrisApiEngineHandle apiEnginePtr) {
js.DestroyIrisApiEngine(apiEnginePtr() as js.IrisApiEngine);
js.disposeIrisApiEngine(apiEnginePtr() as js.IrisApiEngine);
}
}

Expand Down
3 changes: 2 additions & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ dependencies:
ffi: '>=1.1.2'
async: ^2.8.2
meta: ^1.7.0
iris_method_channel: 2.0.0-dev.1
iris_method_channel: 2.0.0-dev.2
js: ^0.6.3

dev_dependencies:
flutter_test:
Expand Down

0 comments on commit 0517617

Please sign in to comment.