-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cliente.java
121 lines (114 loc) · 4.01 KB
/
Cliente.java
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
117
118
119
120
121
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package tictactoe;
/**
*
* @author Andre Simao
*/
import java.io.IOException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import javax.swing.SwingUtilities;
public class Cliente {
private DataOutputStream output; // output stream to client
private DataInputStream input; // input stream from client
Socket client;
int clientId=-1;
TicTacToe ticTacToe;
public Cliente(TicTacToe ticTacToe){
this.ticTacToe=ticTacToe;
}
public void run() throws Exception{
client=new Socket("localhost",12346);
getStreams();
readDataThread();
}
private void getStreams() throws IOException
{
// set up output stream for objects
output = new DataOutputStream(client.getOutputStream());
output.flush(); // flush output buffer to send header information
// set up input stream for objects
input = new DataInputStream(client.getInputStream());
}
public void readDataThread() throws Exception{
new Thread()
{
public void run() {
try {
readData();
} catch (Exception ex) {
print("Failure to trigger client 0 listener");
}
}
}.start();
}
void readData() throws Exception{
print("waiting data from server");
Byte messageByte;
messageByte = input.readByte();
print("--------------------------------------------------");
print( "Reading data" );
switch(messageByte){
case -1: //mensagem de conexao
String numberString=input.readUTF();
clientId=Integer.parseInt(numberString);
ticTacToe.mySymbol= (clientId==0) ? 'O' : 'X';
print(messageByte+": connected as client "+numberString);
break;
case 2: //resposta afirmativa da pergunta se é o jogador da vez
int clientId=Integer.parseInt(input.readUTF());
print("move confirmation received as (sourceClient, x, y ):");
print(messageByte+": "+clientId);
messageByte = input.readByte();
int mouseX=Integer.parseInt(input.readUTF());
print(messageByte+": "+mouseX);
messageByte = input.readByte();
int mouseY=Integer.parseInt(input.readUTF());
print(messageByte+": "+mouseY);
ticTacToe.processClick(clientId,mouseX, mouseY);
break;
}
print( "Data readed" );
print("--------------------------------------------------");
readData();
}
void sendData( HashMap<Integer, String> data ) throws Exception
{
print("-------------------------");
print( "Sending data" );
for (Map.Entry<Integer,String> entry : data.entrySet()) {
int key = entry.getKey();
String value = entry.getValue();
print(key+": "+value);
output.writeByte(key);
output.writeUTF(value);
}
output.flush(); // Send off the data
print( "Data sended" );
print("-------------------------");
}
void print(Object message){
System.out.println("<<CLIENT "+clientId+">> "+message);
}
void closeConnection()
{
print( "Terminating client "+clientId );
try
{
output.close();
input.close();
client.close();
}
catch ( IOException ioException )
{
ioException.printStackTrace();
}
}
}