首页

源码搜藏网

首页 > 开发教程 > 手机开发 >

MeeGo Touch服务框架

创建时间:2013-05-08 11:33  

介绍

用户进程接口被称这个服务框架是这样的一种IPC机制,这个机制允许应用单元简便地使用或者服务于一个接口。在这个文档,用为“使用者”,而提供者进程接口被称为“提供者”。

这个服务框架的目的如下:

基本的服务机制

上图展示了当一个服务端的用户(SU)使用一个接口(IF)时将发生什么.

当IF有一个新的SP时,服务映射器就会发送一个信号给适当的SU接口通知他们,或者如果IF没有更多的SP,SU也会发送通知。当有事件发生时,应用程序将会通过连接到在IF中的一个信号得到通知并采取相应的动作。例如,一个图片应用程序可能希望允许一个用户通过EMAIL去发送一个照片,它可以监听“没有更多的SP给IF”这个信号,从而知道什么时候去使这个操作失效。

服务框架的典型使用案例

服务框架不应该被使用做一般的IPC通讯或者例如介于两个小程序之间的通讯,这些应该使用其他方法来完成,例如,使用像DuiValueSpace一样可以提供数值改变通知的数据后端的方法。

用法

作为一个服务提供者(SP)

SP的开发者需要准备2样东西:

二进制文件

当一个服务端用户应用程序试图连接到这个服务时,这个二进制文件将被加载(如果它没有正在运行)。

接口

服务端用户应用程序的开发者需要的文件包括如下内容:

接口特定的头文件和接口的XML文件将共同成为maemo-interfaces-dev包的一部分,然后相应的cpp文件需要编译到接口特定的库文件里面,这些库又是maemo-interfaces包的一部分。.service文件也将会成为maemo-interfaces包的一部分。

二进制文件

如果你希望一个方法连接到当前的应用,你可以添加一个chainTask="true"属性到这个方法标签。如果你希望一个方法是异步的,你可以添加一个asyncTask="true"属性到这个方法的标签里。注意这些方法必须不含有任何的'out'参数。

例如:

MeeGo Touch服务框架代码
<!DOCTYPE node PUBLIC"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN""http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interfacename="com.nokia.TextProcessorInterface">
<methodname="reverse" chainTask="true">
<arg name="message"type="s" direction="in"/>
<arg name=""type="s" direction="out"/>
</method>
<method name="blinkScreen"asyncTask="true">
<arg name="message"type="s" direction="in"/>
</method>
</interface>
</node>

运行dui-servicefwgen工具,产生相关.h和.cpp文件,命令如下:

dui-servicefwgen -acom.nokia.TextProcessorInterface

修改主要分为三个步骤,如下面的代码段所示:

MeeGo Touch服务框架代码
 //1.创建一个已经实现接口功能函数的类实例
MyService myService;

//2.创建一个适配器去连接dbus和myService中的方法
//按照QDBusAbstractAdaptor(),它必须是创建在堆上的,
//并且内存是由QDBusAbstractAdaptor管理的,因此不需要保存指针
new MyServiceIfAdaptor( &myService );

//3.连接到会话并注册这个服务
QDBusConnection connection =QDBusConnection::sessionBus();
boolret
=connection.registerService("com.nokia.TextProcessor");

//继续程序剩余的部分编写

return app.exec();

接口

定义一个接口有三个步骤:

以上的文件需要被放进maemo-interfaces包,库需要包含在maemo-interfaces里面,头文件和XML文件也需要包含在maemo-interfaces-dev中。

接口和方法的文档说明可以加在'<doc>''</doc>'之间,例如:

MeeGo Touch服务框架代码
<interfacename="com.nokia.someserviceinterface">
<doc>
<argtag="brief">brief documentation for the interface</arg>
<argtag="details">detailed documentation for theinterface</arg>
</doc>
<method name="showPage">
<doc>
<argtag="brief">brief documentation for showPage()method</arg>
<argtag="details">detailed documentation for showPage()method</arg>
</doc>
<arg name="targetPage"type="s" direction="in" />
<arg name="previousPage"type="s" direction="in" />
<arg name="" type="b"direction="out"/>
</method>
....etc

作为一个服务使用者

演示和代码例子

在libdui/demos/servicefw/中,有个例子示范了3个服务提供者和一个服务使用者。com.nokia.textprocessor和org.maemo.textprocessor服务都实现了相同的接口-com.nokia.TextProcessorInterface.因为有2个服务,所以我们可以尝试去移除服务,然后观察服务用户从一个服务转换到另一个。有一个脚本工具/dui-servicefwgen,这个脚本工具被用来产生源文件,这些源文件是被用来给服务用户定义接口的。下面开始运行这个演示:

在这个演示中,你可以从/usr/share/dbus-1/services中移除若干个服务去模拟服务被移除的情况(然后再添加),以此来验证服务使用者程序是否能执行正确的操作。

0 0   标签: Meego教程QTmeego touch   
上一篇:第一个MeeGo Touch程序
下一篇:N900 笔划输入法 版本 0.4 已经推出

相关内容

热门推荐

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
/ 7