DBus Signal Questions
Derrill Vezina <[email protected]>
| Newsgroups | gmane.comp.freedesktop.dbus |
|---|---|
| Message-ID | <[email protected]> |
Hello!
I have been playing around and writing my own DBus bindings for IPC using C++ to communicate using DBus signals to mimic “socket like” communications on top of the libdbus C API.
This is the situation I am running into that I would like to see if there is some rules or exceptions I can use to work around some functionality:
1. I have 2 processes attached to a session bus named “test.echo” on an object / interface named “pingpong” with a signal called “pingpong”.
2. Each process can read and write to that signal to act as a pipe.
3. Using synchronous reading and writing, process 2 reads the data and echo’s the data back for a ping pong demo.
4. After process 1 sends data, process 2 then reads the data and echo’s it back, in which process 1 waits to read the data.
Eventually, I would like to attach multiple processes to the same signal for broadcasting.
Here is some sudo code
Process 1:
writeSignalData(“pingpong”)
print(“Wrote pingpong”)
while (true) {
message = readSignalData()
if (message.size()) {
print(“Echo received:” + message)
}
}
Process 2:
while (true) {
message = readSignalData()
if (message.size()) {
print(“Echoing: “ + message)
writeSignalData(message)
}
}
The problem that I am running into is that in the echoing process 2 is receiving its own signal after process 2 calls “writeSignalData()” since it is also technically subscribed to the signal…
For example, the output of the sudo code would be:
Process 1 – Wrote pingpong
Process 2 – Echoing: pingpong
Process 1 – Echo received: pingpong
Process 2 – Echoing: pingpong
Process 2 – Echoing: pingpong
Process 2 – Echoing: pingpong
Process 2 – Echoing: pingpong
Process 2 – Echoing: pingpong
Process 2 – Echoing: pingpong
Process 2 – Echoing: pingpong
Process 2 – Echoing: pingpong
…
One way I can think of getting around this is to add a randomly generated serial (the serial functionality in a libdbus message) to each message sent and keep an internal list of ignored serials after echoing. If the serial from the message received is a part of the blacklisted serials, then pop the message, ignore it, and move on.
I didn’t know if there was a better way to do this using rules, or possibly using two signals for bi-directional communications so that I don’t get my own sent data. I found very little for examples on the net for this way of using DBus.
I know I may not be using the DBus the way it was intended… I just like the fact that all of the TCP packet parsing is already done and grouped, also the fact that it is typed data transactions.
Derrill Vezina, PE
[email protected]
207-251-9072
_______________________________________________
dbus mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dbus