mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-14 12:23:43 +00:00
feat: unify native API invocation with async callbacks (#1476)
This commit is contained in:
21 files changed
+1017
-184
No files matched your search
@@ -14,10 +14,13 @@ import UIKit
|
||||
func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) {
|
||||
GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry)
|
||||
let messenger = engineBridge.applicationRegistrar.messenger()
|
||||
let libgopeedTaskQueue = messenger.makeBackgroundTaskQueue?()
|
||||
|
||||
let libgopeedChannel = FlutterMethodChannel(
|
||||
name: "gopeed.com/libgopeed",
|
||||
binaryMessenger: messenger
|
||||
binaryMessenger: messenger,
|
||||
codec: FlutterStandardMethodCodec.sharedInstance(),
|
||||
taskQueue: libgopeedTaskQueue
|
||||
)
|
||||
let taskEventForwarder = GopeedTaskEventForwarder(channel: libgopeedChannel)
|
||||
libgopeedChannel.setMethodCallHandler { call, result in
|
||||
@@ -56,7 +59,8 @@ import UIKit
|
||||
let path = arguments?["path"] as? String ?? ""
|
||||
let query = arguments?["query"] as? String ?? ""
|
||||
let body = arguments?["body"] as? String ?? ""
|
||||
result(LibgopeedInvoke(method, path, query, body))
|
||||
let requestID = (arguments?["requestID"] as? NSNumber)?.int64Value ?? 0
|
||||
GopeedInvokeAsyncWithResult(method, path, query, body, requestID, result)
|
||||
case "subscribeTaskEvents":
|
||||
let arguments = call.arguments as? [String: Any]
|
||||
let mask = (arguments?["mask"] as? NSNumber)?.int64Value ?? 0
|
||||
|
||||
@@ -13,4 +13,12 @@ FOUNDATION_EXPORT void GopeedSubscribeTaskEventsWithForwarder(
|
||||
int64_t mask,
|
||||
GopeedTaskEventForwarder * _Nullable listener);
|
||||
|
||||
FOUNDATION_EXPORT void GopeedInvokeAsyncWithResult(
|
||||
NSString *method,
|
||||
NSString *path,
|
||||
NSString *query,
|
||||
NSString *body,
|
||||
int64_t requestID,
|
||||
FlutterResult result);
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -8,6 +8,45 @@
|
||||
|
||||
@end
|
||||
|
||||
@interface GopeedInvokeResultForwarder : NSObject <LibgopeedInvokeResultListener>
|
||||
|
||||
@property(nonatomic, copy, nullable) FlutterResult result;
|
||||
|
||||
- (instancetype)initWithResult:(FlutterResult)result;
|
||||
|
||||
@end
|
||||
|
||||
@implementation GopeedInvokeResultForwarder
|
||||
|
||||
- (instancetype)initWithResult:(FlutterResult)result {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_result = [result copy];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)onResult:(int64_t)requestID
|
||||
success:(BOOL)success
|
||||
payload:(NSString * _Nullable)payload {
|
||||
FlutterResult result = self.result;
|
||||
self.result = nil;
|
||||
if (result == nil) {
|
||||
return;
|
||||
}
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (success) {
|
||||
result(payload ?: @"");
|
||||
} else {
|
||||
result([FlutterError errorWithCode:@"ERROR"
|
||||
message:payload ?: @"InvokeAsync failed"
|
||||
details:nil]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation GopeedTaskEventForwarder
|
||||
|
||||
- (instancetype)initWithChannel:(FlutterMethodChannel *)channel {
|
||||
@@ -33,3 +72,15 @@ void GopeedSubscribeTaskEventsWithForwarder(
|
||||
GopeedTaskEventForwarder * _Nullable listener) {
|
||||
LibgopeedSubscribeTaskEvents(mask, listener);
|
||||
}
|
||||
|
||||
void GopeedInvokeAsyncWithResult(
|
||||
NSString *method,
|
||||
NSString *path,
|
||||
NSString *query,
|
||||
NSString *body,
|
||||
int64_t requestID,
|
||||
FlutterResult result) {
|
||||
GopeedInvokeResultForwarder *forwarder =
|
||||
[[GopeedInvokeResultForwarder alloc] initWithResult:result];
|
||||
LibgopeedInvokeAsync(method, path, query, body, requestID, forwarder);
|
||||
}
|
||||
Reference in new issue
Block a user