-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathServerReceiver.java
80 lines (73 loc) · 2.46 KB
/
ServerReceiver.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
package servers;
import java.io.BufferedReader;
import java.net.Socket;
import java.util.concurrent.LinkedBlockingQueue;
public class ServerReceiver implements Runnable
{
private Socket clientSocket;
private BufferedReader messageReader;
LinkedBlockingQueue<String> clientMessageList;
public ServerReceiver(Socket clientSocket, BufferedReader messageReader, LinkedBlockingQueue<String> clientMessageList) {
this.clientSocket = clientSocket;
this.messageReader = messageReader;
this.clientMessageList = clientMessageList;
}
@Override
public void run()
{
String clientMessage;
while ( !clientSocket.isClosed() )
{
clientMessage = receiveClientMessage();
if ( clientMessage == null || clientMessage.equals("$") )
{
closeReader();
closeSocket();
}
else
pushMessageToQueue(clientMessage);
}
}
private String receiveClientMessage()
{
String clientMessage;
try {
clientMessage = messageReader.readLine();
}
catch (Exception e) {
System.out.println("ERROR: Couldn't receive Client's message. Maybe client has disconnected.");
e.printStackTrace();
return null;
}
return clientMessage;
}
private void pushMessageToQueue(String clientMessage) {
try {
clientMessageList.put(clientMessage);
} catch (InterruptedException e) {
System.out.println("ERROR: Couldn't put clientMessage to Server's Queue. Queue might be full.");
e.printStackTrace();
}
}
private void closeReader() {
try {
messageReader.close();
}
catch (Exception e) {
System.out.println("ERROR: Couldn't close BufferedReader. Maybe It's already closed.");
e.printStackTrace();
}
}
private void closeSocket() {
try {
clientSocket.close();
System.out.println("Connection with the client " +
clientSocket.getLocalAddress().getHostAddress() +
" has been terminated.");
}
catch (Exception e) {
System.out.println("ERROR: Couldn't close client's socket. Maybe It's already closed.");
e.printStackTrace();
}
}
}