[jsonrpc-glib] client: add JsonrpcClient::failed



commit b49293ac2e4d1c73181b3e54e620ba75fdd8486d
Author: Christian Hergert <chergert redhat com>
Date:   Wed Dec 27 03:20:20 2017 -0800

    client: add JsonrpcClient::failed
    
    This signal is useful for tracking when a client has failed and cleaning
    up resources associated with it.

 src/jsonrpc-client.c | 25 +++++++++++++++++++++++++
 src/jsonrpc-client.h |  2 +-
 2 files changed, 26 insertions(+), 1 deletion(-)
---
diff --git a/src/jsonrpc-client.c b/src/jsonrpc-client.c
index 636d429..383e46e 100644
--- a/src/jsonrpc-client.c
+++ b/src/jsonrpc-client.c
@@ -143,6 +143,7 @@ enum {
 };
 
 enum {
+  FAILED,
   HANDLE_CALL,
   NOTIFICATION,
   N_SIGNALS
@@ -251,6 +252,8 @@ jsonrpc_client_panic (JsonrpcClient *self,
   g_hash_table_iter_init (&iter, invocations);
   while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&task))
     g_task_return_error (task, g_error_copy (error));
+
+  g_signal_emit (self, signals [FAILED], 0);
 }
 
 /*
@@ -413,6 +416,26 @@ jsonrpc_client_class_init (JsonrpcClientClass *klass)
   g_object_class_install_properties (object_class, N_PROPS, properties);
 
   /**
+   * JsonrpcClient::failed:
+   *
+   * The "failed" signal is called when the client has failed communication
+   * or the connection has been knowingly closed.
+   *
+   * Since: 3.28
+   */
+  signals [FAILED] =
+    g_signal_new ("failed",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (JsonrpcClientClass, failed),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+  g_signal_set_va_marshaller (signals [FAILED],
+                              G_TYPE_FROM_CLASS (klass),
+                              g_cclosure_marshal_VOID__VOIDv);
+
+  /**
    * JsonrpcClient::handle-call:
    * @self: A #JsonrpcClient
    * @method: (not nullable): the method name
@@ -1187,6 +1210,8 @@ jsonrpc_client_close (JsonrpcClient  *self,
         g_task_return_error (task, g_error_copy (local_error));
     }
 
+  g_signal_emit (self, signals [FAILED], 0);
+
   return ret;
 }
 
diff --git a/src/jsonrpc-client.h b/src/jsonrpc-client.h
index d596600..a9c5c94 100644
--- a/src/jsonrpc-client.h
+++ b/src/jsonrpc-client.h
@@ -41,8 +41,8 @@ struct _JsonrpcClientClass
                             const gchar   *method,
                             GVariant      *id,
                             GVariant      *params);
+  void     (*failed)       (JsonrpcClient *self);
 
-  gpointer _reserved1;
   gpointer _reserved2;
   gpointer _reserved3;
   gpointer _reserved4;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]