Developing a Rich Internet Application (RIA) is one of the challenging fields in software development. Tasks such as handling user sessions, tracking view state, updating web controls, handling AJAX calls and etc. can be very challenging if your development tool doesn't automatically handle all of these for you. uniGUI Web application framework makes developing stateful Web applications easier than ever. uniGUI extends Web Application development experience to a new dimension. Each uniGUI application can be considered both as a standard Delphi VCL application which uses web as its presentation layer. uniGUI enables developers to create, design and debug their Delphi applications as if they are developing regular desktop applications and then choose one of the available options for web deployment. uniGUI itself is not a single library. For Web front-end uniGUI relies on well known Sencha Ext JS JavaScript library. Thanks to Ext JS for enabling uniGUI to provide a high end, visually perfect and fully AJAX enabled web front-end.
uniGUI uses same Form oriented application model available in a typical VCL application. This means your application will be consisted of many forms which all belong to same session. This will enable developers to follow same principles and design patterns they were following in designing standard desktop application. This will highly reduces learning curve which can be very steep for other web application frameworks. Especially for those which need developers' direct interaction with UI design details, CSS code, HTML code, XML templates and JavaScript code. This means that a Delphi developer with little web knowledge can start developing web application using uniGUI out of the box. While uniGUI enables developers to develop web applications with little knowledge for web technologies, it is always recommended for developers to fully become familiar web underlying web technologies which are used in general in the web and used in particular in uniGUI, such Ext JS framework. Becoming familiar with Ext JS framework will open door to a new world which developers can customize their web application in a war which wouldn't be possible otherwise. uniGUI allows developers to directly write JavaScript client side event handlers for Ext JS controls. This advanced feature allows developers to directly allow interaction between client side screen elements without a need to communicate with the server.
In general each uniGUI application is a standard Delphi executable powered with specialized modules which all together turn the application into a full featured web server. Among these modules we can count Session Manager, Web HTTP Server, ISAPI Handler, Cache Eraser and Server Module. These modules cooperate to create sessions, handle Ajax calls, create web UI and manage session lifetime. All these actions happens completely transparent to developers.
Unified GUI
uniGUI stands for Unified Graphical User Interface or Unified GUI in short. It is called unified because it allows same UI experience in all devices with a web browser. Regardless of device, OS, CPU and display same level of user experience can be achieved on all devices with a compatible web browser. It allows a great freedom in choosing client devices. Client device can be anything from a Windows PC, OSX device to a PC with any flavor of Linux or even a Raspberry Pi!
Of course, this feature is not something unique to uniGUI. This level of independency from platform is something that any web application can provide except that uniGUI enables you to create web applications which are very close to desktop applications in look and feel.
Web Sessions
Web Sessions are main elements of a uniGUI web application. Each time a user opens a new instance of web application a new session on server is created. Each session will remain active in server until user terminates it or a timeout condition occurs. Each session keeps a complete state of running web application. That's why uniGUI sessions are called stateful. You can consider each session as a private copy of your web application which co-exists with other sessions in server's address space. Each session is isolated from other sessions and each web request is automatically redirected to its respected session. Each session has a unique "Session Id" which is used to distinguish it from other sessions. Session Id is assigned upon creation of session and included in each Ajax request, so request can be directed to correct session.
Below diagram represents internal structure of a uniGUI server. Each uniGUI server has a single copy of ServerModule which is created once per server, along with multiple sessions which are dynamically created and destroyed according to user activity. A uniGUI session contains a specialized DataModule called MainModule which is automatically created for each session. Also a Form named MainForm is created which apparently is main entry point of web application. MainForm can be preceded with a LoginForm which provide a reliable and secure way for user login. As expected each session can contain several additional DataModules and Forms.