Blame docs/reference/gio/html/ch35s03.html

Packit ae235b
Packit ae235b
<html>
Packit ae235b
<head>
Packit ae235b
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Packit ae235b
<title>Owning bus names: GIO Reference Manual</title>
Packit ae235b
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
Packit ae235b
<link rel="home" href="index.html" title="GIO Reference Manual">
Packit ae235b
<link rel="up" href="ch35.html" title="Migrating to GDBus">
Packit ae235b
<link rel="prev" href="ch35s02.html" title="API comparison">
Packit ae235b
<link rel="next" href="ch35s04.html" title="Creating proxies for well-known names">
Packit ae235b
<meta name="generator" content="GTK-Doc V1.27 (XML mode)">
Packit ae235b
<link rel="stylesheet" href="style.css" type="text/css">
Packit ae235b
</head>
Packit ae235b
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
Packit ae235b
Packit ae235b
Packit ae235b
Home
Packit ae235b
Up
Packit ae235b
Prev
Packit ae235b
Next
Packit ae235b
Packit ae235b
Packit ae235b

Packit ae235b
Owning bus names
Packit ae235b

Packit ae235b
      Using dbus-glib, you typically call RequestName manually
Packit ae235b
      to own a name, like in the following excerpt:
Packit ae235b
      

Packit ae235b
Packit ae235b
  
Packit ae235b
    
Packit ae235b
      
Packit ae235b
        
1
Packit ae235b
2
Packit ae235b
3
Packit ae235b
4
Packit ae235b
5
Packit ae235b
6
Packit ae235b
7
Packit ae235b
8
Packit ae235b
9
Packit ae235b
10
Packit ae235b
11
Packit ae235b
12
Packit ae235b
13
Packit ae235b
14
Packit ae235b
15
Packit ae235b
16
Packit ae235b
17
Packit ae235b
18
Packit ae235b
19
Packit ae235b
20
Packit ae235b
21
Packit ae235b
22
Packit ae235b
23
Packit ae235b
24
Packit ae235b
25
Packit ae235b
26
Packit ae235b
27
Packit ae235b
28
Packit ae235b
29
Packit ae235b
30
Packit ae235b
31
Packit ae235b
32
Packit ae235b
33
Packit ae235b
34
Packit ae235b
35
Packit ae235b
36
Packit ae235b
37
Packit ae235b
38
Packit ae235b
39
Packit ae235b
40
Packit ae235b
41
Packit ae235b
42
Packit ae235b
43
Packit ae235b
44
Packit ae235b
45
Packit ae235b
        
error = NULL;
Packit ae235b
res = dbus_g_proxy_call (system_bus_proxy,
Packit ae235b
                         "RequestName",
Packit ae235b
                         &error,
Packit ae235b
                         G_TYPE_STRING, NAME_TO_CLAIM,
Packit ae235b
                         G_TYPE_UINT,   DBUS_NAME_FLAG_ALLOW_REPLACEMENT,
Packit ae235b
                         G_TYPE_INVALID,
Packit ae235b
                         G_TYPE_UINT,   &result,
Packit ae235b
                         G_TYPE_INVALID);
Packit ae235b
if (!res)
Packit ae235b
  {
Packit ae235b
    if (error != NULL)
Packit ae235b
      {
Packit ae235b
        g_warning ("Failed to acquire %s: %s",
Packit ae235b
                   NAME_TO_CLAIM, error->message);
Packit ae235b
        g_error_free (error);
Packit ae235b
      }
Packit ae235b
    else
Packit ae235b
      {
Packit ae235b
        g_warning ("Failed to acquire %s", NAME_TO_CLAIM);
Packit ae235b
      }
Packit ae235b
    goto out;
Packit ae235b
  }
Packit ae235b
Packit ae235b
if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
Packit ae235b
  {
Packit ae235b
    if (error != NULL)
Packit ae235b
      {
Packit ae235b
        g_warning ("Failed to acquire %s: %s",
Packit ae235b
                   NAME_TO_CLAIM, error->message);
Packit ae235b
        g_error_free (error);
Packit ae235b
      }
Packit ae235b
    else
Packit ae235b
      {
Packit ae235b
        g_warning ("Failed to acquire %s", NAME_TO_CLAIM);
Packit ae235b
      }
Packit ae235b
    exit (1);
Packit ae235b
  }
Packit ae235b
Packit ae235b
dbus_g_proxy_add_signal (system_bus_proxy, "NameLost",
Packit ae235b
                         G_TYPE_STRING, G_TYPE_INVALID);
Packit ae235b
dbus_g_proxy_connect_signal (system_bus_proxy, "NameLost",
Packit ae235b
                             G_CALLBACK (on_name_lost), NULL, NULL);
Packit ae235b
Packit ae235b
/* further setup ... */
Packit ae235b
      
Packit ae235b
    
Packit ae235b
  
Packit ae235b
Packit ae235b
Packit ae235b

Packit ae235b
    

Packit ae235b

Packit ae235b
    While you can do things this way with GDBus too, using
Packit ae235b
    g_dbus_proxy_call_sync(), it is much nicer to use the high-level API
Packit ae235b
    for this:
Packit ae235b
    

Packit ae235b
Packit ae235b
  
Packit ae235b
    
Packit ae235b
      
Packit ae235b
        
1
Packit ae235b
2
Packit ae235b
3
Packit ae235b
4
Packit ae235b
5
Packit ae235b
6
Packit ae235b
7
Packit ae235b
8
Packit ae235b
9
Packit ae235b
10
Packit ae235b
11
Packit ae235b
12
Packit ae235b
13
Packit ae235b
14
Packit ae235b
15
Packit ae235b
16
Packit ae235b
17
Packit ae235b
18
Packit ae235b
19
Packit ae235b
20
Packit ae235b
21
Packit ae235b
22
Packit ae235b
        
static void
Packit ae235b
on_name_acquired (GDBusConnection *connection,
Packit ae235b
                  const gchar     *name,
Packit ae235b
                  gpointer         user_data)
Packit ae235b
{
Packit ae235b
  /* further setup ... */
Packit ae235b
}
Packit ae235b
Packit ae235b
/* ... */
Packit ae235b
Packit ae235b
  owner_id = g_bus_own_name (G_BUS_TYPE_SYSTEM,
Packit ae235b
                             NAME_TO_CLAIM,
Packit ae235b
                             G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT,
Packit ae235b
                             on_bus_acquired,
Packit ae235b
                             on_name_acquired,
Packit ae235b
                             on_name_lost,
Packit ae235b
                             NULL,
Packit ae235b
                             NULL);
Packit ae235b
Packit ae235b
  g_main_loop_run (loop);
Packit ae235b
Packit ae235b
  g_bus_unown_name (owner_id);
Packit ae235b
      
Packit ae235b
    
Packit ae235b
  
Packit ae235b
Packit ae235b
Packit ae235b

Packit ae235b
    Note that g_bus_own_name() works asynchronously and requires
Packit ae235b
    you to enter your mainloop to await the on_name_aquired()
Packit ae235b
    callback. Also note that in order to avoid race conditions (e.g.
Packit ae235b
    when your service is activated by a method call), you have to export
Packit ae235b
    your manager object before acquiring the
Packit ae235b
    name. The on_bus_acquired() callback is the right place to do
Packit ae235b
    such preparations.
Packit ae235b
    

Packit ae235b
Packit ae235b
Packit ae235b

Generated by GTK-Doc V1.27
Packit ae235b
</body>
Packit ae235b
</html>