[Gambas-user] DBus - How are signal data converted to Gambas data?
Benoît Minisini
g4mba5 at gmail.com
Sun Jan 28 19:53:13 CET 2018
Le 26/01/2018 à 16:26, Hans Lehmann a écrit :
> Hello,
>
> in a project for the Gambas book on 'D-Bus with gb.dbus' I have the
> problem to read the arguments of a particular signal. In the text of the
> XML document (Inspection) I found the number of expected arguments,
> their names and the signatures. Through the output of the console
> program, I knew all the values of the three arguments.
>
> Cutout Introspection-XML-Document:
> ----------------------------------------------------
>
> ...
> <signal name="VolumeAdded">
> <arg type="s" name="dbus_name"/>
> <arg type="s" name="id"/>
> <arg type="(ssssssbbssa{ss}sa{sv})" name="volume"/>
> </signal>
> ...
>
> Output of 'dbus-monitor' after inserting the USB stick with label '2_GB_P':
> ------------------------------------------------------------------------------------------------------
>
>
> ...
> signal sender=:1.10 -> dest=(null destination) serial=173
> path=/org/gtk/Private/RemoteVolumeMonitor;
> interface=org.gtk.Private.RemoteVolumeMonitor; member=VolumeAdded
> string "org.gtk.Private.UDisks2VolumeMonitor"
> string "0x1449bd0"
> struct {
> string "0x1449bd0"
> string "2_GB_P"
> string ". GThemedIcon drive-removable-media-usb
> drive-removable-media drive-removable drive"
> string ". GThemedIcon drive-removable-media-usb-symbolic ...
> drive-symbolic drive-removable-media-usb drive-removable-media
> drive-removable drive"
> string ""
> string ""
> boolean true
> boolean true
> string "0x14af500"
> string ""
> array [
> dict entry(
> string "class"
> string "device"
> )
> dict entry(
> string "unix-device"
> string "/dev/sdd1"
> )
> dict entry(
> string "label"
> string "2_GB_P"
> )
> dict entry(
> string "uuid"
> string "38ea6e0b-a161-401d-a673-11c06cf1229e"
> )
> ]
> string "gvfs.time_detected_usec.1516884992931147"
> array [
> ]
> }
> ...
>
> With the following source code I can read the arguments 0 and 1, since
> they have simple data types. From argument 2, I can only read the values
> with simple data types.
>
> *Therefore, my question: Which way do I have to go - certainly about the
> class DBusValues, whose documentation I do not understand - in order to
> read out the values of all arguments safely and to map them to Gambas
> types?*
>
> Gambas-Code-Cutout
> ------------------
>
> Public Sub theDBusSignal_Signal(Signal As String, Arguments As Variant[])
>
> Dim vElement As Variant
> Dim i As Integer
> Dim aDBusArray As New BusValue
>
> If Signal = "VolumeAdded" Or Signal = "VolumeRemoved" Then
>
> txaResults.Insert("Number of Arguments from 'Arguments' = " &
> Arguments.Count & gb.NewLine)
> txaResults.Insert("Arguments[0] = " & Arguments[0] & gb.NewLine)
> txaResults.Insert("Arguments[1] = " & Arguments[1] & gb.NewLine)
> txaResults.Insert("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
> & gb.NewLine)
>
> For i = 0 To Arguments[2].Max
> ' txaResults.Insert("[2][" & Str(i) & "]" & " -> " &
> Arguments[2][i] & gb.NewLine)
> txaResults.Insert(TypeOf(Arguments[2][i]) & gb.NewLine)
> Next
>
> Print "Number of Arguments from 'Arguments' = "; Arguments.Count
>
> Print "Argument[0] = "; Arguments[0]
> Print "Arguments[1] = "; Arguments[1]; " | Typ = ";
> TypeOf(Arguments[1])
> Print "Arguments[2] = "; Arguments[2]; " | Typ = ";
> TypeOf(Arguments[2])
>
> For Each vElement In Arguments
> Print vElement
> Next
>
> For i = 0 To Arguments[2].Max
> Print "[2]["; i; "]"; " -> "; Arguments[2][i]
> Next
>
> Endif
>
> End
>
> Cutout Console:
> ---------------------
>
> Number of Arguments from 'Arguments' = 3
> ---------------------------------------------------------
> Argument[0] = org.gtk.Private.UDisks2VolumeMonitor
> Arguments[1] = 0x1449bd0 | Typ = 9
> Arguments[2] = (Variant[] 0x16ac228) | Typ = 16
> ---------------------------------------------------------
> org.gtk.Private.UDisks2VolumeMonitor
> 0x1449bd0
> (Variant[] 0x16ac228)
> ---------------------------------------------------------
> [2][0] -> 0x1449bd0
> [2][1] -> 2_GB_P
> [2][2] -> . GThemedIcon drive-removable-media-usb ... drive-removable drive
> [2][3] -> . GThemedIcon drive-removable-media-usb-symbolic
> ...drive-removable-media-usb
> [2][4] ->
> [2][5] ->
> [2][6] -> True
> [2][7] -> True
> [2][8] ->
> [2][9] ->
> [2][10] -> (Collection 0x16ac048)
> [2][11] -> gvfs.time_detected_usec.1516884992931147
> [2][12] -> (Collection 0x16ac188)
>
> With kind regards
>
> Hans
>
I have update the DBus documentation page at
http://gambaswiki.org/wiki/doc/dbus#t10 with the datatype mapping
between Gambas and DBus.
It should help you.
Regards,
--
Benoît Minisini
More information about the User
mailing list