7. Client Side Design
7.1 System Architecture
The client side of the system is implemented as a Java applet with multiple threads. Basically, it collects user requests from GUI, wraps them into request objects, and after receiving responses from the server, update GUI correspondingly and offers feedback to the user. The architecture of the client applet is illustrated as the following graph.
As shown in the above figure, the client has several threads running concurrently: main thread, data connection thread, personal schedule thread, meeting proposal thread, listener thread.
1. Main thread
It is the applet which will be loaded when the user open the login page. After the user push the login button, it will create the data connection thread, the listener thread and the personal schedule thread, and display the personal schedule interface.
2. Data connection thread
It is responsible for the regular data communication with the server side. After the thread is run, it will connect to the listening port of the server and maintain the socket connection. Sending requests from the client to the server is done by the data connection thread's sending a RequestObj object through the socket, and then after receiving the ResponseObj object, it will forward the response from server to corresponding modules.
3. Personal schedule module
This module manages the interface for user to organize his daily schedule. It display user's information and update the GUI according to user's transactions. We should support functionalities for user to browse through his daily schedule, add a new task, and delete an existed task. It sends request to and get response from the server through the data connection thread. Moreover, the personal schedule module also gets newest update messages from the server by the listener thread. Every time it receives such a message, it will update the GUI to represent the changes made to the user's schedule because of being invited to a meeting by other users.
4. Meeting proposal module
This module manages the interface for user to propose a meeting. It needs to support functionalities for user to select the time of a meeting (date, start time and end time), participants of the meeting, and a room and devices if needed. Alternative ways are offered for use to indicate the time of the meeting, either by choosing the start time and end time, or by giving the length of the meeting and a range of time slot from which to select a proper time slot. Alternative ways are offered for use to indicate the place of the meeting, either by choose a specific room from the room list, or by indicate the room size wanted. It communicates with the server through the data connection thread.
5. Listener thread
This thread listens for update messages broadcast from the server. The reason for the server to broadcast such messages is that, when user 1 and user 2 are both using MeetingAnywhere, and if user 1 proposes a meeting whose participants include user 2, we need to inform user 2 that his personal schedule has been changed: a new task is added because he will attend a meeting proposed by user 1. Every time the listener thread receives such a broadcast message, it will interact with the personal schedule module to make necessary changes.
7.2 GUI design
Two TextFields for user to input username and password. For reason of security, echo character of password field is '*'.