d-bus系统相当庞大,源代码有100多文件,大小差不多有2M,接口很复杂,即使使用glib的绑定接口,应用程序需要编写的代码都比较多,也需要了解d-bus的一些细节。因此开发平台时,希望能够把d-bus完全封装掉,上层应用程序不用知道d-bus的概念,他们对是否采用d-bus,dcop,或者直接使用scoket都不关心。
qt4发布了一个QtDBus,用于qt的绑定,与glib的绑定基本类似,很适合qt的使用习惯。
有几个问题:
1.变参无法封装掉,c里面使用可变参数是很通常的做法,dbus提供的很多接口都是可变参数,如dbus_message_get_args,可以一次性把所有参数内容取出来,应用程序需要直接填充参数字段。但是用C++来封装似乎很麻烦,还没有找到较好的方法,但是可以不用dbus的变参接口。
2.dbus-glib做了很好的封装,对消息的发送和处理过程都封装得不错,应用可以不用知道底层的一些细节。但是dbus-glib的消息分派有自己的一套,会和将要开发的消息处理框架有冲突。相当于一套系统中有两套消息处理系统,这样会打架的,因此也不能使用dbus-glib,只能从dbus底层接口来考虑,gpe phone也是这样做的。
准备借鉴dbus-glib的封装方式,使用一个xml文件描述接口内容,再分别生成client端的发送消息接口,server端的消息接收处理接口。client的应用可以直接调用发送消息接口,server端应用可以直接处理消息结束接口,在dbus-glib中,server端是使用回调函数来处理,C++中可以使用虚函数来处理。这样的方式其实就是dbus-glib的方式,但是封装dbus底层接口的好处是可以将dbus控制到自己手中,和其他的消息处理系统一块运行。