Skip to content

Commit 6228c33

Browse files
authored
my beloved son, and faithful in the Lord
For this cause have I sent unto you Timothy, who is my beloved son, and faithful in the Lord, who shall bring you into remembrance of my ways which are in Christ, as I teach everywhere in every church. (1Cor 4:17)
1 parent 5d7760d commit 6228c33

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
2+
//For this cause have I sent unto you Timothy, who is my beloved son, and faithful in the Lord, who shall bring you into remembrance of my ways which are in Christ, as I teach everywhere in every church. (1Cor 4:17)
3+
4+
package com.javarush.task.task30.task3008;
5+
6+
import java.util.Map;
7+
import java.util.concurrent.ConcurrentHashMap;
8+
import java.io.*;
9+
import java.net.ServerSocket;
10+
import java.net.Socket;
11+
12+
13+
public class Server {
14+
15+
private static Map<String, Connection> connectionMap = new ConcurrentHashMap<>();
16+
17+
public static void sendBroadcastMessage(Message message) {
18+
for (Connection connection : connectionMap.values()) {
19+
try {
20+
connection.send(message);
21+
} catch (IOException e) {
22+
ConsoleHelper.writeMessage("Something wrong with sending message...");
23+
}
24+
}
25+
}
26+
27+
public static void main(String[] args) {
28+
ConsoleHelper.writeMessage("Please, input server port: ");
29+
try (ServerSocket serverSocket = new ServerSocket(ConsoleHelper.readInt())) {
30+
ConsoleHelper.writeMessage("Server starting...");
31+
while (true) {
32+
new Handler(serverSocket.accept()).start();
33+
}
34+
} catch (Exception e) {
35+
ConsoleHelper.writeMessage("Error, server socket was closed.");
36+
}
37+
}
38+
39+
private static class Handler extends Thread {
40+
private Socket socket;
41+
42+
public Handler(Socket socket) {
43+
this.socket = socket;
44+
}
45+
46+
private String serverHandshake(Connection connection) throws IOException, ClassNotFoundException {
47+
while (true) {
48+
connection.send(new Message(MessageType.NAME_REQUEST));
49+
Message answer = connection.receive();
50+
51+
if (answer.getType() == MessageType.USER_NAME) {
52+
53+
if (!answer.getData().isEmpty()) {
54+
if (!connectionMap.containsKey(answer.getData())) {
55+
connectionMap.put(answer.getData(), connection);
56+
connection.send(new Message(MessageType.NAME_ACCEPTED));
57+
return answer.getData();
58+
}
59+
}
60+
}
61+
}
62+
}
63+
64+
private void sendListOfUsers(Connection connection, String userName) throws IOException {
65+
for (Map.Entry<String, Connection> entry : connectionMap.entrySet()) {
66+
if (!entry.getKey().equals(userName)) {
67+
connection.send(new Message(MessageType.USER_ADDED, entry.getKey()));
68+
}
69+
}
70+
}
71+
}
72+
}
73+
74+
/*
75+
Чат (9)
76+
Этап второй, но не менее важный – отправка клиенту (новому участнику) информации об
77+
остальных клиентах (участниках) чата.
78+
79+
Для этого:
80+
1) Добавь приватный метод void sendListOfUsers(Connection connection, String userName) throws IOException, где connection – соединение с участником, которому будем слать информацию, а userName – его имя. Метод должен:
81+
2) Пройтись по connectionMap.
82+
3) У каждого элемента из п.2 получить имя клиента, сформировать команду с типом USER_ADDED и полученным именем.
83+
4) Отправить сформированную команду через connection.
84+
5) Команду с типом USER_ADDED и именем равным userName отправлять не нужно, пользователь и так имеет информацию о себе.
85+
86+
87+
Требования:
88+
1. В классе Handler должен быть создан метод private void sendListOfUsers(Connection connection, String userName).
89+
2. Метод sendListOfUsers должен отправлять через connection сообщение о том, что был добавлен пользователь с именем name для каждого имени из connectionMap.
90+
3. Метод sendListOfUsers НЕ должен отправлять сообщение о добавлении пользователя, если имя пользователя совпадает со вторым параметром метода (userName).
91+
*/

0 commit comments

Comments
 (0)