Elysium contains Notification system which consists of API set and special Windows service. This system allows to display on the screen a little pop-up window with some information, which is called notification.
Elysium Notification System consists of two parts:
API set, which is a wrapper of the client of the service Windows Communication Foundation
and a Windows service, which is a wrapper of the server's part of the Windows Communication Foundation service.
Windows Communication Foundation Service used by Elysium Notification System is local (both client and server parts of the WCF service are on the same computer, where the program starts) and therefore there is no need in connection to the Internet or some local network.
Client's API is responsible for displaying windows with notifications, slot's control is under server's supervision.
Notifications system divides the screen into many parts by grid. Any such part is called a slot. According to the preferences, the grid is placed either on the left side or on the right side of the screen, and enumeration of the parts starts from the top of the screen or from the bottom. By default the grid is placed on the right side, enumeration starts from the top of the screen. All slots have same size; between slots, between slot and the side of the screen there is a gap. By default slots sized as 480х64 pixels, the gap is 10 pixels..
At the moment you can not change this preferences. It's planned to add such a feature, which will allow user to change the preferences of notification's displaying, but only end user will be able to change preferences and they will be changed for all application simultaneously. Developer will never be able to change notification's preferences for his application.
Before displaying of the notification, the system has to request a slot for it. First available slot is a slot, which does not have a notification at the moment and has the lowest sequence number. A notification is always displayed in the first available slot. So, if slots #1, #3 and #4 are occupied, next notification will be displayed in the slot with number 2, not in the #5.
Technically, a request for the slot is executed by the following pattern. A client of the WCF service sends a request to the server part of the service, telling it the parameters of the working part of the screen, where the application is displayed (Primary Display Monitor). A request has following parameters:
A name of the parameter
A value of the parameter
An address of the endpoint of the WCF service
Named channels (names pipes)
Maximum amount of the connection
20 seconds (2 seconds for the opening of the channel, 8 seconds for the trasmitting, 8 seconds for the receiving data from the service, 2 seconds for the closing of the channel)
All operations with the slot - are asynchronous.. An operation of the displaying of the notification is synchronous and is run in the main thread of the UI, so such big amount of time for the time-out is needed.
The client receives an answer for the request, which contains a structured data about slot's number (it's needed for the proper release of the slot, it will be described further) lifespan of the slot (the amount of time, when the notification is displayed; the client can ignore this value), slot's dimensions, it's start and finish positions and animation, which can be applied to the slot. By default, lifespan time of the slot is 10 seconds,animation type - rolling from the side of the screen..
After getting the slot, the client displays the notification for the given period of time with the set animation and theme settings (theme settings were set for the whole application). When the lifespan time is finished, client's API will hide it and execute slot's freeing, using it's sequence number, which has been got previously.