5 #import "flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h" 7 #pragma mark - Basic message channel 14 NSString* messageString = [NSString stringWithFormat:
@"resize\r%@\r%@", channel, @(newSize)];
15 NSData*
message = [messageString dataUsingEncoding:NSUTF8StringEncoding];
20 NSObject<FlutterBinaryMessenger>* messenger,
23 NSObject<FlutterTaskQueue>* taskQueue) {
25 NSCAssert([messenger respondsToSelector:
@selector(setMessageHandlerOnChannel:
26 binaryMessageHandler:taskQueue:)],
28 return [messenger setMessageHandlerOnChannel:name
29 binaryMessageHandler:handler
32 return [messenger setMessageHandlerOnChannel:name binaryMessageHandler:handler];
38 NSObject<FlutterBinaryMessenger>* _messenger;
40 NSObject<FlutterMessageCodec>*
_codec;
44 + (instancetype)messageChannelWithName:(NSString*)name
45 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
51 + (instancetype)messageChannelWithName:(NSString*)name
52 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
55 binaryMessenger:messenger
56 codec:codec] autorelease];
59 - (instancetype)initWithName:(NSString*)name
60 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
66 - (instancetype)initWithName:(NSString*)
name 67 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
68 codec:(NSObject<FlutterMessageCodec>*)codec
69 taskQueue:(NSObject<FlutterTaskQueue>*)taskQueue {
71 NSAssert(
self,
@"Super init cannot be nil");
72 _name = [name retain];
73 _messenger = [messenger retain];
87 - (void)sendMessage:(
id)
message {
88 [_messenger sendOnChannel:_name message:[_codec encode:message]];
97 [_messenger sendOnChannel:_name message:[_codec encode:message] binaryReply:reply];
103 [_messenger cleanUpConnection:_connection];
106 [_messenger setMessageHandlerOnChannel:_name binaryMessageHandler:nil];
111 NSObject<FlutterMessageCodec>* codec =
_codec;
113 handler([codec decode:message], ^(
id reply) {
120 - (void)resizeChannelBuffer:(NSInteger)newSize {
126 #pragma mark - Method channel 131 return [[[
FlutterError alloc] initWithCode:code message:message details:details] autorelease];
135 NSAssert(
code,
@"Code cannot be nil");
137 NSAssert(
self,
@"Super init cannot be nil");
138 _code = [code retain];
139 _message = [message retain];
140 _details = [details retain];
151 - (
BOOL)isEqual:(
id)
object {
152 if (
self ==
object) {
158 FlutterError* other = (FlutterError*)
object;
159 return [
self.code isEqual:other.code] &&
165 return [
self.code hash] ^ [
self.message hash] ^ [
self.details hash];
172 return [[[
FlutterMethodCall alloc] initWithMethodName:method arguments:arguments] autorelease];
176 NSAssert(
method,
@"Method name cannot be nil");
178 NSAssert(
self,
@"Super init cannot be nil");
179 _method = [method retain];
180 _arguments = [arguments retain];
186 [_arguments release];
190 - (
BOOL)isEqual:(
id)
object {
191 if (
self ==
object) {
197 FlutterMethodCall* other = (FlutterMethodCall*)
object;
198 return [
self.method isEqual:[other
method]] &&
203 return [
self.method hash] ^ [
self.arguments hash];
211 NSObject<FlutterBinaryMessenger>* _messenger;
213 NSObject<FlutterMethodCodec>*
_codec;
218 + (instancetype)methodChannelWithName:(NSString*)name
219 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
224 + (instancetype)methodChannelWithName:(NSString*)name
225 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
226 codec:(NSObject<FlutterMethodCodec>*)codec {
228 codec:codec] autorelease];
231 - (instancetype)initWithName:(NSString*)name
232 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
233 codec:(NSObject<FlutterMethodCodec>*)codec {
237 - (instancetype)initWithName:(NSString*)
name 238 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
239 codec:(NSObject<FlutterMethodCodec>*)codec
240 taskQueue:(NSObject<FlutterTaskQueue>*)taskQueue {
242 NSAssert(
self,
@"Super init cannot be nil");
243 _name = [name retain];
244 _messenger = [messenger retain];
252 [_messenger release];
254 [_taskQueue release];
258 - (void)invokeMethod:(NSString*)method arguments:(
id)arguments {
261 NSData*
message = [_codec encodeMethodCall:methodCall];
262 [_messenger sendOnChannel:_name message:message];
268 NSData*
message = [_codec encodeMethodCall:methodCall];
274 [_messenger sendOnChannel:_name message:message binaryReply:reply];
280 [_messenger cleanUpConnection:_connection];
283 [_messenger setMessageHandlerOnChannel:_name binaryMessageHandler:nil];
288 NSObject<FlutterMethodCodec>* codec =
_codec;
291 handler(call, ^(
id result) {
294 }
else if ([result isKindOfClass:[
FlutterError class]]) {
295 callback([codec encodeErrorEnvelope:(FlutterError*)result]);
297 callback([codec encodeSuccessEnvelope:result]);
304 - (void)resizeChannelBuffer:(NSInteger)newSize {
310 #pragma mark - Event channel 316 NSObject<FlutterBinaryMessenger>* _messenger;
318 NSObject<FlutterMethodCodec>*
_codec;
322 + (instancetype)eventChannelWithName:(NSString*)name
323 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
328 + (instancetype)eventChannelWithName:(NSString*)name
329 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
330 codec:(NSObject<FlutterMethodCodec>*)codec {
332 codec:codec] autorelease];
335 - (instancetype)initWithName:(NSString*)name
336 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
337 codec:(NSObject<FlutterMethodCodec>*)codec {
341 - (instancetype)initWithName:(NSString*)name
342 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
343 codec:(NSObject<FlutterMethodCodec>*)codec
346 NSAssert(
self,
@"Super init cannot be nil");
347 _name = [name retain];
348 _messenger = [messenger retain];
357 [_messenger release];
358 [_taskQueue release];
363 NSObject<FlutterStreamHandler>* handler,
365 NSObject<FlutterBinaryMessenger>* messenger,
366 NSObject<FlutterMethodCodec>* codec,
367 NSObject<FlutterTaskQueue>* taskQueue) {
371 if ([call.
method isEqual:
@"listen"]) {
375 NSLog(
@"Failed to cancel existing stream: %@. %@ (%@)", error.
code, error.
message,
379 currentSink = ^(
id event) {
381 [messenger sendOnChannel:name message:nil];
383 [messenger sendOnChannel:name message:[codec encodeErrorEnvelope:(FlutterError*)event]];
385 [messenger sendOnChannel:name message:[codec encodeSuccessEnvelope:event]];
388 FlutterError*
error = [handler onListenWithArguments:call.arguments eventSink:currentSink];
390 callback([codec encodeErrorEnvelope:error]);
392 callback([codec encodeSuccessEnvelope:nil]);
394 }
else if ([call.
method isEqual:
@"cancel"]) {
397 [codec encodeErrorEnvelope:[
FlutterError errorWithCode:
@"error" 398 message:
@"No active stream to cancel" 405 callback([codec encodeErrorEnvelope:error]);
407 callback([codec encodeSuccessEnvelope:nil]);
416 - (void)setStreamHandler:(NSObject<FlutterStreamHandler>*)handler {
418 [_messenger cleanUpConnection:_connection];
static FlutterBinaryMessengerConnection SetMessageHandler(NSObject< FlutterBinaryMessenger > *messenger, NSString *name, FlutterBinaryMessageHandler handler, NSObject< FlutterTaskQueue > *taskQueue)
const uint8_t uint32_t uint32_t GError ** error
instancetype methodChannelWithName:binaryMessenger:codec:(NSString *name, [binaryMessenger] NSObject< FlutterBinaryMessenger > *messenger, [codec] NSObject< FlutterMethodCodec > *codec)
instancetype eventChannelWithName:binaryMessenger:codec:(NSString *name, [binaryMessenger] NSObject< FlutterBinaryMessenger > *messenger, [codec] NSObject< FlutterMethodCodec > *codec)
instancetype messageChannelWithName:binaryMessenger:codec:(NSString *name, [binaryMessenger] NSObject< FlutterBinaryMessenger > *messenger, [codec] NSObject< FlutterMessageCodec > *codec)
NSObject const * FlutterMethodNotImplemented
NS_ASSUME_NONNULL_BEGIN typedef void(^ FlutterBinaryReply)(NSData *_Nullable reply)
void(^ FlutterMethodCallHandler)(FlutterMethodCall *call, FlutterResult result)
static void ResizeChannelBuffer(NSObject< FlutterBinaryMessenger > *binaryMessenger, NSString *channel, NSInteger newSize)
instancetype initWithName:binaryMessenger:codec:taskQueue:(NSString *name, [binaryMessenger] NSObject< FlutterBinaryMessenger > *messenger, [codec] NSObject< FlutterMethodCodec > *codec, [taskQueue] NSObject< FlutterTaskQueue > *_Nullable taskQueue)
static NSString *const kFlutterChannelBuffersChannel
DEF_SWITCHES_START aot vmservice shared library name
FlutterBinaryMessengerConnection _connection
NSObject< FlutterTaskQueue > * _taskQueue
void(^ FlutterBinaryMessageHandler)(NSData *_Nullable message, FlutterBinaryReply reply)
instancetype sharedInstance()
void(^ FlutterEventSink)(id _Nullable event)
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
NSObject const * FlutterEndOfEventStream
instancetype initWithName:binaryMessenger:codec:taskQueue:(NSString *name, [binaryMessenger] NSObject< FlutterBinaryMessenger > *messenger, [codec] NSObject< FlutterMessageCodec > *codec, [taskQueue] NSObject< FlutterTaskQueue > *_Nullable taskQueue)
void(^ FlutterMessageHandler)(id _Nullable message, FlutterReply callback)
instancetype initWithName:binaryMessenger:codec:taskQueue:(NSString *name, [binaryMessenger] NSObject< FlutterBinaryMessenger > *messenger, [codec] NSObject< FlutterMethodCodec > *codec, [taskQueue] NSObject< FlutterTaskQueue > *_Nullable taskQueue)
void(^ FlutterResult)(id _Nullable result)
NS_ASSUME_NONNULL_BEGIN typedef void(^ FlutterReply)(id _Nullable reply)
instancetype methodCallWithMethodName:arguments:(NSString *method, [arguments] id _Nullable arguments)
NSObject< FlutterMessageCodec > * _codec
int64_t FlutterBinaryMessengerConnection
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback