FPC and DBus/es

From Lazarus wiki
Revision as of 00:45, 10 September 2009 by Iskraelectrica (talk | contribs)
Jump to navigationJump to search

English (en) español (es)

Documentación

DBUS es una librería GNU relativamente nueva que implementa la comunicación entre procesos mediante el paso de mensajes. Es la librería por defecto dentro de su genero para aplicaciones GNU.

Esta librería provee de lo necesario para que las aplicaciones se comuniquen unas con otras, utilizando el bus del sistema. Estas cabeceras (headers) son la traducción de la API C de bajo nivel. En un futuro sería deseable que estas cabeceras se envolviesen en una clase para facilitar su uso.

Código Común

Independientemente de lo que se quiera lograr con un programa, una gran cantidad del código contenido en el mismo tendrá grandes similitudes por el hecho de utilizar DBUS. Esta similitud la tendremos en el código de comienzo y finalización. En el comienzo porque se hace necesaria la conexión con el bus. Usualmente hay un sistema y una sesión de bus. Dependiendo de la configuración del sistema puede que no se tenga acceso al bus del sistema. A continuación se necesita una petición para obtener un nombre en el bus. Lo siguiente muestra de forma simplificada el código para el comienzo:

<delphi> var

 err: DBusError;
 conn: PDBusConnection;
 ret: cint;

begin

 { Inicialización de errores }
 dbus_error_init(@err);
 
 { Conexión }
 conn := dbus_bus_get(DBUS_BUS_SESSION, @err);
 if dbus_error_is_set(@err) <> 0 then
 begin
   WriteLn('Connection Error: ' + err.message);
   dbus_error_free(@err);
 end;
 
 if conn = nil then Exit;
 
 { Petición del nombre del bus }
 ret := dbus_bus_request_name(conn, 'test.method.server', DBUS_NAME_FLAG_REPLACE_EXISTING, @err);
 if dbus_error_is_set(@err) <> 0 then
 begin
   WriteLn('Name Error: ' + err.message);
   dbus_error_free(@err);
 end;
 
 if ret <> DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER then Exit;
 ....

</delphi>

Después, una vez que ya no se necesita el bus, se debería cerrar la conexión. Una buena forma de hacerlo en la mayoría de los casos es justamente antes del punto donde la aplicación termina:

<delphi>

 { Finalización }
 dbus_connection_close(conn);

</delphi>

Si queréis se puede comparar este código con el que se encuentra en http://www.matthew.ath.cx/misc/dbus escrito en C.

Enviando una señal

Recibiendo una señal

Llamando a un método

Respondiendo a llamadas a método

Autores

Felipe Monteiro de Carvalho


Licencia

Descarga

Estado: Beta

Subversión

El paquete de FPC para dbus se encuentra en packages/dbus en el árbol de paquetes de FPC (2.2.2/2.3.x+).

Se puede descargar la subversión de esta proyecto utilizando el mandato:

svn checkout http://svn.freepascal.org/svn/fpc/trunk/packages/dbus dbus

Por otra parte se puede descargar un repositorio completo de fpc 2.2.2+/2.3.1 que ya lo lleva incluido.

Reporte de errores

Se precisan pruebas para verificar si todas las funciones y estructuras están declaradas correctamente. Se han realizado ya pruebas para los sistemas operativos Windows, FreeBSD y Linux. Se necesitan pruebas adicionales en otros sistemas operativos para saber si el funcionamiento de estos módulos es correcto.

Puedes postear los reportes de error aquí si es necesario:


Registro de cambios

  • ??.??.06 cabeceras DBus (versión 0.1)
  1. Bajo construcción

Ayuda

Podéis enviar solicitudes de ayuda a las listas de correo de FreePascal o a las listas de correo en apache-modules.

Enlaces Externos

  • [1] - un tutorial sobre la utilización de la API de DBUS C.
  • [2] - tutorial en freedesktop.org.
  • [3] - Tutorial introductorio en KDE.org.