Service Framework API/es: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
==This is Work in progress Articulo en progreso==
h2. This is Work in progress - Articulo en progreso


'''Spanish''' [[Service Framework API Spanish|English]]
'''Spanish''' [[Service_Framework_API_Spanish|English]]


==Caracteristicas de Qt Mobility 1.1.x==
[[Category:Developing with Qt::QtMobility]]


==Noticias :==
[[Category:Spanish]]


[http://labs.qt.nokia.com/2011/05/04/qt-4-7-3-and-qt-mobility-1-1-3-have-been-released/ Qt Mobility 1.1.3 Release] ''[labs.qt.nokia.com]'' actualmente disponible para desarrollo de aplicaciones comerciales para ser distribuidas en Ovi store<br />[http://labs.qt.nokia.com/2011/05/12/qt-mobility-1-2-0-released/ Qt Mobility 1.2.0 release] ''[labs.qt.nokia.com]'' actualmente disponible
== Caracteristicas de Qt Mobility 1.1.x ==


=Service Framework=
== Noticias : ==


El <span class="caps">API</span> fuera de proceso de Service Framework simplifica a <span class="caps">IPC</span>. Permite que las aplicaciones puedan escuchar las señales, llamar slots, acceder a las propiedades e invocar métodos en QObjects en otros procesos.
&quot;Qt Mobility 1.1.3 Release&amp;quot;:http://labs.qt.nokia.com/2011/05/04/qt-4-7-3-and-qt-mobility-1-1-3-have-been-released/ actualmente disponible para desarrollo de aplicaciones comerciales para ser distribuidas en Ovi store<br />&quot;Qt Mobility 1.2.0 release&amp;quot;:http://labs.qt.nokia.com/2011/05/12/qt-mobility-1-2-0-released/ actualmente disponible


==Características principales==
= Service Framework =


* Simplifica a <span class="caps">IPC</span>
El API fuera de proceso de Service Framework simplifica a IPC. Permite que las aplicaciones puedan escuchar las señales, llamar slots, acceder a las propiedades e invocar métodos en QObjects en otros procesos.
 
== Características principales ==
 
* Simplifica a IPC
* Servicios de descubrimiento
* Servicios de descubrimiento
* Sistema basado en QMetaObject
* Sistema basado en QMetaObject
Line 21: Line 25:
* Se puede tener acceso compartido o únicos a objetos remotos. Los objetos compartidos son compartidos entre todos los clientes. Objetos únicos son exclusivos de esa sesión y el cliente.
* Se puede tener acceso compartido o únicos a objetos remotos. Los objetos compartidos son compartidos entre todos los clientes. Objetos únicos son exclusivos de esa sesión y el cliente.


==Descripción detallada==
== Descripción detallada ==


Una característica de QMetaObject es la comunicación local con signals y slots. Service Framework fuera del proceso de comunicación extiende las signals y los slots en otros procesos. La señal es interceptada, serializada y se pasa al proceso remoto en el que se recrea y se comporta como si fuera una signal local. Esto simplifica el <span class="caps">IPC</span> desde el cliente y el servidor puede usar QObject::connect y emit que es conocido por todos los programadores Qt.
Una característica de QMetaObject es la comunicación local con signals y slots. Service Framework fuera del proceso de comunicación extiende las signals y los slots en otros procesos. La señal es interceptada, serializada y se pasa al proceso remoto en el que se recrea y se comporta como si fuera una signal local. Esto simplifica el IPC desde el cliente y el servidor puede usar QObject::connect y emit que es conocido por todos los programadores Qt.


Junto con las signals y los slots el sistema MetaObject proporciona propiedades, llamadas a métodos a través de slots o Q_INVOKABLE y la identificación de tipos en tiempo de ejecución. Invoca funciones se serializa la solicitud, llama a la propiedad remota y devolver los resultados sin problemas a el proceso local.
Junto con las signals y los slots el sistema MetaObject proporciona propiedades, llamadas a métodos a través de slots o Q_INVOKABLE y la identificación de tipos en tiempo de ejecución. Invoca funciones se serializa la solicitud, llama a la propiedad remota y devolver los resultados sin problemas a el proceso local.
Line 29: Line 33:
El código del cliente para conectarse a un servicio remoto es:
El código del cliente para conectarse a un servicio remoto es:


Con 4 líneas de código <span class="caps">IPC</span> se ha establecido un servicio remoto. La primera línea crea una QServiceManager que gestiona descubrimiento de servicios. La segunda línea se busca la interfaz de nuestro objeto de prueba, y la tercera línea crear un nuevo QObject para el servicio remoto.
<code><br />// Create a service manager<br />QServiceManager manager;


La última línea conecta las signal de los objetos remotos HelloWorld al slot local Hola. Cada vez que el objeto remoto emite una signal Hola se llamará. El argumento QString sera pasado con una copia de los datos remotos
// Get the interface descriptor<br />QList&amp;lt;QServiceInterfaceDescriptor&amp;gt; ld = manager.findInterfaces(&quot;Service&amp;quot;);


Una vez que el QObject es creado puede ser tratado como cualquier QObject con respecto al sistema de meta objetos. Hay una diferencia importante, los servicios remotos puede fallar. Una signal especial es añadida a QObjects errorUnrecoverableIPCFault(QService::UnrecoverableIPCError) la cual es emitida cuando se produce un fallo en las comunicaciones. El objetivo entonces debe ser destruido.
// Get a local object<br />QObject '''obj = manager.loadInterface(ld[0]);
<br />// Connect to a sample signal<br />connect(obj, SIGNAL (HelloWorld(QString)), this, SLOT (Hello(QString)));<br /></code>
<br />Con 4 líneas de código IPC se ha establecido un servicio remoto. La primera línea crea una QServiceManager que gestiona descubrimiento de servicios. La segunda línea se busca la interfaz de nuestro objeto de prueba, y la tercera línea crear un nuevo QObject para el servicio remoto.
<br />La última línea conecta las signal de los objetos remotos HelloWorld al slot local Hola. Cada vez que el objeto remoto emite una signal Hola se llamará. El argumento QString sera pasado con una copia de los datos remotos
<br />Una vez que el QObject es creado puede ser tratado como cualquier QObject con respecto al sistema de meta objetos. Hay una diferencia importante, los servicios remotos puede fallar. Una signal especial es añadida a QObjects errorUnrecoverableIPCFault(QService::UnrecoverableIPCError) la cual es emitida cuando se produce un fallo en las comunicaciones. El objetivo entonces debe ser destruido.
<br />Este lado del servicio requiere de dos partes, un archivo XML que describe el servicio y el registro con el servicio. A continuación un ejemplo del archivo XML:
<br /><code>&amp;lt;?xml version=&quot;1.0&amp;quot; encoding=&quot;UTF-8&amp;quot;?&amp;gt;<br />&lt;service&amp;gt;<br /> &lt;name&amp;gt;IPCExampleService&amp;lt;/name&amp;gt;<br /> &lt;filepath&amp;gt;localsocket:qt_sfw_example&amp;lt;/filepath&amp;gt;<br /> &lt;description&amp;gt;Example XML file&amp;lt;/description&amp;gt;<br /> &lt;interface&amp;gt;<br /> &lt;name&amp;gt;com.nokia.qt.example&amp;lt;/name&amp;gt;<br /> &lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;<br /> &lt;description&amp;gt;Descriptive text&amp;lt;/description&amp;gt;<br /> &lt;capabilities&amp;gt;&lt;/capabilities&amp;gt;<br /> &lt;/interface&amp;gt;<br />&lt;/service&amp;gt;</code>
<br />Mientras el archivo XML se explica asi mismo, el filepath es importante. Se debe comenzar con &quot;localsocket&amp;quot; que describe un proceso fuera de servicio. Para registrarse con el administrador de servicios:
<br /><code>QServiceManager manager;<br />const QString path = QCoreApplication::applicationDirPath() + &quot;/xmldata/exampleservice.xml&amp;quot;;<br />m.add(path);<br />QRemoteServiceClassRegister::registerType&amp;lt;SharedService&amp;gt;(QRemoteServiceClassRegister::SharedInstance);<br />QRemoteServiceControl''' control = new QRemoteServiceControl();<br />control-&gt;publishServices(&quot;qt_sfw_example&amp;quot;);<br />#ifdef Q_OS_SYMBIAN<br /> RProcess::Rendezvous(KErrNone); // will be removed after tech preview<br />#endif<br />app.exec&amp;amp;#40;&amp;#41;</code>


Este lado del servicio requiere de dos partes, un archivo <span class="caps">XML</span> que describe el servicio y el registro con el servicio. A continuación un ejemplo del archivo <span class="caps">XML</span>:
Las 3 primeras lineas registran el XML con el administrador de servicios. Este sólo tiene que ser llamado una vez para registrar el servicio. Esto se puede hacer durante la instalación, por ejemplo.
 
Mientras el archivo <span class="caps">XML</span> se explica asi mismo, el filepath es importante. Se debe comenzar con “localsocket” que describe un proceso fuera de servicio. Para registrarse con el administrador de servicios:
 
Las 3 primeras lineas registran el <span class="caps">XML</span> con el administrador de servicios. Este sólo tiene que ser llamado una vez para registrar el servicio. Esto se puede hacer durante la instalación, por ejemplo.


Los siguientes 3 líneas registran el objeto a ser exportado.
Los siguientes 3 líneas registran el objeto a ser exportado.
Line 47: Line 55:
El ifdef Q_OS_SYMBIAN es requerido temporalmente al arranque con la tech preview y sera removido en futuras versiones.
El ifdef Q_OS_SYMBIAN es requerido temporalmente al arranque con la tech preview y sera removido en futuras versiones.


Luego de la registración QCoreApplication::exec() es llamado para comenzar a trabajar.
Luego de la registración QCoreApplication::exec&amp;amp;#40;&amp;#41; es llamado para comenzar a trabajar.


SharedService puede ser definido así:
SharedService puede ser definido así:


Eso es todo lo que hay que hacer!
<code>
 
class SharedService : public QObject<br />{<br /> Q_OBJECT<br /> Q_SERVICE(SharedService, &quot;IPCExampleService&amp;quot;, &quot;com.nokia.qt.example&amp;quot;, &quot;1.0&amp;quot;)
 
public:<br /> SharedService(QObject* parent = 0)<br /> : QObject(parent)<br /> {
 
}
 
Q_INVOKABLE QString doSomething(int input)<br /> {<br /> // do something<br /> }


==Ejemplos completos==
Q_SIGNALS:<br /> void HelloWorld(QString string);<br />};<br /></code>


Un ejemplo completo con chequeo de errores esta disponible en [http://doc.qt.nokia.com/qtmobility/sfwecho.html Qt Mobility examples: Echo Client] ''[doc.qt.nokia.com]'' que proporciona un servicio y un UI de ejemplo que demuestra las comunicaciones fuera de proceso de Service Framework.
Eso es todo lo que hay que hacer!


===Categories:===
== Ejemplos completos ==


* [[:Category:Developing with Qt|Developing_with_Qt]]
Un ejemplo completo con chequeo de errores esta disponible en &quot;Qt Mobility examples: Echo Client&amp;quot;:http://doc.qt.nokia.com/qtmobility/sfwecho.html que proporciona un servicio y un UI de ejemplo que demuestra las comunicaciones fuera de proceso de Service Framework.
** [[:Category:Developing with Qt::QtMobility|QtMobility]]
* [[:Category:Spanish|Spanish]]

Revision as of 06:18, 24 February 2015

h2. This is Work in progress - Articulo en progreso

Spanish English

Caracteristicas de Qt Mobility 1.1.x

Noticias :

"Qt Mobility 1.1.3 Release&quot;:http://labs.qt.nokia.com/2011/05/04/qt-4-7-3-and-qt-mobility-1-1-3-have-been-released/ actualmente disponible para desarrollo de aplicaciones comerciales para ser distribuidas en Ovi store
"Qt Mobility 1.2.0 release&quot;:http://labs.qt.nokia.com/2011/05/12/qt-mobility-1-2-0-released/ actualmente disponible

Service Framework

El API fuera de proceso de Service Framework simplifica a IPC. Permite que las aplicaciones puedan escuchar las señales, llamar slots, acceder a las propiedades e invocar métodos en QObjects en otros procesos.

Características principales

  • Simplifica a IPC
  • Servicios de descubrimiento
  • Sistema basado en QMetaObject
  • Multiplataforma y optimizado para cada plataforma. En Linux usa dBus, en Symbian usa CServer2. Operación de reserva para QLocalSocket.
  • Se puede tener acceso compartido o únicos a objetos remotos. Los objetos compartidos son compartidos entre todos los clientes. Objetos únicos son exclusivos de esa sesión y el cliente.

Descripción detallada

Una característica de QMetaObject es la comunicación local con signals y slots. Service Framework fuera del proceso de comunicación extiende las signals y los slots en otros procesos. La señal es interceptada, serializada y se pasa al proceso remoto en el que se recrea y se comporta como si fuera una signal local. Esto simplifica el IPC desde el cliente y el servidor puede usar QObject::connect y emit que es conocido por todos los programadores Qt.

Junto con las signals y los slots el sistema MetaObject proporciona propiedades, llamadas a métodos a través de slots o Q_INVOKABLE y la identificación de tipos en tiempo de ejecución. Invoca funciones se serializa la solicitud, llama a la propiedad remota y devolver los resultados sin problemas a el proceso local.

El código del cliente para conectarse a un servicio remoto es:

<br />// Create a service manager<br />QServiceManager manager;

// Get the interface descriptor<br />QList&amp;lt;QServiceInterfaceDescriptor&amp;gt; ld = manager.findInterfaces(&quot;Service&amp;quot;);

// Get a local object<br />QObject '''obj = manager.loadInterface(ld[0]);
<br />// Connect to a sample signal<br />connect(obj, SIGNAL (HelloWorld(QString)), this, SLOT (Hello(QString)));<br />


Con 4 líneas de código IPC se ha establecido un servicio remoto. La primera línea crea una QServiceManager que gestiona descubrimiento de servicios. La segunda línea se busca la interfaz de nuestro objeto de prueba, y la tercera línea crear un nuevo QObject para el servicio remoto.
La última línea conecta las signal de los objetos remotos HelloWorld al slot local Hola. Cada vez que el objeto remoto emite una signal Hola se llamará. El argumento QString sera pasado con una copia de los datos remotos
Una vez que el QObject es creado puede ser tratado como cualquier QObject con respecto al sistema de meta objetos. Hay una diferencia importante, los servicios remotos puede fallar. Una signal especial es añadida a QObjects errorUnrecoverableIPCFault(QService::UnrecoverableIPCError) la cual es emitida cuando se produce un fallo en las comunicaciones. El objetivo entonces debe ser destruido.
Este lado del servicio requiere de dos partes, un archivo XML que describe el servicio y el registro con el servicio. A continuación un ejemplo del archivo XML:


&amp;lt;?xml version=&quot;1.0&amp;quot; encoding=&quot;UTF-8&amp;quot;?&amp;gt;<br />&lt;service&amp;gt;<br /> &lt;name&amp;gt;IPCExampleService&amp;lt;/name&amp;gt;<br /> &lt;filepath&amp;gt;localsocket:qt_sfw_example&amp;lt;/filepath&amp;gt;<br /> &lt;description&amp;gt;Example XML file&amp;lt;/description&amp;gt;<br /> &lt;interface&amp;gt;<br /> &lt;name&amp;gt;com.nokia.qt.example&amp;lt;/name&amp;gt;<br /> &lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;<br /> &lt;description&amp;gt;Descriptive text&amp;lt;/description&amp;gt;<br /> &lt;capabilities&amp;gt;&lt;/capabilities&amp;gt;<br /> &lt;/interface&amp;gt;<br />&lt;/service&amp;gt;


Mientras el archivo XML se explica asi mismo, el filepath es importante. Se debe comenzar con "localsocket&quot; que describe un proceso fuera de servicio. Para registrarse con el administrador de servicios:


QServiceManager manager;<br />const QString path = QCoreApplication::applicationDirPath() + &quot;/xmldata/exampleservice.xml&amp;quot;;<br />m.add(path);<br />QRemoteServiceClassRegister::registerType&amp;lt;SharedService&amp;gt;(QRemoteServiceClassRegister::SharedInstance);<br />QRemoteServiceControl''' control = new QRemoteServiceControl();<br />control-&gt;publishServices(&quot;qt_sfw_example&amp;quot;);<br />#ifdef Q_OS_SYMBIAN<br /> RProcess::Rendezvous(KErrNone); // will be removed after tech preview<br />#endif<br />app.exec&amp;amp;#40;&amp;#41;

Las 3 primeras lineas registran el XML con el administrador de servicios. Este sólo tiene que ser llamado una vez para registrar el servicio. Esto se puede hacer durante la instalación, por ejemplo.

Los siguientes 3 líneas registran el objeto a ser exportado.

In this case the QObject is SharedService, and is a shared instance meaning only one instance will exist for all clients.

El ifdef Q_OS_SYMBIAN es requerido temporalmente al arranque con la tech preview y sera removido en futuras versiones.

Luego de la registración QCoreApplication::exec&amp;#40;&#41; es llamado para comenzar a trabajar.

SharedService puede ser definido así:

class SharedService : public QObject<br />{<br /> Q_OBJECT<br /> Q_SERVICE(SharedService, &quot;IPCExampleService&amp;quot;, &quot;com.nokia.qt.example&amp;quot;, &quot;1.0&amp;quot;)

public:<br /> SharedService(QObject* parent = 0)<br /> : QObject(parent)<br /> {

}

Q_INVOKABLE QString doSomething(int input)<br /> {<br /> // do something<br /> }

Q_SIGNALS:<br /> void HelloWorld(QString string);<br />};<br />

Eso es todo lo que hay que hacer!

Ejemplos completos

Un ejemplo completo con chequeo de errores esta disponible en "Qt Mobility examples: Echo Client&quot;:http://doc.qt.nokia.com/qtmobility/sfwecho.html que proporciona un servicio y un UI de ejemplo que demuestra las comunicaciones fuera de proceso de Service Framework.