• Publicidad

Perl + Dbus

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Perl + Dbus

Notapor Yannier » 2012-05-07 13:35 @607

Saludos a todos, soy nuevo en el foro, espero encontrar ayuda en ustedes...

Mi problema es el siguiente: estoy desarrollando una aplicación (en Perl, claro) que se conecta a servicios de DBus. Ya he hecho la llamada a varias funciones retornándome el valor correcto, pero hay una de ellas que no me devuelve un escalar, sino una lista, lo cual me ha dificultado mucho el trabajo, ya que no encuentro la forma de mostrar los valores exactos que contiene la misma.

Cuando obtengo los valores y ejecuto, ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # aquí accedo a la función de la que les hablaba.
  2. my @l = $object_conect->getAllUUID();
  3. # aquí trato de imprimir el valor de la pos 1 de la lista
  4. print $l[0];
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

pero el resultado que obtengo es el siguiente ARRAY(0xa073bc8).

La aplicación a la cual me conecto está escrita en C++ y me devuelve un vector.

Espero me puedan ayudar y gracias de antemano...

Saludos
Yannier
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-05-07 13:19 @596

Publicidad

Re: Perl + Dbus

Notapor explorer » 2012-05-07 14:55 @663

Bienvenido a los foros de Perl en Español, Yannier.

El resultado indica que lo que contiene $l[0] es una referencia a un array, así que para acceder a sus valores, hay que desreferenciarlo (supongo que la llamada getAllUUID también devuelve un solo valor):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $AllUUID_ref = $object_conect->getAllUUID();
  2. my @valores = @$AllUUID_ref;
  3. say $valores[0];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl + Dbus

Notapor Yannier » 2012-05-08 14:30 @646

Gracias amigo, realmente me funcionó a la perfección.

Ahora tengo otro problema: cuando se declaran las funciones a las cuales se puede acceder a través de dbus, existen diferentes formas de declararlas. Ejemplos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. # esta sería la forma de declarar un método:
  2. <interface name="org.myprogram.services">
  3.         <method name="getAllUUID">
  4.             <arg type="s" direction="out"/>
  5.             <arg type="s" name="mac" direction="in"/>
  6.         </method>
  7. </interface>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. # esta sería la forma de declarar una propiedad:
  2. <interface name="org.myprogram.client.properties">
  3.         <property type="s" name="uuid" access="read" />
  4. </interface>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. # y esta sería la forma de declarar una señal:
  2. <interface name="org.myprogram.client.properties">
  3.         <signal name="dataChanged">
  4.             <arg type="s" name="field"/>
  5.         </signal>
  6. </interface>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Ahora, la forma de acceder a un método sería:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $allUUID = $object_conect->getAllUUID();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero ¿y la forma de acceder a las señales y propiedades que se declaren?

Ya he estado tratando de documentarme acerca del tema, pero realmente ayer me pasé la tarde en eso y no encontré la forma de conexión con este tipo de funcionalidades.

Agradecería que me ayudaran con el tema...

Saludos y gracias de antemano.
Yannier
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-05-07 13:19 @596

Re: Perl + Dbus

Notapor explorer » 2012-05-08 16:57 @748

Yo no he programado dbus desde Perl, pero en Internet hay ejemplos de cómo acceder a propiedades. Mira también en la prueba 60 de la instalación de Net::DBus. Verás que contiene un XML muy parecido a lo que muestras.

También tienes una carpeta de ejemplos en la propia distribución de Net::DBus.

Comentarios en la web de freedesktop.org, como este.

Una presentación de Perl+D-Bus, con una decena de ejemplos completos.

Edito: Presta atención a las fechas de cada documento... parece que el protocolo DBus ha ido cambiando con los años, así que el interfaz Perl también ha cambiado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl + Dbus

Notapor Yannier » 2012-05-08 21:24 @933

Muchas pero muchas gracias hermano, me ha sido de gran ayuda las dos respuestas que me has dado, te dejo un ejemplo para que si algun día usas estas funcionalidades, pues no pases trabajo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Conexión al bus.        
  2. my $bus1 = Net::DBus->system;
  3.  
  4. # Usando el servicio
  5. my $service1 = $bus1->get_service('org.myService.dbus');
  6.  
  7. =print
  8. Creando el objeto al que se va a conectar.
  9. Aquí está lo bonito: el servicio org.freedesktop.DBus.Properties te brinda
  10. dos métodos: un Get y un Set; mediante ellos se puede acceder a las propiedades.
  11. =cut
  12.  
  13. my $object1 = $service1->get_object(
  14.     "/client/23e318a7_ba01_10d5_0b46_0019d1de0e4d/properties",
  15.     'org.freedesktop.DBus.Properties'
  16. );
  17.  
  18. # Aquí se especifica el servicio donde están las propiedades y el
  19. # nombre de la propiedad a la que deseas acceder, y listo.
  20. print $object1->Get("org.myService.client.properties", "cname");
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


Una y mil gracias hermano, espero algún día te pueda ayudar...
Yannier
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-05-07 13:19 @596


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados