@@ -16,11 +16,30 @@ static void ResizeChannelBuffer(NSObject<FlutterBinaryMessenger>* binaryMessenge
1616 [binaryMessenger sendOnChannel: FlutterChannelBuffersChannel message: message];
1717}
1818
19+ static FlutterBinaryMessengerConnection SetMessageHandler (
20+ NSObject <FlutterBinaryMessenger>* messenger,
21+ NSString * name,
22+ FlutterBinaryMessageHandler handler,
23+ NSObject <FlutterTaskQueue>* taskQueue) {
24+ if (taskQueue) {
25+ NSCAssert ([messenger respondsToSelector: @selector (setMessageHandlerOnChannel:
26+ binaryMessageHandler:taskQueue: )],
27+ @" " );
28+ return [messenger setMessageHandlerOnChannel: name
29+ binaryMessageHandler: handler
30+ taskQueue: taskQueue];
31+ } else {
32+ return [messenger setMessageHandlerOnChannel: name binaryMessageHandler: handler];
33+ }
34+ }
35+
36+ // //////////////////////////////////////////////////////////////////////////////
1937@implementation FlutterBasicMessageChannel {
2038 NSObject <FlutterBinaryMessenger>* _messenger;
2139 NSString * _name;
2240 NSObject <FlutterMessageCodec>* _codec;
2341 FlutterBinaryMessengerConnection _connection;
42+ NSObject <FlutterTaskQueue>* _taskQueue;
2443}
2544+ (instancetype )messageChannelWithName : (NSString *)name
2645 binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger {
@@ -40,18 +59,28 @@ + (instancetype)messageChannelWithName:(NSString*)name
4059- (instancetype )initWithName : (NSString *)name
4160 binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
4261 codec : (NSObject <FlutterMessageCodec>*)codec {
62+ self = [self initWithName: name binaryMessenger: messenger codec: codec taskQueue: nil ];
63+ return self;
64+ }
65+
66+ - (instancetype )initWithName : (NSString *)name
67+ binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
68+ codec : (NSObject <FlutterMessageCodec>*)codec
69+ taskQueue : (NSObject <FlutterTaskQueue>*)taskQueue {
4370 self = [super init ];
4471 NSAssert (self, @" Super init cannot be nil" );
4572 _name = [name retain ];
4673 _messenger = [messenger retain ];
4774 _codec = [codec retain ];
75+ _taskQueue = [taskQueue retain ];
4876 return self;
4977}
5078
5179- (void )dealloc {
5280 [_name release ];
5381 [_messenger release ];
5482 [_codec release ];
83+ [_taskQueue release ];
5584 [super dealloc ];
5685}
5786
@@ -84,7 +113,7 @@ - (void)setMessageHandler:(FlutterMessageHandler)handler {
84113 callback ([codec encode: reply]);
85114 });
86115 };
87- _connection = [ _messenger setMessageHandlerOnChannel: _name binaryMessageHandler: messageHandler] ;
116+ _connection = SetMessageHandler ( _messenger, _name, messageHandler, _taskQueue) ;
88117}
89118
90119- (void )resizeChannelBuffer : (NSInteger )newSize {
@@ -95,6 +124,7 @@ - (void)resizeChannelBuffer:(NSInteger)newSize {
95124
96125#pragma mark - Method channel
97126
127+ // //////////////////////////////////////////////////////////////////////////////
98128@implementation FlutterError
99129+ (instancetype )errorWithCode : (NSString *)code message : (NSString *)message details : (id )details {
100130 return [[[FlutterError alloc ] initWithCode: code message: message details: details] autorelease ];
@@ -133,6 +163,7 @@ - (NSUInteger)hash {
133163}
134164@end
135165
166+ // //////////////////////////////////////////////////////////////////////////////
136167@implementation FlutterMethodCall
137168+ (instancetype )methodCallWithMethodName : (NSString *)method arguments : (id )arguments {
138169 return [[[FlutterMethodCall alloc ] initWithMethodName: method arguments: arguments] autorelease ];
@@ -170,11 +201,13 @@ - (NSUInteger)hash {
170201
171202NSObject const * FlutterMethodNotImplemented = [NSObject new ];
172203
204+ // //////////////////////////////////////////////////////////////////////////////
173205@implementation FlutterMethodChannel {
174206 NSObject <FlutterBinaryMessenger>* _messenger;
175207 NSString * _name;
176208 NSObject <FlutterMethodCodec>* _codec;
177209 FlutterBinaryMessengerConnection _connection;
210+ NSObject <FlutterTaskQueue>* _taskQueue;
178211}
179212
180213+ (instancetype )methodChannelWithName : (NSString *)name
@@ -193,18 +226,27 @@ + (instancetype)methodChannelWithName:(NSString*)name
193226- (instancetype )initWithName : (NSString *)name
194227 binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
195228 codec : (NSObject <FlutterMethodCodec>*)codec {
229+ self = [self initWithName: name binaryMessenger: messenger codec: codec taskQueue: nil ];
230+ return self;
231+ }
232+ - (instancetype )initWithName : (NSString *)name
233+ binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
234+ codec : (NSObject <FlutterMethodCodec>*)codec
235+ taskQueue : (NSObject <FlutterTaskQueue>*)taskQueue {
196236 self = [super init ];
197237 NSAssert (self, @" Super init cannot be nil" );
198238 _name = [name retain ];
199239 _messenger = [messenger retain ];
200240 _codec = [codec retain ];
241+ _taskQueue = [taskQueue retain ];
201242 return self;
202243}
203244
204245- (void )dealloc {
205246 [_name release ];
206247 [_messenger release ];
207248 [_codec release ];
249+ [_taskQueue release ];
208250 [super dealloc ];
209251}
210252
@@ -250,7 +292,7 @@ - (void)setMethodCallHandler:(FlutterMethodCallHandler)handler {
250292 callback ([codec encodeSuccessEnvelope: result]);
251293 });
252294 };
253- _connection = [ _messenger setMessageHandlerOnChannel: _name binaryMessageHandler: messageHandler] ;
295+ _connection = SetMessageHandler ( _messenger, _name, messageHandler, _taskQueue) ;
254296}
255297
256298- (void )resizeChannelBuffer : (NSInteger )newSize {
@@ -263,10 +305,12 @@ - (void)resizeChannelBuffer:(NSInteger)newSize {
263305
264306NSObject const * FlutterEndOfEventStream = [NSObject new ];
265307
308+ // //////////////////////////////////////////////////////////////////////////////
266309@implementation FlutterEventChannel {
267310 NSObject <FlutterBinaryMessenger>* _messenger;
268311 NSString * _name;
269312 NSObject <FlutterMethodCodec>* _codec;
313+ NSObject <FlutterTaskQueue>* _taskQueue;
270314}
271315+ (instancetype )eventChannelWithName : (NSString *)name
272316 binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger {
@@ -284,25 +328,35 @@ + (instancetype)eventChannelWithName:(NSString*)name
284328- (instancetype )initWithName : (NSString *)name
285329 binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
286330 codec : (NSObject <FlutterMethodCodec>*)codec {
331+ return [self initWithName: name binaryMessenger: messenger codec: codec taskQueue: nil ];
332+ }
333+
334+ - (instancetype )initWithName : (NSString *)name
335+ binaryMessenger : (NSObject <FlutterBinaryMessenger>*)messenger
336+ codec : (NSObject <FlutterMethodCodec>*)codec
337+ taskQueue : (NSObject <FlutterTaskQueue>* _Nullable)taskQueue {
287338 self = [super init ];
288339 NSAssert (self, @" Super init cannot be nil" );
289340 _name = [name retain ];
290341 _messenger = [messenger retain ];
291342 _codec = [codec retain ];
343+ _taskQueue = [taskQueue retain ];
292344 return self;
293345}
294346
295347- (void )dealloc {
296348 [_name release ];
297349 [_codec release ];
298350 [_messenger release ];
351+ [_taskQueue release ];
299352 [super dealloc ];
300353}
301354
302355static void SetStreamHandlerMessageHandlerOnChannel (NSObject <FlutterStreamHandler>* handler,
303356 NSString * name,
304357 NSObject <FlutterBinaryMessenger>* messenger,
305- NSObject <FlutterMethodCodec>* codec) {
358+ NSObject <FlutterMethodCodec>* codec,
359+ NSObject <FlutterTaskQueue>* taskQueue) {
306360 __block FlutterEventSink currentSink = nil ;
307361 FlutterBinaryMessageHandler messageHandler = ^(NSData * message, FlutterBinaryReply callback) {
308362 FlutterMethodCall* call = [codec decodeMethodCall: message];
@@ -344,14 +398,14 @@ static void SetStreamHandlerMessageHandlerOnChannel(NSObject<FlutterStreamHandle
344398 callback (nil );
345399 }
346400 };
347- [ messenger setMessageHandlerOnChannel: name binaryMessageHandler: messageHandler] ;
401+ SetMessageHandler ( messenger, name, messageHandler, taskQueue) ;
348402}
349403
350404- (void )setStreamHandler : (NSObject <FlutterStreamHandler>*)handler {
351405 if (!handler) {
352406 [_messenger setMessageHandlerOnChannel: _name binaryMessageHandler: nil ];
353407 return ;
354408 }
355- SetStreamHandlerMessageHandlerOnChannel (handler, _name, _messenger, _codec);
409+ SetStreamHandlerMessageHandlerOnChannel (handler, _name, _messenger, _codec, _taskQueue );
356410}
357411@end
0 commit comments