Introduction
Here, I added persistence of user information and registration. Upgrading User-friendly chat to Registrable chat requires adding persistent user information. New users must be able to register. Existing users can login using a username and password.
Registrable chat
On the start page, we need to add a password field and link to a registration page. The loginUser
function is appended with a password argument. In this function, we replaced repeat authorization checking with user authentication by name and password. If the name and password are correct, a new session is created. Another important function is registerUser(nick, password, firstName, lastName, email)
. Both functions use a single store, which can be an XML file or a relational database. In this article, we use XML.
For performance reasons, XML data must always be in memory, and disk I/O operations should be infrequent. The previously written SharedXML
class, with few improvements, will fit these requirements. The only improvements required are two functions: save(fileName)
and load(fileName)
, to write and read the whole XML on disk appropriately. For accessing single node attributes, use UserInfo
class. To maintain good architecture design, we use the UserDataXML
class, which encapsulates logic for working with SharedXML
and UserInfo
classes.
The data persistence algorithm is as follows.
Data loading
Initial data load must be on application startup or on first data access. For simplicity, we use the Application_OnStart
event.
function Application_OnStart() {
var usersData = new UsersDataXML;
usersData.initialize();
}
Data saving
Saving of data should be performed each time a change occurs; in our case this is only registerUser
call. If data changes occur frequently, then we should use an auto-saving mechanism. Here, the save operation is invoked by the same functions, but with refractory period. This means time, while the saving operation does not lead to real data writing. To implement this possibility, we should use the UserData_autoSave()
method. Also, in this scenario, we require a final call to save data before the application is terminated. In ASP, this is the Application_OnEnd()
routine.
Note, XML DOM requires physical memory that is ten times larger than the file size itself.
Another important activity is providing valid file path and read-write access permissions. If a file does not exist, it will be created after the first user registers, by registerUser()
method.
Registrable Chat requires folder with read-write permissions. It can be a DB folder, which is not a subfolder of the web application. For example: <Your local path>\Samples\RegistrableChat\DB\.
Conclusion
Are You still looking for something more? In the next part, you will see how to create a chat with multiple rooms.