X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=doc%2Fafb-application-writing.md;h=70dde7837413a21d7b2e073a3ea509c9fd0157eb;hb=ec667b3dfe10945dc6fa140ef5acaaf10a437db9;hp=a7099a86e8c2bf61c0fb2a69f72b980ad95688d2;hpb=f5c013e32d1c8ee931bec45cee7bc04c5d536d50;p=src%2Fapp-framework-binder.git diff --git a/doc/afb-application-writing.md b/doc/afb-application-writing.md index a7099a86..70dde783 100644 --- a/doc/afb-application-writing.md +++ b/doc/afb-application-writing.md @@ -1,14 +1,45 @@ HOWTO WRITE an APPLICATION above AGL FRAMEWORK ============================================== version: 1 - Date: 29 mai 2016 + Date: 30 mai 2016 Author: José Bollo TABLE-OF-CONTENT-HERE +Languages for writing Applications +---------------------------------- -Writing a C application ------------------------ +### Writing an HTML5 application + +Developpers of HTML5 applications (client side) can easyly create +applications for AGL framework using their prefered +HTML framework. + +Developpers can also create powerful server side plugins to improve +their application. This server side plugin should return the mime-type +application/json and can be accessed either by HTTP or by Websockets. + +In a near future, the JSON-RPC protocol will be available together +with the current x-afb-json1 protocol. + +Two examples of HTML5 applications are given: + +- [afb-client](https://github.com/iotbzh/afb-client) a simple "hello world" application + +- [afm-client](https://github.com/iotbzh/afm-client) a simple "Home screen" application + +### Writing a Qt application + +Writing Qt applications is also possible because Qt offers APIs to +make HTTP queries and to connect using WebSockets. + +It is even possible to write a QML application. +It is demontrated by the sample application token-websock: + +- [token-websock](https://github.com/iotbzh/afb-daemon/blob/master/test/token-websock.qml) +a simple "hello world" application in QML + +### Writing a C application C applications can use the binder afb-daemon through a websocket connection. @@ -24,4 +55,39 @@ The current implementation use libsystemd and file descriptors. This may be changed in the future to also support secure sockets and being less dependant of libsystemd. +Handling sessions within applications +------------------------------------- + +Applications must be aware of the the features session and token +when they interact with the binder afb-daemon. + +Applications are communicating with their binder afb-daemon using +a network connection or a kind of network connection (unix domain +socket isn't currently implemented but could be used in near future). +Also, HTTP protocol is not a connected protocol. It means that +the socket connection can not be used to authenticate a client. + +For this reason, the binder should authenticate the application +by using a commonly shared secret named token and the identification +of the client named session. + +### Handling sessions + +Plugins and features of the binder need to keep track of the client +instances. This of importance for plugins running as service +because they may have to separate the data of each client. + +For common HTML5 browser running an HTML5 application. + +### Exchanging tokens + +At start, the framework communicates a common secret to both the binder +and its client: the application. This initial secret is the +initial token. + +For each of its client application, the binder manages a current active +token. The initial token is the default active token. It is the expected +token for new clients. + +