[jsonrpc-glib/wip/client-accepted] Add JsonrpcServer::client-accepted



commit ffc4fa4b12536f4cf3b54d49b1ffb6f2ce1af038
Author: Patrick Griffis <tingping tingping se>
Date:   Wed Feb 7 19:54:31 2018 -0500

    Add JsonrpcServer::client-accepted
    
    This is useful for deviced which wants to track the lifetime of clients.

 meson.build          |  2 +-
 src/jsonrpc-server.c | 22 ++++++++++++++++++++++
 src/jsonrpc-server.h |  3 ++-
 3 files changed, 25 insertions(+), 2 deletions(-)
---
diff --git a/meson.build b/meson.build
index 113c20e..c224e61 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
 project('jsonrpc-glib', 'c',
-          version: '3.27.90',
+          version: '3.27.91',
           license: 'LGPLv2.1+',
     meson_version: '>= 0.40.1',
   default_options: [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=gnu11' ],
diff --git a/src/jsonrpc-server.c b/src/jsonrpc-server.c
index 97e33cf..46a5b30 100644
--- a/src/jsonrpc-server.c
+++ b/src/jsonrpc-server.c
@@ -55,6 +55,7 @@ G_DEFINE_TYPE_WITH_PRIVATE (JsonrpcServer, jsonrpc_server, G_TYPE_OBJECT)
 enum {
   HANDLE_CALL,
   NOTIFICATION,
+  CLIENT_ACCEPTED,
   N_SIGNALS
 };
 
@@ -178,6 +179,25 @@ jsonrpc_server_class_init (JsonrpcServerClass *klass)
                   JSONRPC_TYPE_CLIENT,
                   G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE,
                   G_TYPE_VARIANT);
+
+    /**
+   * JsonrpcServer::client-accepted:
+   * @self: A #JsonrpcServer
+   * @client: A #JsonrpcClient
+   *
+   * This signal is emitted when a new client has been accepted.
+   *
+   * Since: 3.28
+   */
+  signals [CLIENT_ACCEPTED] =
+    g_signal_new ("client-accepted",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (JsonrpcServerClass, client_accepted),
+                  NULL, NULL, NULL,
+                  G_TYPE_NONE,
+                  1,
+                  JSONRPC_TYPE_CLIENT);
 }
 
 static void
@@ -311,6 +331,8 @@ jsonrpc_server_accept_io_stream (JsonrpcServer *self,
   g_hash_table_insert (priv->clients, client, NULL);
 
   jsonrpc_client_start_listening (client);
+
+  g_signal_emit (self, signals [CLIENT_ACCEPTED], 0, client);
 }
 
 static gint
diff --git a/src/jsonrpc-server.h b/src/jsonrpc-server.h
index 42cad86..323c643 100644
--- a/src/jsonrpc-server.h
+++ b/src/jsonrpc-server.h
@@ -43,6 +43,8 @@ struct _JsonrpcServerClass
                             JsonrpcClient *client,
                             const gchar   *method,
                             GVariant      *params);
+  void     (*client_accepted) (JsonrpcServer *self,
+                               JsonrpcClient *client);
 
   gpointer _reserved1;
   gpointer _reserved2;
@@ -51,7 +53,6 @@ struct _JsonrpcServerClass
   gpointer _reserved5;
   gpointer _reserved6;
   gpointer _reserved7;
-  gpointer _reserved8;
 };
 
 typedef void (*JsonrpcServerHandler) (JsonrpcServer *self,


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