一.关于DBus Binding
DBus binding是对DBus lower-api 的再一次封装,提供了更加便利的接口,有些binding还集成了事件循环,使用起来更加简洁。这里主要讨论的是Glib binding的一些实现。
二.一些基本概念
1.代理(proxy)
一个代理就是一个远程其他应用里的某个进程下的对象在本地进程的表示,在之前我们看到的底层API消息传递过程中我们是自己手动创建一个消息然后再发送,接着等待应答。而如果使用代理,代理使用起来就像是一个本地对象,不过当你触发一个方法调用,它会转化为一个消息并发送给其他应用进程并等待应答,并取得返回值。
2.GObject
GObject是一个用C语言编写的面向对象的函数库,它支持多个语言互通。它是GNOME的基础,在GTK+等应用上被广泛应用。GTK+2.0之前GObject是其一部分,后面开发者把大部分与GUI不相关的部分都移到了GObject,具体可以到http://zh.wikipedia.org/wiki/GObject这里了解。
三.利用XML描述DBus接口
DBus binding是对DBus lower-api 的再一次封装,提供了更加便利的接口,有些binding还集成了事件循环,使用起来更加简洁。这里主要讨论的是Glib binding的一些实现。
二.一些基本概念
1.代理(proxy)
一个代理就是一个远程其他应用里的某个进程下的对象在本地进程的表示,在之前我们看到的底层API消息传递过程中我们是自己手动创建一个消息然后再发送,接着等待应答。而如果使用代理,代理使用起来就像是一个本地对象,不过当你触发一个方法调用,它会转化为一个消息并发送给其他应用进程并等待应答,并取得返回值。
2.GObject
GObject是一个用C语言编写的面向对象的函数库,它支持多个语言互通。它是GNOME的基础,在GTK+等应用上被广泛应用。GTK+2.0之前GObject是其一部分,后面开发者把大部分与GUI不相关的部分都移到了GObject,具体可以到http://zh.wikipedia.org/wiki/GObject这里了解。
三.利用XML描述DBus接口
因为我们的主要目的是在GObject对象之间利用DBus进行通信。我们介绍一个最简单的方式来实现它。 dbus-bindings-tool,这个工具利用XML文件作为输入可以方便的生成服务器与客户端代码。
XML接口描述文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE node PUBLIC
"-//freedesktop//DTD D-Bus Object Introspection 1.0//EN"
"http://standards.freedesktop.org/dbus/1.0/introspect.dtd">
<node>
<interface name="org.maemo.Value">
<method name="getvalue1">
<arg type="i" name="cur_value" direction="out"/>
</method>
<method name="getvalue2">
<arg type="d" name="cur_value" direction="out"/>
</method>
<method name="setvalue1">
<arg type="i" name="new_value" direction="in"/>
</method>
<method name="setvalue2">
<arg type="d" name="new_value" direction="in"/>
</method>
</interface>
</node>
说明:这里我们在接口org.maemo.Value下实现了四个接口,分别获取和设置变量值。每个Method以method为关键字一/method结尾,interface和node类似,