Skip to content

Commit 53fec13

Browse files
committed
Add extra input checks
- Add an input check for port number such that it does not interfere with other ports in use - Add an input check for usernames such that they are between 4 and 12 characters long and ascii A-Z, a-z or 0-9 - Reword warning logs
1 parent 92baad0 commit 53fec13

File tree

2 files changed

+37
-17
lines changed

2 files changed

+37
-17
lines changed

tictactoe-network-client/tictactoe-network-client/TicTacToe-Client.cs

+28-13
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,15 @@ private void MainWindow_FormClosing(object sender, System.ComponentModel.CancelE
3939
private void button_connect_Click(object sender, EventArgs e) {
4040
// Check if the username is suitable
4141
username = txtBoxUsername.Text.Trim();
42-
if (username.Length < 4 || username.Length > 16) {
43-
logs.AppendText("Please make sure your username length is between 4 and 16 characters.\n");
42+
if (username.Length < 4 || username.Length > 12) {
43+
logs.AppendText("Please make sure your username length is between 4 and 12 characters.\n");
44+
return;
45+
}
46+
if (!CheckUsername()) {
47+
logs.AppendText("Please make sure your username only consists of:\n" +
48+
"- Uppercase (A-Z)\n" +
49+
"- Lowercase (a-z)\n" +
50+
"- Digits (0-9)\n");
4451
return;
4552
}
4653
// Disable the button while attempting to connect
@@ -60,7 +67,7 @@ private void button_connect_Click(object sender, EventArgs e) {
6067
string ip = txtBoxIp.Text;
6168
int portNum;
6269
if (!Int32.TryParse(txtBoxPort.Text, out portNum)) {
63-
logs.AppendText("Check the port.\n");
70+
logs.AppendText("Please enter a valid port number.\n");
6471
btnConnect.Enabled = true;
6572
return;
6673
}
@@ -76,18 +83,19 @@ private void button_connect_Click(object sender, EventArgs e) {
7683
int bytesRead = clientSocket.Receive(buffer);
7784
string serverResponse = Encoding.Default.GetString(buffer, 0, bytesRead).Trim('\0');
7885
// Close the socket if the username is not available or the server is full
79-
if (serverResponse.Equals("USERNAME_NOT_AVAILABLE")) {
80-
logs.AppendText("Cannot join the server as this username is taken.\n");
86+
if (serverResponse.Equals("SERVER_IS_FULL")) {
87+
logs.AppendText("Server: The server is at maximum capacity.\n");
8188
clientSocket.Close();
8289
}
83-
else if (serverResponse.Equals("SERVER_IS_FULL")) {
84-
logs.AppendText("Cannot join the server as it is at maximum capacity.\n");
90+
else if (serverResponse.Equals("USERNAME_NOT_AVAILABLE")) {
91+
logs.AppendText("Server: This username is not available.\n");
8592
clientSocket.Close();
8693
}
8794
// Positive response, update the UI
8895
else {
8996
connected = true;
9097
logs.AppendText($"Connected to the server as {username}.\n");
98+
logs.AppendText($"Server: Welcome to the game, {username}!\n");
9199
txtBoxUsername.Enabled = false;
92100
txtBoxIp.Enabled = false;
93101
txtBoxPort.Enabled = false;
@@ -114,24 +122,24 @@ private void button_connect_Click(object sender, EventArgs e) {
114122
}
115123
// Handle exceptions
116124
catch {
117-
logs.AppendText("Could not connect to the server!\n");
125+
logs.AppendText("Could not connect to the server.\n");
118126
}
119127
btnConnect.Enabled = true;
120128
}
121129

122130
// Send game choices to the server
123131
private void btnPlay_Click(object sender, EventArgs e) {
124132
string message = txtBoxChoice.Text;
133+
txtBoxChoice.Clear();
125134
int playerChoice;
126135
if (Int32.TryParse(message, out playerChoice) && 1 <= playerChoice && playerChoice <= 9) {
127136
// DEBUG logs.AppendText($"{username}: {message}\n");
128-
txtBoxChoice.Text = "";
129137
clientSocket.Send(Encoding.Default.GetBytes(message));
130138
btnPlay.Enabled = false;
131139
txtBoxChoice.Enabled = false;
132140
}
133141
else {
134-
logs.AppendText("Please enter a number. (1-9)\n");
142+
logs.AppendText("Please make a valid move. (1-9)\n");
135143
}
136144
}
137145

@@ -179,7 +187,6 @@ private void ReceiveMessages() {
179187
btnPlay.Enabled = true;
180188
continue;
181189
}
182-
183190
if (message.Equals("GAME_PAUSE")) {
184191
txtBoxChoice.Enabled = false;
185192
btnPlay.Enabled = false;
@@ -188,7 +195,6 @@ private void ReceiveMessages() {
188195
logs.AppendText("Server: The game has been paused.\n");
189196
continue;
190197
}
191-
192198
if (message.Equals("GAME_RESET")) {
193199
ClearBoard();
194200
txtBoxChoice.Enabled = false;
@@ -223,7 +229,7 @@ private void ReceiveMessages() {
223229
}
224230
}
225231
// Handle exceptions
226-
catch (Exception e) {
232+
catch {
227233
// logs.AppendText($"Exception occurred: {e}\n");
228234
logs.AppendText("Disconnected from the server.\n");
229235
ClearBoard();
@@ -261,6 +267,15 @@ private void ClearBoard() {
261267
board[i].Text = i.ToString();
262268
}
263269
}
270+
271+
private bool CheckUsername() {
272+
foreach (char c in username) {
273+
if ((c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && (c < '0' || c > '9')) {
274+
return false;
275+
}
276+
}
277+
return true;
278+
}
264279

265280
// --- Helper Functions End ---
266281
}

tictactoe-network-server/tictactoe-network-server/TicTacToe-Server.cs

+9-4
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,16 @@ private void MainWindow_FormClosing(object sender, System.ComponentModel.CancelE
4646
// Start button logic
4747
private void btnStart_Click(object sender, EventArgs e) {
4848
int serverPort;
49-
// Check if the port number is a valid integer and start the server if it is
49+
// Check if the port number is a valid integer and if it is in the safe ports range
5050
if (Int32.TryParse(txtBoxPort.Text, out serverPort)) {
51+
if (49152 > serverPort || serverPort > 65535) {
52+
logs.AppendText("Please make sure the port number is in the 49152-65535 range.\n");
53+
return;
54+
}
55+
// Start the server
5156
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, serverPort);
5257
serverSocket.Bind(endPoint);
53-
serverSocket.Listen(10);
58+
serverSocket.Listen(8);
5459
listening = true;
5560
btnListen.Enabled = false;
5661
txtBoxPort.Enabled = false;
@@ -60,7 +65,7 @@ private void btnStart_Click(object sender, EventArgs e) {
6065
acceptThread.Start();
6166
logs.AppendText($"Started listening on port: {serverPort}\n");
6267
} else {
63-
logs.AppendText("Please check the port number!\n");
68+
logs.AppendText("Please enter a valid port number.\n");
6469
}
6570
}
6671

@@ -232,7 +237,7 @@ private void ReceiveMessages(User user) {
232237
txtTurn.Text = $"{nextPlayer.Shape}'s Turn";
233238
}
234239
// Client disconnection logic
235-
catch (Exception e) {
240+
catch {
236241
// logs.AppendText($"Exception occurred: {e}\n");
237242
connected = false;
238243
try {

0 commit comments

Comments
 (0)