Linux システムでピアツーピア gdbus 通信を作成しようとしています。gdbus-codegen ツールを使用して、サーバーの作成に使用できるコードを生成しました。サーバー プログラムは、生成されたスケルトン関数を使用してオブジェクトをインスタンス化し、g_dbus_interface_skeleton_export 関数を介してエクスポートします。サーバーが新しい接続を受信したときに呼び出されるサーバー関数の概要を次に示します。
static gboolean on_new_connection(GDBusServer *server, GDBusConnection *connection, gpointer user_data)
{
GError *error = NULL;
printf("Got a new connection!\n");
my_object = org_some_object_skeleton_new();
g_signal_connect(my_object, "handle-get-magic-number", G_CALLBACK(my_callback_function), NULL);
if(!g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(my_object), connection, "/some/path", &error))
return TRUE;
}
サーバーをコンパイルして起動した後、gdbus ツールを使用してサーバーに接続しようとします。
gdbus call --address=unix:path=/home/my_user_name/MySockets/some_socket --object-path=/some/path --method=org.some.object.get_magic_number
ただし、次の応答が返されます。
Error connecting: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.DBus” on object at path /org/freedesktop/DBus
ここで何が起こっているのですか?ピア ツー ピア サーバーを作成するときに、生成されたスケルトン関数を実際に使用することは可能ですか? それとも、g_dbus_connection_register_object などの下位レベルの API 呼び出しを使用する必要がありますか?