aboutsummaryrefslogtreecommitdiffstats
path: root/src/ivicore/doc/src/ivigenerator/remotebackends.qdoc
blob: 064a0621af3c9e5f076aa907ccaa0ffe8f50c18b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/****************************************************************************
**
** Copyright (C) 2018 Pelagicore AG
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the QtIvi module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL-QTAS$
** Commercial License Usage
** Licensees holding valid commercial Qt Automotive Suite licenses may use
** this file in accordance with the commercial license agreement provided
** with the Software or, alternatively, in accordance with the terms
** contained in a written agreement between you and The Qt Company.  For
** licensing terms and conditions see https://www.qt.io/terms-conditions.
** For further information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
\page remotebackends.html
\title QtIvi Remote Backends

One of the features of the Qt IVI Generator is the possibility to create remote backends
that utilize the QtRemoteObjects module.
A remote backend may be an independently running process, even on a separate host machine, that can
be accessed by multiple clients, or frontends. Such frontends are e.g. the main infotainment system
UI, different applications running within the UI or mobile devices.

\section1 Motivation

The purpose of having remote backends is to enable the distribution of functionality and the sharing
of information. This may be between multiple processes and even between multiple host machines.
Separate processes improve the overall reliability of a complex system and make it possible to
separate computationally intensive code from the UI code. Additionally, remote backends can be
accessible by multiple frontend points, be it the central UI, separate applications or even mobile
devices or third party applications.
Combined with the automatic generation of code and uniform feature loading of QtIvi, the development
of distributed features comes with a minimal development overhead and interchangeability and
transparency on the UI code side.

\section1 Code Generation

The remote objects generator produces client side code as a QtIvi backend plugin and a remote server
stub. The client is generated using the \l {backend-qtro-template}{backend_qtro} template and the s
erver using the \l {server-qtro-template}{server_qtro} template. Both the plugin and the server
contain generated c++ code and an intermediate .rep -file that is further processed by Qt’s
\l [QtRemoteObjects] {Qt Remote Objects Compiler} {replica compiler} to produce the actual source
and replica classes.

The generated plugin is loaded and used as any other QtIvi plugin and is interchangeable with any
other backend implementation with the same API. As all method calls over QtIvi feature interfaces
are asynchronous, the use of a remote backend is similar to any other type of backend.

The generated plugin is buildable and usable as it is, and does not require further changes by the
developer. The task of the developer will be then to implement the intended functionality at the
server side. To support getting started with the server, there is a generated class that initializes
the connection. All connection parameters to the plugin and to the server are passed currently over
a config file, either in a default location or at an user specified path.

For a steb-by-step introduction to remote backends, see the \l {ivicore/qface-ivi-remote}{Remote Backend Example}.

*/