RemoteSkin is a server based UI with a swing renderer
From the look and feel the programs behave like normal local Swing programs. However, the business logic is server-side. This, of course, gives advantages in distribution, since programs on the server can receive updates as often as desired without having to change the software on the client.
The description of a UI is done in JSON. This is used to describe widget sets, i.e. groups of widgets such as windows, buttons, list boxes, pull-down menus, etc. Each widget set is described in its own JSON file. There are different sections in the JSON file. A section contains the description of each widget (ID, attributes like background color, text etc.). Another section describes the hierarchy of widgets in the widget set (A is parent of B, C, F). Then there are template definitions to describe repeated attribute combinations with an ID. The descriptions of widget sets may contain links to further JSON files, e.g. for the context menus of individual widgets, etc. With this you can already describe a complete UI.
Manipulation of the widgets after display requires an API.
We decided to use a flat function API and did not use an OO API.
The reason for this is the planning of further renderers, some of which have completely different widgets.
This does not fit with an API of objects that are sometimes supported and sometimes missing on different platforms.
A flat API consists of functions like
Client-side events are made available on the server side in the form of lambdas. A function API is used here as well.
mApi.addListener(widgetId, (IButtonPressedListener) this::onButtonCancel);
On the client there is a client node with RemoteSkin plugins.
Since a node is just a small JAVA program, it boots up lightning fast (about 600ms).
Usually a login dialog is then shown, followed by an application selection (this is a matter of settings).
Now, various applications can be started just as quickly.
The performance results from the use of the fast