Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Kommunikation und Netzwerk

k24:k24.9:k24.9.6:k24.9.6.1:start

24.9.6.1 Projekt 1 – D-Bus-Signal abfangen und Signal-Namen anzeigen

Die Aufgabe bestand darin, jedes Signal auf dem D-Bus abzufangen und den Namen des Signals anzuzeigen, dass vom D-Bus-Objekt org/gtk/Private/RemoteVolumeMonitor gesendet wird, wenn ein USB-Device eingesteckt oder nach dem Auswerfen abgezogen wird. Durch die Beschränkung auf das Abfangen und Anzeigen der Signalnamen ist der Quelltext sehr kurz:

' Gambas class file
 
Private $hDBusSignal As DBusSignal
 
Public Sub Form_Open()
 
  FMain.Resizable = False
  FMain.Caption = ("Watch signals ...")
 
  $hDBusSignal = New DBusSignal(DBus.Session, "org.gtk.Private.RemoteVolumeMonitor", True) As "DevSignal"
 
  txaReport.Insert(gb.NewLine)
 
End
 
Public Sub DevSignal_Signal(Signal As String, Arguments As Variant[])
' All signals of application 'org.gtk.Private.RemoteVolumeMonitor' are intercepted.
' The array of arguments is not evaluated.
 
  txaReport.Insert("       " & "Signal = " & Signal & gb.NewLine)
  txaReport.Pos = txaReport.Length
  FMain.SetFocus()
 
End
 
Public Sub Form_Close()
  If $hDBusSignal Then $hDBusSignal.Enabled = False
  FMain.Close()
End

Für einen USB-Stick ergab sich diese Anzeige:

USB-Stick

Abbildung 24.9.6.1.1: Anzeige aller beobachteten Signale (USB-Stick)

HD

Abbildung 24.9.6.1.2: Anzeige aller beobachteten Signale (USB-Festplatte)

24.9.6.2 Projekt 2 – D-Bus-Signal abfangen und auswerten

Das zweite Projekt ist eine Adaption des D-Bus-Observer-Projektes 2. Die Aufgabenstellung wurde übernommen und das Observer-Objekt durch ein Signal-Objekt ersetzt. Der Quelltext wird vollständig angegeben – jedoch nicht kommentiert, da die Auswertung keine neuen Aspekte enthielt. Auf den komplexen Datentyp Struct wurde verzichtet.

