[pulseaudio-discuss] Receiving signals from server in C
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Tue Jun 17 01:31:10 PDT 2014
On Fri, 2014-06-13 at 17:17 +0200, Greg Knoll wrote:
> I think first it would be good to know that I'm correctly registering
> with ListenForSignal. First I use
>
> conn = dbus_connection_open(serverAddress, &err);
>
> to get a connection to PulseAudio. Then I call the message:
>
> msg = dbus_message_new_method_call(
>
> "org.PulseAudio1", //Destination
>
> "/org/pulseaudio/core1", //Object path to call on
>
> "org.PulseAudio.Core1", //Interface to call on
>
> "ListenForSignal"); //Method
>
>
>
> //Add arguments: s, []
>
> dbus_message_iter_init_append(msg, &msgIter);
>
>
> //string
>
> dbus_message_iter_append_basic(&msgIter, DBUS_TYPE_STRING,&signalName);
>
>
> //empty array to listen to all
>
> dbus_message_iter_open_container(&msgIter,DBUS_TYPE_ARRAY,"o",&arrayIter);
>
> dbus_message_iter_close_container(&msgIter, &arrayIter);
>
>
> //call dbus function
>
> debug_print(" >...Listening for signal %s...\n",signalName);
>
> dbus_connection_send_with_reply_and_block (conn, msg, -1, &err);
>
> with signalName = "org.PulseAudio.Core1.NewModule"
>
> Is this correct if I want to be notified when all new modules are loaded?
Yes, looks correct.
> If so, I then call dbus_connection_pop_message on the private
> connection in the main loop.
How do you wait for incoming messages?
Typically you shouldn't call dbus_connection_pop_message() (even the
documentation of that function says that). If you have a main loop, you
should integrate the DBusConnection with the main loop. If you don't
have a main loop in your program, you can use
dbus_connection_read_write_dispatch().
>Do I need to add a match?
As already discussed in this thread: no, you don't need to add a match.
--
Tanu
More information about the pulseaudio-discuss
mailing list