9#pragma mark - Basic message channel
18 NSCAssert(newSize >= 0,
@"Channel buffer size must be non-negative");
22 NSArray*
args = @[
channel, @(
static_cast<int>(newSize)) ];
26 NSData*
message = [codec encodeMethodCall:resizeMethodCall];
44 arguments:@[
channel, @(!warns) ]];
46 NSData*
message = [codec encodeMethodCall:overflowMethodCall];
51 NSObject<FlutterBinaryMessenger>* messenger,
54 NSObject<FlutterTaskQueue>* taskQueue) {
58 respondsToSelector:
@selector(
59 setMessageHandlerOnChannel:binaryMessageHandler:taskQueue:)],
61 return [messenger setMessageHandlerOnChannel:
name
65 return [messenger setMessageHandlerOnChannel:
name binaryMessageHandler:
handler];
71 NSObject<FlutterBinaryMessenger>* _messenger;
73 NSObject<FlutterMessageCodec>*
_codec;
77+ (instancetype)messageChannelWithName:(NSString*)name
78 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
84+ (instancetype)messageChannelWithName:(NSString*)name
85 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
86 codec:(NSObject<FlutterMessageCodec>*)codec {
88 binaryMessenger:messenger
92- (instancetype)initWithName:(NSString*)name
93 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
94 codec:(NSObject<FlutterMessageCodec>*)codec {
95 self = [
self initWithName:name binaryMessenger:messenger codec:codec taskQueue:nil];
99- (instancetype)initWithName:(NSString*)name
100 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
101 codec:(NSObject<FlutterMessageCodec>*)codec
102 taskQueue:(NSObject<FlutterTaskQueue>*)taskQueue {
104 NSAssert(
self,
@"Super init cannot be nil");
106 _messenger = messenger;
112- (void)sendMessage:(
id)message {
113 [_messenger sendOnChannel:_name message:[_codec encode:message]];
116- (void)sendMessage:(
id)message reply:(
FlutterReply)callback {
122 [_messenger sendOnChannel:_name message:[_codec encode:message] binaryReply:reply];
128 [_messenger cleanUpConnection:_connection];
131 [_messenger setMessageHandlerOnChannel:_name binaryMessageHandler:nil];
139 NSObject<FlutterMessageCodec>* codec =
_codec;
148+ (void)resizeChannelWithName:(NSString*)name
149 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
150 size:(NSInteger)newSize {
154- (void)resizeChannelBuffer:(NSInteger)newSize {
158+ (void)setWarnsOnOverflow:(
BOOL)warns
159 forChannelWithName:(NSString*)name
160 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
164- (void)setWarnsOnOverflow:(
BOOL)warns {
170#pragma mark - Method channel
174+ (instancetype)errorWithCode:(NSString*)code message:(NSString*)message details:(
id)details {
175 return [[
FlutterError alloc] initWithCode:code message:message details:details];
178- (instancetype)initWithCode:(NSString*)code message:(NSString*)message details:(
id)details {
179 NSAssert(
code,
@"Code cannot be nil");
181 NSAssert(
self,
@"Super init cannot be nil");
183 _message = [message copy];
188- (
BOOL)isEqual:(
id)object {
189 if (
self ==
object) {
196 return [
self.code isEqual:other.code] &&
202 return [
self.code hash] ^ [
self.message hash] ^ [
self.details hash];
208+ (instancetype)methodCallWithMethodName:(NSString*)method arguments:(
id)arguments {
209 return [[
FlutterMethodCall alloc] initWithMethodName:method arguments:arguments];
212- (instancetype)initWithMethodName:(NSString*)method arguments:(
id)arguments {
213 NSAssert(
method,
@"Method name cannot be nil");
215 NSAssert(
self,
@"Super init cannot be nil");
216 _method = [method copy];
221- (
BOOL)isEqual:(
id)object {
222 if (
self ==
object) {
229 return [
self.method isEqual:[other
method]] &&
234 return [
self.method hash] ^ [
self.arguments hash];
242 NSObject<FlutterBinaryMessenger>* _messenger;
244 NSObject<FlutterMethodCodec>*
_codec;
249+ (instancetype)methodChannelWithName:(NSString*)name
250 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
255+ (instancetype)methodChannelWithName:(NSString*)name
256 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
257 codec:(NSObject<FlutterMethodCodec>*)codec {
261- (instancetype)initWithName:(NSString*)name
262 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
263 codec:(NSObject<FlutterMethodCodec>*)codec {
264 self = [
self initWithName:name binaryMessenger:messenger codec:codec taskQueue:nil];
267- (instancetype)initWithName:(NSString*)name
268 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
269 codec:(NSObject<FlutterMethodCodec>*)codec
270 taskQueue:(NSObject<FlutterTaskQueue>*)taskQueue {
272 NSAssert(
self,
@"Super init cannot be nil");
274 _messenger = messenger;
280- (void)invokeMethod:(NSString*)method arguments:(
id)arguments {
283 NSData*
message = [_codec encodeMethodCall:methodCall];
284 [_messenger sendOnChannel:_name message:message];
287- (void)invokeMethod:(NSString*)method arguments:(
id)arguments result:(
FlutterResult)callback {
290 NSData*
message = [_codec encodeMethodCall:methodCall];
296 [_messenger sendOnChannel:_name message:message binaryReply:reply];
302 [_messenger cleanUpConnection:_connection];
305 [_messenger setMessageHandlerOnChannel:_name binaryMessageHandler:nil];
312 NSObject<FlutterMethodCodec>* codec =
_codec;
318 }
else if ([result isKindOfClass:[
FlutterError class]]) {
321 callback([codec encodeSuccessEnvelope:result]);
328- (void)resizeChannelBuffer:(NSInteger)newSize {
334#pragma mark - Event channel
340 NSObject<FlutterBinaryMessenger>* _messenger;
342 NSObject<FlutterMethodCodec>*
_codec;
346+ (instancetype)eventChannelWithName:(NSString*)name
347 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
352+ (instancetype)eventChannelWithName:(NSString*)name
353 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
354 codec:(NSObject<FlutterMethodCodec>*)codec {
355 return [[
FlutterEventChannel alloc] initWithName:name binaryMessenger:messenger codec:codec];
358- (instancetype)initWithName:(NSString*)name
359 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
360 codec:(NSObject<FlutterMethodCodec>*)codec {
361 return [
self initWithName:name binaryMessenger:messenger codec:codec taskQueue:nil];
364- (instancetype)initWithName:(NSString*)name
365 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
366 codec:(NSObject<FlutterMethodCodec>*)codec
367 taskQueue:(NSObject<FlutterTaskQueue>* _Nullable)taskQueue {
369 NSAssert(
self,
@"Super init cannot be nil");
371 _messenger = messenger;
378 NSObject<FlutterStreamHandler>*
handler,
380 NSObject<FlutterBinaryMessenger>* messenger,
381 NSObject<FlutterMethodCodec>* codec,
382 NSObject<FlutterTaskQueue>* taskQueue) {
386 if ([call.
method isEqual:
@"listen"]) {
390 NSLog(
@"Failed to cancel existing stream: %@. %@ (%@)",
error.code,
error.message,
394 currentSink = ^(
id event) {
396 [messenger sendOnChannel:name message:nil];
397 }
else if ([event isKindOfClass:[
FlutterError class]]) {
398 [messenger sendOnChannel:name message:[codec encodeErrorEnvelope:(FlutterError*)event]];
400 [messenger sendOnChannel:name message:[codec encodeSuccessEnvelope:event]];
403 FlutterError*
error = [handler onListenWithArguments:call.arguments eventSink:currentSink];
407 callback([codec encodeSuccessEnvelope:nil]);
409 }
else if ([call.
method isEqual:
@"cancel"]) {
412 [codec encodeErrorEnvelope:[
FlutterError errorWithCode:
@"error"
413 message:
@"No active stream to cancel"
422 callback([codec encodeSuccessEnvelope:nil]);
431- (void)setStreamHandler:(NSObject<FlutterStreamHandler>*)handler {
433 [_messenger cleanUpConnection:_connection];
NS_ASSUME_NONNULL_BEGIN typedef void(^ FlutterBinaryReply)(NSData *_Nullable reply)
void(^ FlutterBinaryMessageHandler)(NSData *_Nullable message, FlutterBinaryReply reply)
int64_t FlutterBinaryMessengerConnection
void(^ FlutterResult)(id _Nullable result)
void(^ FlutterMethodCallHandler)(FlutterMethodCall *call, FlutterResult result)
FLUTTER_DARWIN_EXPORT NSObject const * FlutterMethodNotImplemented
void(^ FlutterMessageHandler)(id _Nullable message, FlutterReply callback)
FLUTTER_DARWIN_EXPORT NSObject const * FlutterEndOfEventStream
NS_ASSUME_NONNULL_BEGIN typedef void(^ FlutterReply)(id _Nullable reply)
void(^ FlutterEventSink)(id _Nullable event)
static NSString *const kOverflowMethod
FlutterBinaryMessengerConnection _connection
static void SetWarnsOnOverflow(NSObject< FlutterBinaryMessenger > *binaryMessenger, NSString *channel, BOOL warns)
static FlutterBinaryMessengerConnection SetMessageHandler(NSObject< FlutterBinaryMessenger > *messenger, NSString *name, FlutterBinaryMessageHandler handler, NSObject< FlutterTaskQueue > *taskQueue)
NSObject< FlutterMessageCodec > * _codec
NSObject< FlutterTaskQueue > * _taskQueue
static void ResizeChannelBuffer(NSObject< FlutterBinaryMessenger > *binaryMessenger, NSString *channel, NSInteger newSize)
static NSString *const kResizeMethod
static FLUTTER_ASSERT_ARC NSString *const kFlutterChannelBuffersChannel
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
const gchar FlBinaryMessengerMessageHandler handler
const uint8_t uint32_t uint32_t GError ** error
FlutterDesktopBinaryReply callback
instancetype messageChannelWithName:binaryMessenger:codec:(NSString *name,[binaryMessenger] NSObject< FlutterBinaryMessenger > *messenger,[codec] NSObject< FlutterMessageCodec > *codec)
instancetype eventChannelWithName:binaryMessenger:codec:(NSString *name,[binaryMessenger] NSObject< FlutterBinaryMessenger > *messenger,[codec] NSObject< FlutterMethodCodec > *codec)
instancetype methodCallWithMethodName:arguments:(NSString *method,[arguments] id _Nullable arguments)
instancetype methodChannelWithName:binaryMessenger:codec:(NSString *name,[binaryMessenger] NSObject< FlutterBinaryMessenger > *messenger,[codec] NSObject< FlutterMethodCodec > *codec)
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
instancetype sharedInstance()