[1] ' Gambas class file
[2]
[3] Public hDBusSignal As DBusSignal
[4]
[5] Private $cDBusConnection As DBusConnection
[6] Private $sSDBusInterface As String
[7]
[8] Public Sub Form_Open()
[9]
[10]   FMain.Resizable = True
[11]   FMain.Caption = ("Intercepting and evaluating a D-Bus signal ==> VolumeAdded")
[12]
[13]   $cDBusConnection = DBus.Session
[14]   $sSDBusInterface = "org.gtk.Private.RemoteVolumeMonitor"
[15]
[16]   hDBusSignal = New DBusSignal($cDBusConnection, $sSDBusInterface, True) As "ObservedSignal"
[17]
[18] End
[19]
[20] Public Sub Observed_Signal(Signal As String, Arguments As Variant[])
[21]
[22]   Dim k As Integer = 1
[23]   Dim vElement As Variant
[24]   Dim cCollection1, cCollection2 As Collection
[25]
[26]   If Signal = "VolumeAdded" Then
[27]     txaResults.Insert("Arguments of the \"VolumeAdded\" Signal:" & gb.NewLine)
[28]     txaResults.Insert(String$(61, "-") & gb.NewLine)
[29]     txaResults.Insert("<signal name=\"VolumeAdded\"" & gb.NewLine)
[30]     txaResults.Insert("  <arg type=\"s\" name=\"dbus_name\"/>" & gb.NewLine)
[31]     txaResults.Insert("  <arg type=\"s\" name=\"id\"/>" & gb.NewLine)
[32]     txaResults.Insert("  <arg type=\"(ssssssbbssa{ss}sa{sv})\" name=\"volume\"/>" & gb.NewLine)
[33]     txaResults.Insert("</signal>" & gb.NewLine & gb.NewLine)
[34]
[35]     txaResults.Insert("Number of arguments for Variant-Array 'Arguments' = " & Arguments.Count)
[36]     txaResults.Insert(gb.NewLine & gb.NewLine)
[37]     txaResults.Insert("Type String | Argument 1 = " & Arguments[0] & gb.NewLine)
[38]     txaResults.Insert("Type String | Argument 2 = " & Arguments[1] & gb.NewLine)
[39]     txaResults.Insert("Type Complex data type: | Argument 3 " & gb.NewLine)
[40]   ' 6x String
[41]     txaResults.Insert("Type String | Arguments[2][0] = " & Arguments[2][0] & gb.NewLine)
[42]     txaResults.Insert("Type String | Arguments[2][1] = " & Arguments[2][1] & gb.NewLine)
[43]     txaResults.Insert("Type String | Arguments[2][2] = " & Arguments[2][2] & gb.NewLine)
[44]     txaResults.Insert("Type String | Arguments[2][3] = " & Arguments[2][3] & gb.NewLine)
[45]     txaResults.Insert("Type String | Arguments[2][4] = " & Arguments[2][4] & gb.NewLine)
[46]     txaResults.Insert("Type String | Arguments[2][5] = " & Arguments[2][5] & gb.NewLine)
[47]   ' 2x Boolean
[48]     txaResults.Insert("Type Boolean | Arguments[2][6] = " & Arguments[2][6] & gb.NewLine)
[49]     txaResults.Insert("Type Boolean | Arguments[2][7] = " & Arguments[2][7] & gb.NewLine)
[50]   ' 2x String
[51]     txaResults.Insert("Type String | Arguments[2][8] = " & Arguments[2][8] & gb.NewLine)
[52]     txaResults.Insert("Type String | Arguments[2][9] = " & Arguments[2][9] & gb.NewLine)
[53]   ' 1x Collection 1 -> KeyType = String and DataType = String
[54]     cCollection1 = New Collection
[55]     cCollection1 = Arguments[2][10]
[56]     txaResults.Insert("Type Collection | Arguments[2][10]" & gb.NewLine)
[57]     If cCollection1.Count > 0 Then
[58]        For Each vElement In cCollection1
[59]          txaResults.Insert("Element " & Str(k) & "  :   " & cCollection1.Key)
[60]          txaResults.Insert(" = " & vElement & gb.NewLine)
[61]          Inc k
[62]        Next
[63]     Else
[64]        txaResults.Insert("Attention: The collection 1 is empty!" & gb.NewLine)
[65]     Endif
[66]   ' 1x String
[67]     txaResults.Insert("Type String | Arguments[2][11] = " & Arguments[2][11] & gb.NewLine)
[68]     k = 1
[69]   ' 1x Collection 2 -> KeyType = String and DataType = Variant
[70]     cCollection2 = New Collection
[71]     cCollection2 = Arguments[2][12]
[72]     txaResults.Insert("Type Collection | Arguments[2][12]" & gb.NewLine)
[73]     If cCollection2.Count > 0 Then
[74]        For Each vElement In cCollection2
[75]          txaResults.Insert("Element " & Str(k) & "  :   " & cCollection2.Key)
[76]          txaResults.Insert(" = " & vElement & gb.NewLine)
[77]          Inc k
[78]        Next
[79]     Else
[80]        txaResults.Insert("Attention: The collection 2 is empty!")
[81]     Endif
[82]   Endif
[83]
[84] End
[85]
[86] Public Sub Form_Close()
[87]
[88]   If hDBusSignal Then hDBusSignal.Enabled = False
[89]   FMain.Close()
[90]
[91] End

Das Ergebnis ist umfangreich, da auch – im Gegensatz zum Projekt 1 – der Inhalt des abgefangenen Signals 'VolumeAdded' ausgewertet wurde:

Abbildung 24.9.6.2.1: Anzeige des Inhaltes der drei Argumente des Signals

Download

Die Website verwendet zwei temporäre Session-Cookies. Diese technisch notwendigen Cookies werden gelöscht, wenn der Web-Browser geschlossen wird! Informationen zu Cookies erhalten Sie in der Datenschutzerklärung.
k24/k24.9/k24.9.6/k24.9.6.1/start.txt · Zuletzt geändert: 04.04.2018 (Externe Bearbeitung)

Seiten-Werkzeuge