On entering invalid credentials, the user is prompted to retry. After several consecutive failed
attempts, the user is blocked for 10 seconds (the number is an integer command-line argument
supplied to the server and the valid value of the number should be between 1 and 5) and cannot login
during this 10-second duration (even from another IP address). If an invalid number value (e.g., a
floating-point value, 0 or 6) is supplied to the server, the server prints out a message such as “Invalid
number of allowed failed consecutive attempt: number. The valid value of argument number is an
integer between 1 and 5”.
For non-CSE Students: After a user log in successfully, the server should record a timestamp of the
user logging in the event and the username in the active user log file ( userlog.txt, you should make
sure that write permissions are enabled for userlog.txt ). Active users are numbered starting at 1:
Active user sequence number; timestamp; username
1; 1 Jun 2022 21:30:04; Yoda
For CSE Students: After a user log in successfully, the client should next send the UDP port number
that it is listening to the server. The server should record a timestamp of the user logging in the event,
the username, the IP address, and port number that the client listens to in the active user log file
( userlog.txt ):
Active user sequence number; timestamp; username; client IP address;
client UDP server port number
1; 1 Jun 2022 21:30:04; Yoda; 129.64.1.11; 6666
For simplicity, a user will log in once at any given time, e.g., multiple logins concurrently are not
allowed, and we won’t test this case.
3.3. Text message commands
Following a successful login, the client displays a message to the user informing them of all available
commands and prompting it to select one command. The following commands are available: BCM:
Broadcast messages to all the active users i.e., public messages, ATU: Display active users, SRS:
Separate chat room service, in which users can build a separate room for part of active users and send messages
in the separate room, RDM: Read messages, OUT: Log out, and UPD: Upload file (for CSE Students
only ). All available commands should be shown to the user in the first instance after successful login.
Subsequent promptsfor actions should include this same message.
If an invalid command is selected, an error message should be shown to the user, and they should be
prompted to select one of the available actions.
In the following, the implementation of each command is explained in detail. The expected usage of
each command (i.e., syntax) is included. Note that, all commands should be upper-case (BCM,
RDM, etc.) . All arguments (if any) are separated by a single white space and will be one word long
(except messages which can contain white spaces and timestamps that have a fixed format of dd mm
yyyy hh:mm:ss such as 1 Jun 2022 16:01:20 ). You may assume that the message text may
contain uppercase characters (A-Z), lowercase characters (a-z) and digits (0-9) and the
following limited set of special characters (!@#$%.?,). If the user does not follow the expected usage
of any of the operationslisted below, i.e., missing (e.g., not specifying the body of a message when posting the
message) or incorrect number of arguments (e.g., the inclusion of additional or fewer argumentsthan required),
an error message should be shown to
the user and they should be prompted to select one of the available commands. Section 8 illustrates
sample interactions between the client and server.
There are 6 commands for Non-CSE Students and 7 commands for CSE Students respectively,
which users can execute. The execution of each command is described below.
BCM: Broadcast Message
BCM message
The message body should be included as the argument. Note that, the message may contain white
spaces (e.g., “Hi Wei, how are you”). The client should send the command (i.e., BCM), the message,
and the username to the server. In our tests, we will only use short messages(a few wordslong) . The
server should append the message, the username, and a timestamp at the end of the message log file
(file ( messagelog.txt, you should make sure that write permissions are enabled for messagelog.txt ) in
the format, along with the number of the messages (messages are numbered starting at 1):
messageNumber; timestamp; username; message
1; 1 Jun 2022 21:39:04; yoda; do or do not, there is no try
After the message issuccessfully received at a server, a confirmation message with message type (i.e.,
broadcast message), message number, and the timestamp should be sent from the server to the client
and displayed to the user. If there is no argument after the BCM command. The client should display
an error message before prompting the user to select one of the available commands.
ATU: Download Active Users
ATU
There should be no arguments for this command. The server should check if there are any other active
users apart from the client that sends the ATU command. If so, the server should send the usernames,
and timestamp since the users are active, (and their IP addresses and Port Numbers, CSE Students
only) in the active user log file to the client (the server should exclude the information of the client,
who sends ATU command to the server.). The client should display all the information of all received
users at the terminal to the user. If there is no other active user exists, a notification message of “no
other active user” should be sent to the client and displayed at the prompt to the user. The client
should next prompt the user to select one of the available commands.
SRS: Separate Room Service
This function is composed of two commands: SRB: Separate room building and SRM: Separate room message. See below details for SRB and SRM.
SRB username1 username2 …
The client needs to practice the SRB command to request the server to build a separate chat room. Arguments are usernames that the current client wants to include in the separate chat room. If there is no argument after the SRB command, the client should display an error message before prompting the user with one of the available commands. The server is expected to check if the provided usernames exist or not, and the server also should check if the corresponding users are active or not. If any username does not exist or the corresponding user is offline, the server should not create a separate room and reply to the client which username does not exist, or user is offline. If all theprovided usernames exist and all the corresponding users are online, the server should create a separate room for them, and the server is expected to generate a separate room ID which should be represented by integers e.g., 1, 2, 3. The server also needs to create a corresponding log file (e.g., SR_ID_messagelog.txt) to record the messages in a separate chat room. Finally, the server should reply to the client to confirm that the separate room has been successfully created, for example, “Separate chat room has been created, room ID: 1, users in this room: username1, username2 …”. Noted that, if a separate room already created for this group of users no matter which user in the group created, the server should not create another separate room, instead the server should inform the client with a message of “a separate room (ID: 1) already created for these users”. In addition, a user cannot build a separate room with himself/herself.