Flutter Engine
fl_method_call.cc File Reference
#include "flutter/shell/platform/linux/public/flutter_linux/fl_method_call.h"
#include "flutter/shell/platform/linux/fl_method_call_private.h"
#include "flutter/shell/platform/linux/fl_method_channel_private.h"
#include <gmodule.h>

Go to the source code of this file.

Classes

struct  _FlMethodCall
 

Functions

static void fl_method_call_dispose (GObject *object)
 
static void fl_method_call_class_init (FlMethodCallClass *klass)
 
static void fl_method_call_init (FlMethodCall *self)
 
FlMethodCall * fl_method_call_new (const gchar *name, FlValue *args, FlMethodChannel *channel, FlBinaryMessengerResponseHandle *response_handle)
 
G_MODULE_EXPORT const gchar * fl_method_call_get_name (FlMethodCall *self)
 
G_MODULE_EXPORT FlValuefl_method_call_get_args (FlMethodCall *self)
 
G_MODULE_EXPORT gboolean fl_method_call_respond (FlMethodCall *self, FlMethodResponse *response, GError **error)
 
G_MODULE_EXPORT gboolean fl_method_call_respond_success (FlMethodCall *self, FlValue *result, GError **error)
 
G_MODULE_EXPORT gboolean fl_method_call_respond_error (FlMethodCall *self, const gchar *code, const gchar *message, FlValue *details, GError **error)
 
G_MODULE_EXPORT gboolean fl_method_call_respond_not_implemented (FlMethodCall *self, GError **error)
 

Function Documentation

◆ fl_method_call_class_init()

static void fl_method_call_class_init ( FlMethodCallClass *  klass)
static

Definition at line 38 of file fl_method_call.cc.

References fl_method_call_dispose().

38  {
39  G_OBJECT_CLASS(klass)->dispose = fl_method_call_dispose;
40 }
static void fl_method_call_dispose(GObject *object)

◆ fl_method_call_dispose()

static void fl_method_call_dispose ( GObject *  object)
static

Definition at line 27 of file fl_method_call.cc.

References fl_value_unref().

Referenced by fl_method_call_class_init().

27  {
28  FlMethodCall* self = FL_METHOD_CALL(object);
29 
30  g_clear_pointer(&self->name, g_free);
31  g_clear_pointer(&self->args, fl_value_unref);
32  g_clear_object(&self->channel);
33  g_clear_object(&self->response_handle);
34 
35  G_OBJECT_CLASS(fl_method_call_parent_class)->dispose(object);
36 }
G_MODULE_EXPORT void fl_value_unref(FlValue *self)
Definition: fl_value.cc:341

◆ fl_method_call_get_args()

G_MODULE_EXPORT FlValue* fl_method_call_get_args ( FlMethodCall *  method_call)

fl_method_call_get_args: : an #FlMethodCall.

Gets the arguments passed to the method.

Returns: an FlValue.

Definition at line 72 of file fl_method_call.cc.

Referenced by clipboard_get_data_async(), method_call_cb(), method_call_error_cb(), method_call_not_implemented_cb(), and method_call_success_cb().

72  {
73  g_return_val_if_fail(FL_IS_METHOD_CALL(self), nullptr);
74  return self->args;
75 }

◆ fl_method_call_get_name()

G_MODULE_EXPORT const gchar* fl_method_call_get_name ( FlMethodCall *  method_call)

FlMethodCall:

#FlMethodCall represents and incoming method call as returned by an #FlMethodChannel. fl_method_call_get_name: : an #FlMethodCall.

Gets the name of the method call.

Returns: a method name.

Definition at line 67 of file fl_method_call.cc.

Referenced by method_call_cb(), method_call_error_cb(), method_call_not_implemented_cb(), and method_call_success_cb().

67  {
68  g_return_val_if_fail(FL_IS_METHOD_CALL(self), nullptr);
69  return self->name;
70 }

◆ fl_method_call_init()

static void fl_method_call_init ( FlMethodCall *  self)
static

Definition at line 42 of file fl_method_call.cc.

42 {}

◆ fl_method_call_new()

FlMethodCall* fl_method_call_new ( const gchar *  name,
FlValue args,
FlMethodChannel *  channel,
FlBinaryMessengerResponseHandle *  response_handle 
)

Definition at line 44 of file fl_method_call.cc.

References fl_value_ref().

Referenced by message_cb().

48  {
49  g_return_val_if_fail(name != nullptr, nullptr);
50  g_return_val_if_fail(args != nullptr, nullptr);
51  g_return_val_if_fail(FL_IS_METHOD_CHANNEL(channel), nullptr);
52  g_return_val_if_fail(FL_IS_BINARY_MESSENGER_RESPONSE_HANDLE(response_handle),
53  nullptr);
54 
55  FlMethodCall* self =
56  FL_METHOD_CALL(g_object_new(fl_method_call_get_type(), nullptr));
57 
58  self->name = g_strdup(name);
59  self->args = fl_value_ref(args);
60  self->channel = FL_METHOD_CHANNEL(g_object_ref(channel));
61  self->response_handle =
62  FL_BINARY_MESSENGER_RESPONSE_HANDLE(g_object_ref(response_handle));
63 
64  return self;
65 }
G_BEGIN_DECLS FlValue * args
G_MODULE_EXPORT FlValue * fl_value_ref(FlValue *self)
Definition: fl_value.cc:335
const char * name
Definition: fuchsia.cc:50

