如何解决Gio::DBus 的子类在使用 gdbus 发射信号时不调用 on_signal() 发射
我正在尝试在 linux 上用 C++ 实现一个简单的 dbus 本地 IPC 示例。 现在我想简单地处理一个在总线上发出的信号:
gdbus emit --system --object-path /com/wp/sink --signal com.wp.sink.MessageReceived
为了处理这个信号,我实现了一个简单的 dbus 应用程序,示例如下:
https://github.com/GNOME/glibmm:
~/repos/glibmm/examples/dbus/client_bus_listnames.cc
这是应用程序源代码:
#include "giomm/asyncresult.h"
#include "glibmm/refptr.h"
#include "glibmm/ustring.h"
#include "sigc++/functors/ptr_fun.h"
#include <iostream>
using std::cout;
using gstr = Glib::ustring;
namespace gl = Glib;
// =================================
using str = std::string;
// =================================
#include <glibmm.h>
#include <giomm.h>
namespace gd = Gio::DBus;
class DBob : public gd::Proxy
{
public:
DBob(gd::BusType bus_type,const Glib::ustring& busname,const Glib::ustring& object_path,const Glib::ustring& interface_name
): gd::Proxy (
bus_type,busname,object_path,interface_name
)
{ }
protected:
void on_signal(const Glib::ustring& sender_name,const Glib::ustring& signal_name,const Glib::VariantContainerBase& parameters) override
{
std::cout <<"on_signal\n";
}
};
// =================================
str busname {"com.wp.sink"};
gd::BusType bustype = gd::BUS_TYPE_SYstem;
str objectpath {"/com/wp/sink"};
str ifname {busname};
// =================================
#include <memory>
template <typename T>
using uptr = std::unique_ptr<T>;
uptr<DBob> dbus_object{nullptr};
// main loop.
Glib::RefPtr<Glib::MainLoop> loop;
void run()
{
dbus_object = std::make_unique<DBob>( bustype,objectpath,ifname );
std::cout << "running\n";
loop->run();
}
void gioinit()
{
Gio::init();
loop = Glib::MainLoop::create();
}
int main()
{
gioinit();
run();
return 0;
}
- 您可以从这里找到/克隆/构建应用程序: https://github.com/ortymd/wp-mesh
我的主要问题是应用程序没有触发on_signal回调 当 gdbus 发出信号时:
gdbus emit --system --object-path /com/wp/sink --signal com.wp.sink.MessageReceived
- 以下是应用程序使用的 dbus 连接的详细信息:
str busname {"com.wp.sink"};
gd::BusType bustype = gd::BUS_TYPE_SYstem;
str objectpath {"/com/wp/sink"};
str ifname {busname};
我有点困惑 gdbus 发出 不包含 busname 的参数,但是 我希望这能奏效,我正在努力寻找缺失的部分。
如果您有任何建议,我将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。