-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathClientHandler.java
More file actions
116 lines (108 loc) · 3.24 KB
/
ClientHandler.java
File metadata and controls
116 lines (108 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/**
* Coded by: Elia Eiroa, Hein Thu
* ClientHandler.java
*
* This class handles one Nim game between two clients
* The server host the game and two clients will take turn making moves
*/
import java.net.Socket;
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.ArrayList;
public class ClientHandler implements Runnable
{
private Socket sender = null, receiver=null;
private NimBoard board= null;
ClientHandler(Socket sender, Socket receiver, NimBoard board)
{
this.sender = sender;
this.receiver=receiver;
this.board=board;
}
public void run(){
Socket temp=null;
String input="";
int row=0, count=0, result=0;
BufferedWriter outputToSender=null, outputToReceiver=null;
BufferedReader clientInput=null;
try{
while(true){
//get the output to sender and to receiver
outputToSender = new BufferedWriter(new OutputStreamWriter(sender.getOutputStream()));
outputToReceiver = new BufferedWriter(new OutputStreamWriter(receiver.getOutputStream()));
clientInput = new BufferedReader(new InputStreamReader(sender.getInputStream()));
// connection made with sender
System.out.println("Connection made with " + sender);
input = clientInput.readLine();
System.out.println("Received: " + input);
try{
row=Integer.parseInt(input);
}
catch(NumberFormatException e){
row=0;
}
input = clientInput.readLine();
System.out.println("Received: " + input);
try{
count=Integer.parseInt(input);
}
catch(NumberFormatException e){
count=0;
}
result= board.makeChange(row,count);
//if result equals 2, the move is invalid
if(result==2){
System.out.println("Invalid move was made.");
outputToSender.write("2\n");
outputToSender.flush();
outputToSender.write(board.toString());
outputToSender.flush();
continue;
}
//when the result is 1, player wins
else if(result==1){
System.out.println(sender+" has won the game.");
outputToSender.write("1\n");
outputToSender.flush();
outputToSender.write(board.toString());
outputToSender.flush();
outputToReceiver.write("1\n");
outputToReceiver.flush();
outputToReceiver.write(board.toString());
outputToReceiver.flush();
outputToReceiver.close();
outputToSender.close();
clientInput.close();
sender.close();
receiver.close();
break;
}
else{
//updated board message
System.out.println("Updated the board according to the changes.");
outputToSender.write("0\n");
outputToSender.flush();
outputToSender.write(board.toString());
outputToSender.flush();
outputToReceiver.write("0\n");
outputToReceiver.flush();
outputToReceiver.write(board.toString());
outputToReceiver.flush();
System.out.println("Switching between sender and reciever...");
temp=sender;
sender=receiver;
receiver=temp;
}
}
}
//exception handling
catch (Exception e){
System.out.println("Error: " + e.toString());
}
System.out.println("Ending a game between "+sender+" and "+receiver);
}
} // ClientHandler for NimServer.java