| Flutter Linux Embedder |

Classes | Functions | Variables
fl_binary_messenger.cc File Reference
`#include "flutter/shell/platform/linux/public/flutter_linux/fl_binary_messenger.h"`
`#include "flutter/shell/platform/linux/fl_binary_messenger_private.h"`
`#include "flutter/fml/logging.h"`
`#include "flutter/shell/platform/linux/fl_engine_private.h"`
`#include "flutter/shell/platform/linux/fl_method_codec_private.h"`
`#include "flutter/shell/platform/linux/public/flutter_linux/fl_engine.h"`
`#include "flutter/shell/platform/linux/public/flutter_linux/fl_method_channel.h"`
`#include "flutter/shell/platform/linux/public/flutter_linux/fl_method_codec.h"`
`#include "flutter/shell/platform/linux/public/flutter_linux/fl_standard_method_codec.h"`
`#include <gmodule.h>`

Go to the source code of this file.

## Classes
struct | _FlBinaryMessengerResponseHandleImpl
struct | PlatformMessageHandler

## Functions
| G_DEFINE_QUARK (fl_binary_messenger_codec_error_quark, fl_binary_messenger_codec_error) G_DECLARE_FINAL_TYPE(FlBinaryMessengerImpl
GObject | G_DECLARE_FINAL_TYPE (FlBinaryMessengerResponseHandleImpl, fl_binary_messenger_response_handle_impl, FL, BINARY_MESSENGER_RESPONSE_HANDLE_IMPL, FlBinaryMessengerResponseHandle) struct _FlBinaryMessengerImpl
static void | fl_binary_messenger_impl_iface_init (FlBinaryMessengerInterface *iface)
| G_DEFINE_TYPE_WITH_CODE (FlBinaryMessengerImpl, fl_binary_messenger_impl, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(fl_binary_messenger_get_type(), fl_binary_messenger_impl_iface_init)) static void fl_binary_messenger_response_handle_class_init(FlBinaryMessengerResponseHandleClass *klass)
| G_DEFINE_TYPE (FlBinaryMessengerResponseHandle, fl_binary_messenger_response_handle, G_TYPE_OBJECT) static void fl_binary_messenger_response_handle_init(FlBinaryMessengerResponseHandle *self)
| G_DEFINE_TYPE (FlBinaryMessengerResponseHandleImpl, fl_binary_messenger_response_handle_impl, fl_binary_messenger_response_handle_get_type()) static void fl_binary_messenger_default_init(FlBinaryMessengerInterface *iface)
static void | fl_binary_messenger_response_handle_impl_dispose (GObject *object)
static void | fl_binary_messenger_response_handle_impl_class_init (FlBinaryMessengerResponseHandleImplClass *klass)
static void | fl_binary_messenger_response_handle_impl_init (FlBinaryMessengerResponseHandleImpl *self)
static FlBinaryMessengerResponseHandleImpl * | fl_binary_messenger_response_handle_impl_new (FlBinaryMessengerImpl *messenger, const FlutterPlatformMessageResponseHandle *response_handle)
static PlatformMessageHandler * | platform_message_handler_new (FlBinaryMessengerMessageHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
static void | platform_message_handler_free (gpointer data)
static gboolean | fl_binary_messenger_platform_message_cb (FlEngine *engine, const gchar *channel, GBytes *message, const FlutterPlatformMessageResponseHandle *response_handle, void *user_data)
static void | fl_binary_messenger_impl_dispose (GObject *object)
static void | set_message_handler_on_channel (FlBinaryMessenger *messenger, const gchar *channel, FlBinaryMessengerMessageHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
static gboolean | do_unref (gpointer value)
static gboolean | send_response (FlBinaryMessenger *messenger, FlBinaryMessengerResponseHandle *response_handle_, GBytes *response, GError **error)
static void | platform_message_ready_cb (GObject *object, GAsyncResult *result, gpointer user_data)
static void | send_on_channel (FlBinaryMessenger *messenger, const gchar *channel, GBytes *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
static GBytes * | send_on_channel_finish (FlBinaryMessenger *messenger, GAsyncResult *result, GError **error)
static gboolean | finish_method (GObject *object, GAsyncResult *result, GError **error)
static void | resize_channel_response_cb (GObject *object, GAsyncResult *result, gpointer user_data)
static void | resize_channel (FlBinaryMessenger *messenger, const gchar *channel, int64_t new_size)
static void | set_warns_on_channel_overflow_response_cb (GObject *object, GAsyncResult *result, gpointer user_data)
static void | set_warns_on_channel_overflow (FlBinaryMessenger *messenger, const gchar *channel, bool warns)
static void | shutdown (FlBinaryMessenger *messenger)
static void | fl_binary_messenger_impl_class_init (FlBinaryMessengerImplClass *klass)
static void | fl_binary_messenger_impl_init (FlBinaryMessengerImpl *self)
FlBinaryMessenger * | fl_binary_messenger_new (FlEngine *engine)
G_MODULE_EXPORT void | fl_binary_messenger_set_message_handler_on_channel (FlBinaryMessenger *self, const gchar *channel, FlBinaryMessengerMessageHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
G_MODULE_EXPORT gboolean | fl_binary_messenger_send_response (FlBinaryMessenger *self, FlBinaryMessengerResponseHandle *response_handle, GBytes *response, GError **error)
G_MODULE_EXPORT void | fl_binary_messenger_send_on_channel (FlBinaryMessenger *self, const gchar *channel, GBytes *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
G_MODULE_EXPORT GBytes * | fl_binary_messenger_send_on_channel_finish (FlBinaryMessenger *self, GAsyncResult *result, GError **error)
G_MODULE_EXPORT void | fl_binary_messenger_resize_channel (FlBinaryMessenger *self, const gchar *channel, int64_t new_size)
G_MODULE_EXPORT void | fl_binary_messenger_set_warns_on_channel_overflow (FlBinaryMessenger *self, const gchar *channel, bool warns)
void | fl_binary_messenger_shutdown (FlBinaryMessenger *self)

## Variables
static constexpr char | kControlChannelName [] = "dev.flutter/channel-buffers"
static constexpr char | kResizeMethod [] = "resize"
static constexpr char | kOverflowMethod [] = "overflow"
| fl_binary_messenger_impl
| FL
| BINARY_MESSENGER_IMPL

## Function Documentation

## ◆ do_unref()

static gboolean do_unref | ( | gpointer | value | ) |
| static

Definition at line 216 of file fl_binary_messenger.cc.

216 {
217 g_object_unref(value);
218 return G_SOURCE_REMOVE;
219 }

References value.

Referenced by send_response().

## ◆ finish_method()

static gboolean finish_method | ( | GObject * | object,
|  | GAsyncResult * | result,
|  | GError ** | error
| ) |  |
| static

Definition at line 305 of file fl_binary_messenger.cc.

307 {
308 g_autoptr(GBytes) response = fl_binary_messenger_send_on_channel_finish(
309 FL_BINARY_MESSENGER(object), result, error);
310 if (response == nullptr) {
311 return FALSE;
312 }
313 g_autoptr(FlStandardMethodCodec) codec = fl_standard_method_codec_new();
314 return fl_method_codec_decode_response(FL_METHOD_CODEC(codec), response,
315 error) != nullptr;
316 }

References error, fl_binary_messenger_send_on_channel_finish(), fl_method_codec_decode_response(), fl_standard_method_codec_new(), and result.

Referenced by perform_action_response_cb(), resize_channel_response_cb(), set_warns_on_channel_overflow_response_cb(), and update_editing_state_response_cb().

## ◆ fl_binary_messenger_impl_class_init()

static void fl_binary_messenger_impl_class_init | ( | FlBinaryMessengerImplClass * | klass | ) |
| static

Definition at line 378 of file fl_binary_messenger.cc.

379 {
380 G_OBJECT_CLASS(klass)->dispose = fl_binary_messenger_impl_dispose;
381 }

References fl_binary_messenger_impl_dispose().

## ◆ fl_binary_messenger_impl_dispose()

static void fl_binary_messenger_impl_dispose | ( | GObject * | object | ) |
| static

Definition at line 175 of file fl_binary_messenger.cc.

175 {
176 FlBinaryMessengerImpl* self = FL_BINARY_MESSENGER_IMPL(object);
177
178 g_weak_ref_clear(&self->engine);
179
180 g_clear_pointer(&self->platform_message_handlers, g_hash_table_unref);
181
182 G_OBJECT_CLASS(fl_binary_messenger_impl_parent_class)->dispose(object);
183 }

Referenced by fl_binary_messenger_impl_class_init().

## ◆ fl_binary_messenger_impl_iface_init()

static void fl_binary_messenger_impl_iface_init | ( | FlBinaryMessengerInterface * | iface | ) |
| static

Definition at line 383 of file fl_binary_messenger.cc.

384 {
385 iface->set_message_handler_on_channel = set_message_handler_on_channel;
386 iface->send_response = send_response;
387 iface->send_on_channel = send_on_channel;
388 iface->send_on_channel_finish = send_on_channel_finish;
389 iface->resize_channel = resize_channel;
390 iface->set_warns_on_channel_overflow = set_warns_on_channel_overflow;
391 iface->shutdown = shutdown;
392 }

References resize_channel(), send_on_channel(), send_on_channel_finish(), send_response(), set_message_handler_on_channel(), set_warns_on_channel_overflow(), and shutdown().

## ◆ fl_binary_messenger_impl_init()

static void fl_binary_messenger_impl_init | ( | FlBinaryMessengerImpl * | self | ) |
| static

Definition at line 394 of file fl_binary_messenger.cc.

394 {
395 self->platform_message_handlers = g_hash_table_new_full(
396 g_str_hash, g_str_equal, g_free, platform_message_handler_free);
397 }

References platform_message_handler_free().

## ◆ fl_binary_messenger_new()

FlBinaryMessenger* fl_binary_messenger_new | ( | FlEngine * | engine | ) |

fl_binary_messenger_new: @engine: The #FlEngine to communicate with.

Creates a new #FlBinaryMessenger. The binary messenger will take control of the engines platform message handler.

Returns: a new #FlBinaryMessenger.

Definition at line 399 of file fl_binary_messenger.cc.

399 {
400 g_return_val_if_fail(FL_IS_ENGINE(engine), nullptr);
401
402 FlBinaryMessengerImpl* self = FL_BINARY_MESSENGER_IMPL(
403 g_object_new(fl_binary_messenger_impl_get_type(), nullptr));
404
405 // Added to stop compiler complaining about an unused function.
406 FL_IS_BINARY_MESSENGER_IMPL(self);
407
408 g_weak_ref_init(&self->engine, G_OBJECT(engine));
409
410 fl_engine_set_platform_message_handler(
411 engine, fl_binary_messenger_platform_message_cb, self, NULL);
412
413 return FL_BINARY_MESSENGER(self);
414 }

References fl_binary_messenger_platform_message_cb(), and fl_engine_set_platform_message_handler().

Referenced by fl_engine_new(), TEST(), and test_lock_event().

## ◆ fl_binary_messenger_platform_message_cb()

static gboolean fl_binary_messenger_platform_message_cb | ( | FlEngine * | engine,
|  | const gchar * | channel,
|  | GBytes * | message,
|  | const FlutterPlatformMessageResponseHandle * | response_handle,
|  | void * | user_data
| ) |  |
| static

Definition at line 152 of file fl_binary_messenger.cc.

157 {
158 FlBinaryMessengerImpl* self = FL_BINARY_MESSENGER_IMPL(user_data);
159
160 PlatformMessageHandler* handler = static_cast<PlatformMessageHandler*>(
161 g_hash_table_lookup(self->platform_message_handlers, channel));
162 if (handler == nullptr) {
163 return FALSE;
164 }
165
166 g_autoptr(FlBinaryMessengerResponseHandleImpl) handle =
167 fl_binary_messenger_response_handle_impl_new(self, response_handle);
168 handler->message_handler(FL_BINARY_MESSENGER(self), channel, message,
169 FL_BINARY_MESSENGER_RESPONSE_HANDLE(handle),
170 handler->message_handler_data);
171
172 return TRUE;
173 }

References fl_binary_messenger_response_handle_impl_new(), PlatformMessageHandler::message_handler, PlatformMessageHandler::message_handler_data, TRUE, and user_data.

Referenced by fl_binary_messenger_new().

## ◆ fl_binary_messenger_resize_channel()

G_MODULE_EXPORT void fl_binary_messenger_resize_channel | ( | FlBinaryMessenger * | messenger,
|  | const gchar * | channel,
|  | int64_t | new_size
| ) |  |

fl_binary_messenger_resize_channel: @binary_messenger: an #FlBinaryMessenger. @channel: channel to be resize. @new_size: the new size for the channel buffer.

Sends a message to the control channel asking to resize a channel buffer.

Definition at line 467 of file fl_binary_messenger.cc.

469 {
470 g_return_if_fail(FL_IS_BINARY_MESSENGER(self));
471
472 return FL_BINARY_MESSENGER_GET_IFACE(self)->resize_channel(self, channel,
473 new_size);
474 }

Referenced by TEST().

## ◆ fl_binary_messenger_response_handle_impl_class_init()

static void fl_binary_messenger_response_handle_impl_class_init | ( | FlBinaryMessengerResponseHandleImplClass * | klass | ) |
| static

Definition at line 103 of file fl_binary_messenger.cc.

104 {
105 G_OBJECT_CLASS(klass)->dispose =
106 fl_binary_messenger_response_handle_impl_dispose;
107 }

References fl_binary_messenger_response_handle_impl_dispose().

## ◆ fl_binary_messenger_response_handle_impl_dispose()

static void fl_binary_messenger_response_handle_impl_dispose | ( | GObject * | object | ) |
| static

Definition at line 86 of file fl_binary_messenger.cc.

86 {
87 FlBinaryMessengerResponseHandleImpl* self =
88 FL_BINARY_MESSENGER_RESPONSE_HANDLE_IMPL(object);
89
90 g_autoptr(FlEngine) engine =
91 FL_ENGINE(g_weak_ref_get(&self->messenger->engine));
92 if (self->response_handle != nullptr && engine != nullptr) {
93 g_critical("FlBinaryMessengerResponseHandle was not responded to");
94 }
95
96 g_clear_object(&self->messenger);
97 self->response_handle = nullptr;
98
99 G_OBJECT_CLASS(fl_binary_messenger_response_handle_impl_parent_class)
100 ->dispose(object);
101 }

Referenced by fl_binary_messenger_response_handle_impl_class_init().

## ◆ fl_binary_messenger_response_handle_impl_init()

static void fl_binary_messenger_response_handle_impl_init | ( | FlBinaryMessengerResponseHandleImpl * | self | ) |
| static

Definition at line 109 of file fl_binary_messenger.cc.

110 {}

## ◆ fl_binary_messenger_response_handle_impl_new()

static FlBinaryMessengerResponseHandleImpl* fl_binary_messenger_response_handle_impl_new | ( | FlBinaryMessengerImpl * | messenger,
|  | const FlutterPlatformMessageResponseHandle * | response_handle
| ) |  |
| static

Definition at line 113 of file fl_binary_messenger.cc.

115 {
116 FlBinaryMessengerResponseHandleImpl* self =
117 FL_BINARY_MESSENGER_RESPONSE_HANDLE_IMPL(g_object_new(
118 fl_binary_messenger_response_handle_impl_get_type(), nullptr));
119
120 self->messenger = FL_BINARY_MESSENGER_IMPL(g_object_ref(messenger));
121 self->response_handle = response_handle;
122
123 return self;
124 }

Referenced by fl_binary_messenger_platform_message_cb().

## ◆ fl_binary_messenger_send_on_channel()

G_MODULE_EXPORT void fl_binary_messenger_send_on_channel | ( | FlBinaryMessenger * | messenger,
|  | const gchar * | channel,
|  | GBytes * | message,
|  | GCancellable * | cancellable,
|  | GAsyncReadyCallback | callback,
|  | gpointer | user_data
| ) |  |

fl_binary_messenger_send_on_channel: @binary_messenger: an #FlBinaryMessenger. @channel: channel to send to. @message: (allow-none): message buffer to send or NULL for an empty message. @cancellable: (allow-none): a #GCancellable or NULL. @callback: (scope async): a #GAsyncReadyCallback to call when the request is satisfied. @user_data: (closure): user data to pass to @callback.

Asynchronously sends a platform message.

Definition at line 443 of file fl_binary_messenger.cc.

449 {
450 g_return_if_fail(FL_IS_BINARY_MESSENGER(self));
451 g_return_if_fail(channel != nullptr);
452
453 FL_BINARY_MESSENGER_GET_IFACE(self)->send_on_channel(
454 self, channel, message, cancellable, callback, user_data);
455 }

References callback, and user_data.

Referenced by fl_basic_message_channel_send(), fl_event_channel_send(), fl_event_channel_send_end_of_stream(), fl_event_channel_send_error(), fl_method_channel_invoke_method(), resize_channel(), set_app_lifecycle_state(), set_warns_on_channel_overflow(), and TEST().

## ◆ fl_binary_messenger_send_on_channel_finish()

G_MODULE_EXPORT GBytes* fl_binary_messenger_send_on_channel_finish | ( | FlBinaryMessenger * | messenger,
|  | GAsyncResult * | result,
|  | GError ** | error
| ) |  |

fl_binary_messenger_send_on_channel_finish: @messenger: an #FlBinaryMessenger.

Returns
  : a #GAsyncResult. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore.

Completes request started with fl_binary_messenger_send_on_channel().

Returns: (transfer full): message response on success or NULL on error.

Definition at line 457 of file fl_binary_messenger.cc.

460 {
461 g_return_val_if_fail(FL_IS_BINARY_MESSENGER(self), FALSE);
462
463 return FL_BINARY_MESSENGER_GET_IFACE(self)->send_on_channel_finish(
464 self, result, error);
465 }

References error, and result.

Referenced by echo_response_cb(), failure_response_cb(), fake_response_cb(), finish_method(), fl_basic_message_channel_send_finish(), fl_method_channel_invoke_method_finish(), and nullptr_response_cb().

## ◆ fl_binary_messenger_send_response()

G_MODULE_EXPORT gboolean fl_binary_messenger_send_response | ( | FlBinaryMessenger * | messenger,
|  | FlBinaryMessengerResponseHandle * | response_handle,
|  | GBytes * | response,
|  | GError ** | error
| ) |  |

fl_binary_messenger_send_response: @binary_messenger: an #FlBinaryMessenger. @response_handle: handle that was provided in a FlBinaryMessengerMessageHandler. @response: (allow-none): response to send or NULL for an empty response. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore.

Responds to a platform message. This function is thread-safe.

Returns: TRUE on success.

Definition at line 430 of file fl_binary_messenger.cc.

434 {
435 g_return_val_if_fail(FL_IS_BINARY_MESSENGER(self), FALSE);
436 g_return_val_if_fail(FL_IS_BINARY_MESSENGER_RESPONSE_HANDLE(response_handle),
437 FALSE);
438
439 return FL_BINARY_MESSENGER_GET_IFACE(self)->send_response(
440 self, response_handle, response, error);
441 }

References error.

Referenced by cancel_exception_response_cb(), fake_message_cb(), fl_basic_message_channel_respond(), fl_method_channel_respond(), fl_test_application_activate(), listen_exception_response_cb(), message_cb(), method_call_error_response_cb(), method_call_not_implemented_response_cb(), method_call_success_response_cb(), response_cb(), response_from_thread_main(), send_events_events_cb(), and TEST().

## ◆ fl_binary_messenger_set_message_handler_on_channel()

G_MODULE_EXPORT void fl_binary_messenger_set_message_handler_on_channel | ( | FlBinaryMessenger * | messenger,
|  | const gchar * | channel,
|  | FlBinaryMessengerMessageHandler | handler,
|  | gpointer | user_data,
|  | GDestroyNotify | destroy_notify
| ) |  |

FlBinaryMessenger:

#FlBinaryMessenger is an object that allows sending and receiving of platform messages with an #FlEngine. FlBinaryMessengerResponseHandle:

#FlBinaryMessengerResponseHandle is an object used to send responses with. fl_binary_messenger_set_platform_message_handler: @binary_messenger: an #FlBinaryMessenger. @channel: channel to listen on. @handler: (allow-none): function to call when a message is received on this channel or NULL to disable a handler @user_data: (closure): user data to pass to @handler. @destroy_notify: (allow-none): a function which gets called to free @user_data, or NULL.

Sets the function called when a platform message is received on the given channel. See FlBinaryMessengerMessageHandler for details on how to respond to messages.

The handler is removed if the channel is closed or is replaced by another handler, set @destroy_notify if you want to detect this.

Definition at line 416 of file fl_binary_messenger.cc.

421 {
422 g_return_if_fail(FL_IS_BINARY_MESSENGER(self));
423 g_return_if_fail(channel != nullptr);
424
425 FL_BINARY_MESSENGER_GET_IFACE(self)->set_message_handler_on_channel(
426 self, channel, handler, user_data, destroy_notify);
427 }

References user_data.

Referenced by fl_basic_message_channel_dispose(), fl_basic_message_channel_new(), fl_event_channel_dispose(), fl_event_channel_new(), fl_method_channel_new(), and TEST().

## ◆ fl_binary_messenger_set_warns_on_channel_overflow()

G_MODULE_EXPORT void fl_binary_messenger_set_warns_on_channel_overflow | ( | FlBinaryMessenger * | messenger,
|  | const gchar * | channel,
|  | bool | warns
| ) |  |

fl_binary_messenger_set_warns_on_channel_overflow: @messenger: an #FlBinaryMessenger. @channel: channel to be allowed to overflow silently. @warns: when false, the channel is expected to overflow and warning messages will not be shown.

Sends a message to the control channel asking to allow or disallow a channel to overflow silently.

Definition at line 476 of file fl_binary_messenger.cc.

479 {
480 g_return_if_fail(FL_IS_BINARY_MESSENGER(self));
481
482 return FL_BINARY_MESSENGER_GET_IFACE(self)->set_warns_on_channel_overflow(
483 self, channel, warns);
484 }

Referenced by TEST().

## ◆ fl_binary_messenger_shutdown()

void fl_binary_messenger_shutdown | ( | FlBinaryMessenger * | messenger | ) |

fl_binary_messenger_shutdown: @messenger: an #FlBinaryMessenger.

Shutdown the messenger closing any open channels.

Definition at line 486 of file fl_binary_messenger.cc.

486 {
487 g_return_if_fail(FL_IS_BINARY_MESSENGER(self));
488
489 return FL_BINARY_MESSENGER_GET_IFACE(self)->shutdown(self);
490 }

Referenced by fl_engine_dispose().

## ◆ G_DECLARE_FINAL_TYPE()

GObject G_DECLARE_FINAL_TYPE | ( | FlBinaryMessengerResponseHandleImpl | ,
|  | fl_binary_messenger_response_handle_impl | ,
|  | FL | ,
|  | BINARY_MESSENGER_RESPONSE_HANDLE_IMPL | ,
|  | FlBinaryMessengerResponseHandle |
| ) |  |

Definition at line 31 of file fl_binary_messenger.cc.

39 {
40 GObject parent_instance;
41
42 GWeakRef engine;
43
44 // PlatformMessageHandler keyed by channel name.
45 GHashTable* platform_message_handlers;
46 };

## ◆ G_DEFINE_QUARK()

G_DEFINE_QUARK | ( | fl_binary_messenger_codec_error_quark | ,
|  | fl_binary_messenger_codec_error |
| ) |  |

## ◆ G_DEFINE_TYPE() [1/2]

G_DEFINE_TYPE | ( | FlBinaryMessengerResponseHandle | ,
|  | fl_binary_messenger_response_handle | ,
|  | G_TYPE_OBJECT |
| ) |  |

Definition at line 61 of file fl_binary_messenger.cc.

66 {}

## ◆ G_DEFINE_TYPE() [2/2]

G_DEFINE_TYPE | ( | FlBinaryMessengerResponseHandleImpl | ,
|  | fl_binary_messenger_response_handle_impl | ,
|  | fl_binary_messenger_response_handle_get_type() |
| ) |  |

Definition at line 79 of file fl_binary_messenger.cc.

84 {}

## ◆ G_DEFINE_TYPE_WITH_CODE()

G_DEFINE_TYPE_WITH_CODE | ( | FlBinaryMessengerImpl | ,
|  | fl_binary_messenger_impl | ,
|  | G_TYPE_OBJECT | ,
|  | G_IMPLEMENT_INTERFACE(fl_binary_messenger_get_type(), fl_binary_messenger_impl_iface_init) |
| ) |  |

Definition at line 51 of file fl_binary_messenger.cc.

59 {}

## ◆ platform_message_handler_free()

static void platform_message_handler_free | ( | gpointer | data | ) |
| static

Definition at line 144 of file fl_binary_messenger.cc.

144 {
145 PlatformMessageHandler* self = static_cast<PlatformMessageHandler*>(data);
146 if (self->message_handler_destroy_notify) {
147 self->message_handler_destroy_notify(self->message_handler_data);
148 }
149 g_free(self);
150 }

References PlatformMessageHandler::message_handler_destroy_notify.

Referenced by fl_binary_messenger_impl_init(), and shutdown().

## ◆ platform_message_handler_new()

static PlatformMessageHandler* platform_message_handler_new | ( | FlBinaryMessengerMessageHandler | handler,
|  | gpointer | user_data,
|  | GDestroyNotify | destroy_notify
| ) |  |
| static

Definition at line 132 of file fl_binary_messenger.cc.

135 {
136 PlatformMessageHandler* self = static_cast<PlatformMessageHandler*>(
137 g_malloc0(sizeof(PlatformMessageHandler)));
138 self->message_handler = handler;
139 self->message_handler_data = user_data;
140 self->message_handler_destroy_notify = destroy_notify;
141 return self;
142 }

References PlatformMessageHandler::message_handler, and user_data.

Referenced by set_message_handler_on_channel().

## ◆ platform_message_ready_cb()

static void platform_message_ready_cb | ( | GObject * | object,
|  | GAsyncResult * | result,
|  | gpointer | user_data
| ) |  |
| static

Definition at line 260 of file fl_binary_messenger.cc.

262 {
263 GTask* task = G_TASK(user_data);
264 g_task_return_pointer(task, result, g_object_unref);
265 }

References result, and user_data.

Referenced by send_on_channel().

## ◆ resize_channel()

static void resize_channel | ( | FlBinaryMessenger * | messenger,
|  | const gchar * | channel,
|  | int64_t | new_size
| ) |  |
| static

Definition at line 328 of file fl_binary_messenger.cc.

330 {
331 FML_DCHECK(new_size >= 0);
332 g_autoptr(FlStandardMethodCodec) codec = fl_standard_method_codec_new();
333 g_autoptr(FlValue) args = fl_value_new_list();
334 fl_value_append_take(args, fl_value_new_string(channel));
335 fl_value_append_take(args, fl_value_new_int(new_size));
336 g_autoptr(GBytes) message = fl_method_codec_encode_method_call(
337 FL_METHOD_CODEC(codec), kResizeMethod, args, nullptr);
338 fl_binary_messenger_send_on_channel(messenger, kControlChannelName, message,
339 nullptr, resize_channel_response_cb,
340 nullptr);
341 }

References args, fl_binary_messenger_send_on_channel(), fl_method_codec_encode_method_call(), fl_standard_method_codec_new(), fl_value_append_take(), fl_value_new_int(), fl_value_new_list(), fl_value_new_string(), kControlChannelName, kResizeMethod, and resize_channel_response_cb().

Referenced by fl_binary_messenger_impl_iface_init().

## ◆ resize_channel_response_cb()

static void resize_channel_response_cb | ( | GObject * | object,
|  | GAsyncResult * | result,
|  | gpointer | user_data
| ) |  |
| static

Definition at line 319 of file fl_binary_messenger.cc.

321 {
322 g_autoptr(GError) error = nullptr;
323 if (!finish_method(object, result, &error)) {
324 g_warning("Failed to resize channel: %s", error->message);
325 }
326 }

References error, finish_method(), and result.

Referenced by resize_channel().

## ◆ send_on_channel()

static void send_on_channel | ( | FlBinaryMessenger * | messenger,
|  | const gchar * | channel,
|  | GBytes * | message,
|  | GCancellable * | cancellable,
|  | GAsyncReadyCallback | callback,
|  | gpointer | user_data
| ) |  |
| static

Definition at line 267 of file fl_binary_messenger.cc.

272 {
273 FlBinaryMessengerImpl* self = FL_BINARY_MESSENGER_IMPL(messenger);
274
275 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
276 if (engine == nullptr) {
277 return;
278 }
279
280 fl_engine_send_platform_message(
281 engine, channel, message, cancellable,
282 callback != nullptr ? platform_message_ready_cb : nullptr,
283 callback != nullptr ? g_task_new(self, cancellable, callback, user_data)
284 : nullptr);
285 }

References callback, fl_engine_send_platform_message(), platform_message_ready_cb(), and user_data.

Referenced by fl_binary_messenger_impl_iface_init().

## ◆ send_on_channel_finish()

static GBytes* send_on_channel_finish | ( | FlBinaryMessenger * | messenger,
|  | GAsyncResult * | result,
|  | GError ** | error
| ) |  |
| static

Definition at line 287 of file fl_binary_messenger.cc.

289 {
290 FlBinaryMessengerImpl* self = FL_BINARY_MESSENGER_IMPL(messenger);
291 g_return_val_if_fail(g_task_is_valid(result, self), FALSE);
292
293 g_autoptr(GTask) task = G_TASK(result);
294 GAsyncResult* r = G_ASYNC_RESULT(g_task_propagate_pointer(task, nullptr));
295
296 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
297 if (engine == nullptr) {
298 return nullptr;
299 }
300
301 return fl_engine_send_platform_message_finish(engine, r, error);
302 }

References error, fl_engine_send_platform_message_finish(), and result.

Referenced by fl_binary_messenger_impl_iface_init().

## ◆ send_response()

static gboolean send_response | ( | FlBinaryMessenger * | messenger,
|  | FlBinaryMessengerResponseHandle * | response_handle_,
|  | GBytes * | response,
|  | GError ** | error
| ) |  |
| static

Definition at line 222 of file fl_binary_messenger.cc.

225 {
226 FlBinaryMessengerImpl* self = FL_BINARY_MESSENGER_IMPL(messenger);
227 g_return_val_if_fail(
228 FL_IS_BINARY_MESSENGER_RESPONSE_HANDLE_IMPL(response_handle_), FALSE);
229 FlBinaryMessengerResponseHandleImpl* response_handle =
230 FL_BINARY_MESSENGER_RESPONSE_HANDLE_IMPL(response_handle_);
231
232 g_return_val_if_fail(response_handle->messenger == self, FALSE);
233 g_return_val_if_fail(response_handle->response_handle != nullptr, FALSE);
234
235 FlEngine* engine = FL_ENGINE(g_weak_ref_get(&self->engine));
236 if (engine == nullptr) {
237 return TRUE;
238 }
239
240 gboolean result = false;
241 if (response_handle->response_handle == nullptr) {
242 g_set_error(
243 error, FL_BINARY_MESSENGER_ERROR,
244 FL_BINARY_MESSENGER_ERROR_ALREADY_RESPONDED,
245 "Attempted to respond to a message that is already responded to");
246 result = FALSE;
247 } else {
248 result = fl_engine_send_platform_message_response(
249 engine, response_handle->response_handle, response, error);
250 response_handle->response_handle = nullptr;
251 }
252
253 // This guarantees that the dispose method for the engine is executed
254 // on the platform thread in the rare chance this is the last ref.
255 g_idle_add(do_unref, engine);
256
257 return result;
258 }

References do_unref(), error, FL_BINARY_MESSENGER_ERROR, FL_BINARY_MESSENGER_ERROR_ALREADY_RESPONDED, fl_engine_send_platform_message_response(), result, and TRUE.

Referenced by fl_binary_messenger_impl_iface_init().

## ◆ set_message_handler_on_channel()

static void set_message_handler_on_channel | ( | FlBinaryMessenger * | messenger,
|  | const gchar * | channel,
|  | FlBinaryMessengerMessageHandler | handler,
|  | gpointer | user_data,
|  | GDestroyNotify | destroy_notify
| ) |  |
| static

Definition at line 185 of file fl_binary_messenger.cc.

190 {
191 FlBinaryMessengerImpl* self = FL_BINARY_MESSENGER_IMPL(messenger);
192
193 // Don't set handlers if engine already gone.
194 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
195 if (engine == nullptr) {
196 if (handler != nullptr) {
197 g_warning(
198 "Attempted to set message handler on an FlBinaryMessenger without an "
199 "engine");
200 }
201 if (destroy_notify != nullptr) {
202 destroy_notify(user_data);
203 }
204 return;
205 }
206
207 if (handler != nullptr) {
208 g_hash_table_replace(
209 self->platform_message_handlers, g_strdup(channel),
210 platform_message_handler_new(handler, user_data, destroy_notify));
211 } else {
212 g_hash_table_remove(self->platform_message_handlers, channel);
213 }
214 }

References platform_message_handler_new(), and user_data.

Referenced by fl_binary_messenger_impl_iface_init().

## ◆ set_warns_on_channel_overflow()

static void set_warns_on_channel_overflow | ( | FlBinaryMessenger * | messenger,
|  | const gchar * | channel,
|  | bool | warns
| ) |  |
| static

Definition at line 353 of file fl_binary_messenger.cc.

355 {
356 g_autoptr(FlStandardMethodCodec) codec = fl_standard_method_codec_new();
357 g_autoptr(FlValue) args = fl_value_new_list();
358 fl_value_append_take(args, fl_value_new_string(channel));
359 fl_value_append_take(args, fl_value_new_bool(!warns));
360 g_autoptr(GBytes) message = fl_method_codec_encode_method_call(
361 FL_METHOD_CODEC(codec), kOverflowMethod, args, nullptr);
362 fl_binary_messenger_send_on_channel(
363 messenger, kControlChannelName, message, nullptr,
364 set_warns_on_channel_overflow_response_cb, nullptr);
365 }

References args, fl_binary_messenger_send_on_channel(), fl_method_codec_encode_method_call(), fl_standard_method_codec_new(), fl_value_append_take(), fl_value_new_bool(), fl_value_new_list(), fl_value_new_string(), kControlChannelName, kOverflowMethod, and set_warns_on_channel_overflow_response_cb().

Referenced by fl_binary_messenger_impl_iface_init().

## ◆ set_warns_on_channel_overflow_response_cb()

static void set_warns_on_channel_overflow_response_cb | ( | GObject * | object,
|  | GAsyncResult * | result,
|  | gpointer | user_data
| ) |  |
| static

Definition at line 344 of file fl_binary_messenger.cc.

346 {
347 g_autoptr(GError) error = nullptr;
348 if (!finish_method(object, result, &error)) {
349 g_warning("Failed to set warns on channel overflow: %s", error->message);
350 }
351 }

References error, finish_method(), and result.

Referenced by set_warns_on_channel_overflow().

## ◆ shutdown()

static void shutdown | ( | FlBinaryMessenger * | messenger | ) |
| static

Definition at line 367 of file fl_binary_messenger.cc.

367 {
368 FlBinaryMessengerImpl* self = FL_BINARY_MESSENGER_IMPL(messenger);
369
370 // Disconnect any handlers.
371 // Take the reference in case a handler tries to modify this table.
372 g_autoptr(GHashTable) handlers = self->platform_message_handlers;
373 self->platform_message_handlers = g_hash_table_new_full(
374 g_str_hash, g_str_equal, g_free, platform_message_handler_free);
375 g_hash_table_remove_all(handlers);
376 }

References platform_message_handler_free().

Referenced by fl_binary_messenger_impl_iface_init(), and G_DECLARE_INTERFACE().

## Variable Documentation

## ◆ BINARY_MESSENGER_IMPL

BINARY_MESSENGER_IMPL

Definition at line 28 of file fl_binary_messenger.cc.

## ◆ FL

FL

Definition at line 27 of file fl_binary_messenger.cc.

## ◆ fl_binary_messenger_impl

fl_binary_messenger_impl

Definition at line 26 of file fl_binary_messenger.cc.

## ◆ kControlChannelName

constexpr char kControlChannelName[] = "dev.flutter/channel-buffers"
| static constexpr

Definition at line 18 of file fl_binary_messenger.cc.

Referenced by resize_channel(), flutter::internal::ResizeChannel(), set_warns_on_channel_overflow(), and flutter::internal::SetChannelWarnsOnOverflow().

## ◆ kOverflowMethod

constexpr char kOverflowMethod[] = "overflow"
| static constexpr

Definition at line 20 of file fl_binary_messenger.cc.

Referenced by set_warns_on_channel_overflow(), and flutter::internal::SetChannelWarnsOnOverflow().

## ◆ kResizeMethod

constexpr char kResizeMethod[] = "resize"
| static constexpr

Definition at line 19 of file fl_binary_messenger.cc.

Referenced by resize_channel(), and flutter::internal::ResizeChannel().

fl_engine_set_platform_message_handler
void fl_engine_set_platform_message_handler(FlEngine *self, FlEnginePlatformMessageHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
Definition: fl_engine.cc:606
fl_binary_messenger_response_handle_impl_dispose
static void fl_binary_messenger_response_handle_impl_dispose(GObject *object)
Definition: fl_binary_messenger.cc:86
set_warns_on_channel_overflow_response_cb
static void set_warns_on_channel_overflow_response_cb(GObject *object, GAsyncResult *result, gpointer user_data)
Definition: fl_binary_messenger.cc:344
fl_method_codec_encode_method_call
GBytes * fl_method_codec_encode_method_call(FlMethodCodec *self, const gchar *name, FlValue *args, GError **error)
Definition: fl_method_codec.cc:16
finish_method
static gboolean finish_method(GObject *object, GAsyncResult *result, GError **error)
Definition: fl_binary_messenger.cc:305
platform_message_ready_cb
static void platform_message_ready_cb(GObject *object, GAsyncResult *result, gpointer user_data)
Definition: fl_binary_messenger.cc:260
kResizeMethod
static constexpr char kResizeMethod[]
Definition: fl_binary_messenger.cc:19
fl_standard_method_codec_new
G_MODULE_EXPORT FlStandardMethodCodec * fl_standard_method_codec_new()
Definition: fl_standard_method_codec.cc:291
send_response
static gboolean send_response(FlBinaryMessenger *messenger, FlBinaryMessengerResponseHandle *response_handle_, GBytes *response, GError **error)
Definition: fl_binary_messenger.cc:222
fl_value_new_list
G_MODULE_EXPORT FlValue * fl_value_new_list()
Definition: fl_value.cc:349
fl_value_new_bool
G_MODULE_EXPORT FlValue * fl_value_new_bool(bool value)
Definition: fl_value.cc:255
FlValue
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:42
shutdown
static void shutdown(FlBinaryMessenger *messenger)
Definition: fl_binary_messenger.cc:367
PlatformMessageHandler
Definition: fl_binary_messenger.cc:126
user_data
FlKeyEvent uint64_t FlKeyResponderAsyncCallback gpointer user_data
Definition: fl_key_channel_responder.cc:121
send_on_channel_finish
static GBytes * send_on_channel_finish(FlBinaryMessenger *messenger, GAsyncResult *result, GError **error)
Definition: fl_binary_messenger.cc:287
platform_message_handler_free
static void platform_message_handler_free(gpointer data)
Definition: fl_binary_messenger.cc:144
FL_BINARY_MESSENGER_ERROR
#define FL_BINARY_MESSENGER_ERROR
Definition: fl_binary_messenger.h:27
fl_value_new_int
G_MODULE_EXPORT FlValue * fl_value_new_int(int64_t value)
Definition: fl_value.cc:262
send_on_channel
static void send_on_channel(FlBinaryMessenger *messenger, const gchar *channel, GBytes *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
Definition: fl_binary_messenger.cc:267
fl_binary_messenger_response_handle_impl_new
static FlBinaryMessengerResponseHandleImpl * fl_binary_messenger_response_handle_impl_new(FlBinaryMessengerImpl *messenger, const FlutterPlatformMessageResponseHandle *response_handle)
Definition: fl_binary_messenger.cc:113
kOverflowMethod
static constexpr char kOverflowMethod[]
Definition: fl_binary_messenger.cc:20
PlatformMessageHandler::message_handler
FlBinaryMessengerMessageHandler message_handler
Definition: fl_binary_messenger.cc:127
PlatformMessageHandler::message_handler_data
gpointer message_handler_data
Definition: fl_binary_messenger.cc:128
fl_binary_messenger_platform_message_cb
static gboolean fl_binary_messenger_platform_message_cb(FlEngine *engine, const gchar *channel, GBytes *message, const FlutterPlatformMessageResponseHandle *response_handle, void *user_data)
Definition: fl_binary_messenger.cc:152
do_unref
static gboolean do_unref(gpointer value)
Definition: fl_binary_messenger.cc:216
resize_channel
static void resize_channel(FlBinaryMessenger *messenger, const gchar *channel, int64_t new_size)
Definition: fl_binary_messenger.cc:328
TRUE
return TRUE
Definition: fl_pixel_buffer_texture_test.cc:53
fl_value_append_take
G_MODULE_EXPORT void fl_value_append_take(FlValue *self, FlValue *value)
Definition: fl_value.cc:600
fl_engine_send_platform_message_finish
GBytes * fl_engine_send_platform_message_finish(FlEngine *self, GAsyncResult *result, GError **error)
Definition: fl_engine.cc:750
fl_method_codec_decode_response
FlMethodResponse * fl_method_codec_decode_response(FlMethodCodec *self, GBytes *message, GError **error)
Definition: fl_method_codec.cc:62
fl_binary_messenger_send_on_channel_finish
G_MODULE_EXPORT GBytes * fl_binary_messenger_send_on_channel_finish(FlBinaryMessenger *self, GAsyncResult *result, GError **error)
Definition: fl_binary_messenger.cc:457
kControlChannelName
static constexpr char kControlChannelName[]
Definition: fl_binary_messenger.cc:18
result
GAsyncResult * result
Definition: fl_text_input_plugin.cc:106
FL_BINARY_MESSENGER_ERROR_ALREADY_RESPONDED
@ FL_BINARY_MESSENGER_ERROR_ALREADY_RESPONDED
Definition: fl_binary_messenger.h:32
platform_message_handler_new
static PlatformMessageHandler * platform_message_handler_new(FlBinaryMessengerMessageHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
Definition: fl_binary_messenger.cc:132
args
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
Definition: fl_event_channel.h:89
error
const uint8_t uint32_t uint32_t GError ** error
Definition: fl_pixel_buffer_texture_test.cc:40
fl_engine_send_platform_message
void fl_engine_send_platform_message(FlEngine *self, const gchar *channel, GBytes *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
Definition: fl_engine.cc:691
PlatformMessageHandler::message_handler_destroy_notify
GDestroyNotify message_handler_destroy_notify
Definition: fl_binary_messenger.cc:129
fl_binary_messenger_impl_dispose
static void fl_binary_messenger_impl_dispose(GObject *object)
Definition: fl_binary_messenger.cc:175
callback
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
Definition: fl_key_channel_responder.cc:120
resize_channel_response_cb
static void resize_channel_response_cb(GObject *object, GAsyncResult *result, gpointer user_data)
Definition: fl_binary_messenger.cc:319
set_message_handler_on_channel
static void set_message_handler_on_channel(FlBinaryMessenger *messenger, const gchar *channel, FlBinaryMessengerMessageHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
Definition: fl_binary_messenger.cc:185
set_warns_on_channel_overflow
static void set_warns_on_channel_overflow(FlBinaryMessenger *messenger, const gchar *channel, bool warns)
Definition: fl_binary_messenger.cc:353
value
uint8_t value
Definition: fl_standard_message_codec.cc:36
fl_engine_send_platform_message_response
gboolean fl_engine_send_platform_message_response(FlEngine *self, const FlutterPlatformMessageResponseHandle *handle, GBytes *response, GError **error)
Definition: fl_engine.cc:659
fl_binary_messenger_send_on_channel
G_MODULE_EXPORT void fl_binary_messenger_send_on_channel(FlBinaryMessenger *self, const gchar *channel, GBytes *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
Definition: fl_binary_messenger.cc:443
fl_value_new_string
G_MODULE_EXPORT FlValue * fl_value_new_string(const gchar *value)
Definition: fl_value.cc:276