◆ fl_method_call_respond()

G_MODULE_EXPORT gboolean fl_method_call_respond ( FlMethodCall *  method_call,
FlMethodResponse *  response,
GError **  error 
)

fl_method_call_respond: : an #FlMethodCall. : an #FlMethodResponse. : (allow-none): #GError location to store the error occurring, or NULL to ignore.

Responds to a method call.

Returns: TRUE on success.

Definition at line 77 of file fl_method_call.cc.

References fl_method_channel_respond(), and TRUE.

Referenced by method_call_cb(), and send_response().

79  {
80  g_return_val_if_fail(FL_IS_METHOD_CALL(self), FALSE);
81  g_return_val_if_fail(FL_IS_METHOD_RESPONSE(response), FALSE);
82 
83  g_autoptr(GError) local_error = nullptr;
84  if (!fl_method_channel_respond(self->channel, self->response_handle, response,
85  &local_error)) {
86  // If the developer chose not to handle the error then log it so it's not
87  // missed.
88  if (error == nullptr) {
89  g_warning("Failed to send method call response: %s",
90  local_error->message);
91  }
92 
93  g_propagate_error(error, local_error);
94  return FALSE;
95  }
96 
97  return TRUE;
98 }
gboolean fl_method_channel_respond(FlMethodChannel *self, FlBinaryMessengerResponseHandle *response_handle, FlMethodResponse *response, GError **error)
FlMethodResponse GError ** error
return TRUE
Definition: fl_view.cc:107

◆ fl_method_call_respond_error()

G_MODULE_EXPORT gboolean fl_method_call_respond_error ( FlMethodCall *  self,
const gchar *  code,
const gchar *  message,
FlValue details,
GError **  error 
)

Definition at line 111 of file fl_method_call.cc.

References fl_method_channel_respond(), and fl_method_error_response_new().

Referenced by method_call_error_cb(), and method_call_error_error_cb().

115  {
116  g_return_val_if_fail(FL_IS_METHOD_CALL(self), FALSE);
117  g_return_val_if_fail(code != nullptr, FALSE);
118 
119  g_autoptr(FlMethodResponse) response =
120  FL_METHOD_RESPONSE(fl_method_error_response_new(code, message, details));
121  return fl_method_channel_respond(self->channel, self->response_handle,
122  response, error);
123 }
gboolean fl_method_channel_respond(FlMethodChannel *self, FlBinaryMessengerResponseHandle *response_handle, FlMethodResponse *response, GError **error)
FlMethodResponse GError ** error
G_MODULE_EXPORT FlMethodErrorResponse * fl_method_error_response_new(const gchar *code, const gchar *message, FlValue *details)

◆ fl_method_call_respond_not_implemented()

G_MODULE_EXPORT gboolean fl_method_call_respond_not_implemented ( FlMethodCall *  self,
GError **  error 
)

Definition at line 126 of file fl_method_call.cc.

References fl_method_channel_respond(), and fl_method_not_implemented_response_new().

Referenced by method_call_error_error_cb(), method_call_not_implemented_cb(), and method_call_success_error_cb().

126  {
127  g_return_val_if_fail(FL_IS_METHOD_CALL(self), FALSE);
128 
129  g_autoptr(FlMethodResponse) response =
130  FL_METHOD_RESPONSE(fl_method_not_implemented_response_new());
131  return fl_method_channel_respond(self->channel, self->response_handle,
132  response, error);
133 }
gboolean fl_method_channel_respond(FlMethodChannel *self, FlBinaryMessengerResponseHandle *response_handle, FlMethodResponse *response, GError **error)
FlMethodResponse GError ** error
G_MODULE_EXPORT FlMethodNotImplementedResponse * fl_method_not_implemented_response_new()

◆ fl_method_call_respond_success()

G_MODULE_EXPORT gboolean fl_method_call_respond_success ( FlMethodCall *  method_call,
FlValue result,
GError **  error 
)

fl_method_call_respond_success: : an #FlMethodCall.

Returns
: (allow-none): value to respond with, must match what the #FlMethodCodec supports. : (allow-none): #GError location to store the error occurring, or NULL to ignore.

Convenience method that responds to method call with #FlMethodSuccessResponse.

Returns: TRUE on success.

Definition at line 100 of file fl_method_call.cc.

References fl_method_channel_respond(), and fl_method_success_response_new().

Referenced by method_call_success_cb(), and method_call_success_error_cb().

102  {
103  g_return_val_if_fail(FL_IS_METHOD_CALL(self), FALSE);
104 
105  g_autoptr(FlMethodResponse) response =
106  FL_METHOD_RESPONSE(fl_method_success_response_new(result));
107  return fl_method_channel_respond(self->channel, self->response_handle,
108  response, error);
109 }
gboolean fl_method_channel_respond(FlMethodChannel *self, FlBinaryMessengerResponseHandle *response_handle, FlMethodResponse *response, GError **error)
G_MODULE_EXPORT FlMethodSuccessResponse * fl_method_success_response_new(FlValue *result)
FlMethodResponse GError ** error