## EDBusServer

EDBusServer — An abstract base class for a D-Bus server

## Synopsis

    #include <libebackend/libebackend.h>

    struct              EDBusServer;
    struct              EDBusServerClass;
    EDBusServerExitCode e_dbus_server_run                   (EDBusServer *server,
                                                             gboolean wait_for_client);
    void                e_dbus_server_quit                  (EDBusServer *server,
                                                             EDBusServerExitCode code);
    void                e_dbus_server_hold                  (EDBusServer *server);
    void                e_dbus_server_release               (EDBusServer *server);
    void                e_dbus_server_load_modules          (EDBusServer *server);

## Description

## Details

### struct EDBusServer

    struct EDBusServer {
    	GObject parent;
    	EDBusServerPrivate *priv;
    };

Contains only private data that should be read and manipulated using the functions below.

Since 3.4

### struct EDBusServerClass

    struct EDBusServerClass {
    	GObjectClass parent_class;

    	const gchar *bus_name;
    	const gchar *module_directory;

    	/* Signals */
    	void		(*bus_acquired)		(EDBusServer *server,
    						 GDBusConnection *connection);
    	void		(*bus_name_acquired) (EDBusServer *server,
    						 GDBusConnection *connection);
    	void		(*bus_name_lost) (EDBusServer *server,
    						 GDBusConnection *connection);
    	EDBusServerExitCode
    			(*run_server)		(EDBusServer *server);
    	void		(*quit_server)		(EDBusServer *server,
    						 EDBusServerExitCode code);

    	gpointer reserved[14];
    };

### e_dbus_server_run ()

    EDBusServerExitCode e_dbus_server_run                   (EDBusServer *server,
                                                             gboolean wait_for_client);

Emits the "run" signal.

By default the `server` will start its main loop and attempt to acquire its well-known session bus name. If the `server`'s main loop is already running, the function will immediately return E_DBUS_SERVER_EXIT_NONE. Otherwise the function blocks until `e_dbus_server_quit()` is called.

If `wait_for_client` is `TRUE`, the `server` will continue running until the first client connection is made instead of quitting on its own if no client connection is made within the first few seconds.

`server` : | an EDBusServer
`wait_for_client` : | continue running until a client connects
Returns : | the exit code passed to `e_dbus_server_quit()`

Since 3.4

### e_dbus_server_quit ()

    void                e_dbus_server_quit                  (EDBusServer *server,
                                                             EDBusServerExitCode code);

Emits the "quit" signal with the given `code`.

By default the `server` will quit its main loop and cause `e_dbus_server_run()` to return `code`.

`server` : | an EDBusServer
`code` : | an EDBusServerExitCode

Since 3.4

### e_dbus_server_hold ()

    void                e_dbus_server_hold                  (EDBusServer *server);

Increases the use count of `server`.

Use this function to indicate that the server has a reason to continue to run. To cancel the hold, call `e_dbus_server_release()`.

`server` : | an EDBusServer

Since 3.4

### e_dbus_server_release ()

    void                e_dbus_server_release               (EDBusServer *server);

Decreates the use count of `server`.

When the use count reaches zero, the server will stop running.

Never call this function except to cancel the effect of a previous call to `e_dbus_server_hold()`.

`server` : | an EDBusServer

Since 3.4

### e_dbus_server_load_modules ()

    void                e_dbus_server_load_modules          (EDBusServer *server);

This function should be called once during `server` initialization to load all available library modules to extend the `server`'s functionality.

`server` : | an EDBusServer

Since 3.4