-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClient.java
More file actions
155 lines (140 loc) · 4.86 KB
/
Client.java
File metadata and controls
155 lines (140 loc) · 4.86 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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
/**
* @auther Yongchang He
* @profile StuID:11279620 yoh534@usask.ca
* @date 2021-10-09 12:01 p.m.
* @project Assignment1_Chatroom
* @discription
* Client is similar to ClientHandler. The main purpose is to register a client to the server via
* ClientHandler, and send and receive message via clientHandler.
* This version is defined as V1.0
**/
public class Client {
// member variables
private Socket socket;
private BufferedWriter bufferedWriter;
private BufferedReader bufferedReader;
private String userName;
// constructor initialize socket and userName and other variables
public Client(Socket socket, String userName) {
try {
this.socket = socket;
this.bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
this.bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
this.userName = userName;
} catch (IOException e) {
closeEverything(socket, bufferedReader, bufferedWriter);
}
}
/**
* member method
* send userName to clientHandler
* while the socket is connected, send message to clientHandler
*/
public void sendMessage() {
try {
bufferedWriter.write(userName);
bufferedWriter.newLine();
bufferedWriter.flush();
System.out.println("Hi! "+ userName + ", welcome~");
printHistoryMsg();
Scanner scanner = new Scanner(System.in);
while (socket.isConnected()) {
String messageToSend = scanner.nextLine();
bufferedWriter.write(userName + ": " + messageToSend);
bufferedWriter.newLine();
bufferedWriter.flush();
}
} catch (IOException e) {
closeEverything(socket, bufferedReader, bufferedWriter);
}
}
/**
* Print history message to a new client's terminal when the new client
* first log in the chatroom
*/
private void printHistoryMsg() {
FileInputStream fis = null;
try {
//fis = new FileInputStream(dir);
fis = new FileInputStream(CurrentDir.getDir());
byte[] bytes = new byte[1024];
int readCount = 0;
while ((readCount = fis.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, readCount));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* member method
* receive and read message sent from clientHandler, and print the message to terminal
*/
public void listeningForMessage() {
new Thread(new Runnable() {
@Override
public void run() {
String msgFromGroupchat;
while (socket.isConnected()) {
try {
msgFromGroupchat = bufferedReader.readLine();
System.out.println(msgFromGroupchat);
} catch (IOException e) {
closeEverything(socket, bufferedReader, bufferedWriter);
}
}
}
}).start();
}
/**
* member method
* close
*/
private void closeEverything(Socket socket, BufferedReader bufferedReader, BufferedWriter bufferedWriter) {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
if (bufferedWriter != null) {
bufferedWriter.close();
}
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* main method
* The clients can register with their userName. If they can log in successfully,
* they will get history message and they can send message to other clients.
* If the client number exceed the maximum load, they will not be permitted to enter
* the chatroom.
*/
public static void main(String[] args) {
try {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter userName:");
String userName = scanner.nextLine();
Socket socket = null;
socket = new Socket("localhost", 8818);
Client client = new Client(socket, userName);
client.listeningForMessage();
client.sendMessage();
} catch (IOException e) {
System.out.println("SERVER EXCEED MAXIMUM LOAD!...\n\n You cannot log in...");
}
}
}