-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClient.java
More file actions
129 lines (118 loc) · 3.82 KB
/
Client.java
File metadata and controls
129 lines (118 loc) · 3.82 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
117
118
119
120
121
122
123
124
125
126
127
128
129
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Client extends JFrame {
private JTextField userText;
private JTextArea chatWindow;
private ObjectOutputStream output;
private ObjectInputStream input;
private String message = "";
private String serverIP;
private Socket connection;
//Constructor
public Client(String host) {
super("Client");
serverIP = host;
this.userText = new JTextField();
this.userText.setEditable(false);
this.userText.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMessage(e.getActionCommand());
userText.setText("");
}
}
);
add(userText, BorderLayout.SOUTH);
chatWindow = new JTextArea();
add(new JScrollPane(chatWindow), BorderLayout.CENTER);
setSize(1000, 500);
setVisible(true);
}
//Connect to server
public void startRunning() {
try {
connectToServer();
setupStreams();
whileChatting();
} catch (EOFException e) {
showMessage("\nClient terminated connection.");
} catch (IOException e) {
e.printStackTrace();
} finally {
closeApplication();
}
}
//Connect to server
private void connectToServer() throws IOException {
showMessage("\nAttempting connection...");
connection = new Socket(InetAddress.getByName(serverIP), 6789);
showMessage("\nConnected to: " + connection.getInetAddress().getHostName());
}
//set up streams to send and receive messages
private void setupStreams() throws IOException {
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
showMessage("\nYour streams are ready!");
}
//While chatting with server
private void whileChatting() throws IOException {
ableToType(true);
do {
try {
message = (String) input.readObject();
showMessage("\n" + message);
} catch (ClassNotFoundException e) {
showMessage("\nCan't process object type.");
}
} while (!message.equals("SERVER: END"));
}
//Close the streams and sockets
private void closeApplication() {
showMessage("\nClosing application...");
ableToType(false);
try {
output.close();
input.close();
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//Send messages to server
private void sendMessage(String message) {
try {
output.writeObject("CLIENT: " + message);
output.flush();
showMessage("\nCLIENT: " + message);
} catch (IOException e) {
chatWindow.append("\nCan't process message.");
}
}
//Change or update chatWindow
private void showMessage(final String text) {
SwingUtilities.invokeLater(
new Runnable() {
@Override
public void run() {
chatWindow.append(text);
}
}
);
}
//Gives user permission to type
private void ableToType(final boolean b) {
SwingUtilities.invokeLater(
new Runnable() {
@Override
public void run() {
userText.setEditable(b);
}
}
);
}
}