Skip to content

Commit 7224444

Browse files
authored
in Christ Jesus I have begotten u through gospel
For though you have ten thousand instructors in Christ, yet have you not many fathers: for in Christ Jesus I have begotten you through the gospel. (1Cor 4:15)
1 parent 4e6a41d commit 7224444

1 file changed

Lines changed: 69 additions & 0 deletions

File tree

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
2+
//For though you have ten thousand instructors in Christ, yet have you not many fathers: for in Christ Jesus I have begotten you through the gospel. (1Cor 4:15)
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+
}
47+
48+
/*
49+
Чат (7)
50+
Т.к. сервер может одновременно работать с несколькими клиентами, нам понадобится
51+
метод для отправки сообщения сразу всем.
52+
53+
Добавь в класс Server:
54+
1. Статическое поле Map<String, Connection> connectionMap, где ключом будет имя
55+
клиента, а значением — соединение с ним.
56+
2. Инициализацию поля из п.7.1 с помощью подходящего Map из библиотеки
57+
java.util.concurrent, т.к. работа с этим полем будет происходить из разных потоков и
58+
нужно обеспечить потокобезопасность.
59+
3. Статический метод void sendBroadcastMessage(Message message), который должен
60+
отправлять сообщение message всем соединениям из connectionMap. Если при
61+
отправке сообщение произойдет исключение IOException, нужно отловить его и
62+
сообщить пользователю, что не смогли отправить сообщение.
63+
64+
65+
Требования:
66+
1. В классе Server должно существовать статическое приватное поле connectionMap типа Map.
67+
2. Поле connectionMap должно быть инициализировано потокобезопасной реализаций интерфейса Map из пакета java.util.concurrent.
68+
3. В классе Server должен быть корректно реализован статический метод sendBroadcastMessage(Message message), отправляющий сообщение всем соединениям из connectionMap.
69+
*/

0 commit comments

Comments
 (0)