From c48d6ba0f9cb3be203494ba11dd1c2fe4942bc04 Mon Sep 17 00:00:00 2001 From: iakovlysenko Date: Thu, 20 Feb 2025 00:26:12 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=98=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5?= =?UTF-8?q?=D0=B9=D1=81:=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Client/pom.xml b/Client/pom.xml index e7ad365..d00cd2a 100644 --- a/Client/pom.xml +++ b/Client/pom.xml @@ -17,4 +17,17 @@ UTF-8 + + + org.openjfx + javafx-controls + 23.0.2 + + + org.openjfx + javafx-base + 23.0.2 + + + \ No newline at end of file From c1a1897e7c03448f68ba5009c49dda4d3b9faccf Mon Sep 17 00:00:00 2001 From: iakovlysenko Date: Thu, 20 Feb 2025 00:35:56 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D0=98=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5?= =?UTF-8?q?=D0=B9=D1=81:=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/ru/project/ChatClientGUI.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/Client/src/main/java/ru/project/ChatClientGUI.java b/Client/src/main/java/ru/project/ChatClientGUI.java index 2f31496..b6179a0 100644 --- a/Client/src/main/java/ru/project/ChatClientGUI.java +++ b/Client/src/main/java/ru/project/ChatClientGUI.java @@ -1,18 +1,28 @@ package ru.project; import javafx.application.Application; import javafx.scene.Scene; -import javafx.scene.control.Button; -import javafx.scene.control.TextField; +import javafx.scene.control.*; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class ChatClientGUI extends Application { + private TextArea chatArea; + private TextField inputField; + private Button sendButton; @Override public void start(Stage primaryStage) { + chatArea = new TextArea(); + chatArea.setEditable(false); + chatArea.setWrapText(true); + TextField inputField = new TextField(); inputField.setPromptText("Введите сообщение..."); + Button sendButton = new Button("Отправить"); + + sendButton.setOnAction(e -> sendMessage()); + VBox root = new VBox(10, inputField, sendButton); Scene scene = new Scene(root, 400, 300); @@ -24,4 +34,12 @@ public void start(Stage primaryStage) { public static void main(String[] args) { launch(args); } + + private void sendMessage() { + String message = inputField.getText().trim(); + if (!message.isEmpty()) { + chatArea.appendText("Вы: " + message + "\n"); + inputField.clear(); + } + } } From 2a61f8f0a7176111936f2f58a756701d6fc5d06b Mon Sep 17 00:00:00 2001 From: iakovlysenko Date: Thu, 20 Feb 2025 00:46:21 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D0=98=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5?= =?UTF-8?q?=D0=B9=D1=81:=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=20=D1=81=D0=B5=D1=80=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/ru/project/ChatClientGUI.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Client/src/main/java/ru/project/ChatClientGUI.java b/Client/src/main/java/ru/project/ChatClientGUI.java index b6179a0..73fcd80 100644 --- a/Client/src/main/java/ru/project/ChatClientGUI.java +++ b/Client/src/main/java/ru/project/ChatClientGUI.java @@ -1,14 +1,22 @@ package ru.project; import javafx.application.Application; +import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.VBox; import javafx.stage.Stage; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.net.Socket; + public class ChatClientGUI extends Application { private TextArea chatArea; private TextField inputField; private Button sendButton; + private Socket socket; + private DataInputStream in; + private DataOutputStream out; @Override public void start(Stage primaryStage) { @@ -29,6 +37,8 @@ public void start(Stage primaryStage) { primaryStage.setTitle("Чат-клиент"); primaryStage.setScene(scene); primaryStage.show(); + + connectToServer(); } public static void main(String[] args) { @@ -42,4 +52,25 @@ private void sendMessage() { inputField.clear(); } } + private void connectToServer() { + try { + socket = new Socket("localhost", 8189); + in = new DataInputStream(socket.getInputStream()); + out = new DataOutputStream(socket.getOutputStream()); + chatArea.appendText("Подключено к серверу\n"); + + new Thread(() -> { + try { + while (true) { + String message = in.readUTF(); + Platform.runLater(() -> chatArea.appendText(message + "\n")); + } + } catch (Exception e) { + Platform.runLater(() -> chatArea.appendText(e.getMessage() + "\n")); + } + }).start(); + } catch (Exception e) { + chatArea.appendText(e.getMessage() + "\n"); + } + } } From 78fd5f6c760ee9a70e610877c546292f78a93c8a Mon Sep 17 00:00:00 2001 From: iakovlysenko Date: Thu, 20 Feb 2025 00:59:14 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=98=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D0=B9=20=D1=87=D0=B0=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/dataSources.xml | 12 +++++ .../main/java/ru/project/ChatClientGUI.java | 48 ++++++++++++++++--- .../ru/project/database/DatabaseManager.java | 2 +- 3 files changed, 55 insertions(+), 7 deletions(-) diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 2bfbbd0..409263e 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -14,5 +14,17 @@ $ProjectFileDir$ + + postgresql + true + org.postgresql.Driver + jdbc:postgresql://localhost:5432/postgres + + + + + + $ProjectFileDir$ + \ No newline at end of file diff --git a/Client/src/main/java/ru/project/ChatClientGUI.java b/Client/src/main/java/ru/project/ChatClientGUI.java index 73fcd80..a826c89 100644 --- a/Client/src/main/java/ru/project/ChatClientGUI.java +++ b/Client/src/main/java/ru/project/ChatClientGUI.java @@ -8,6 +8,7 @@ import java.io.DataInputStream; import java.io.DataOutputStream; +import java.io.IOException; import java.net.Socket; public class ChatClientGUI extends Application { @@ -17,6 +18,7 @@ public class ChatClientGUI extends Application { private Socket socket; private DataInputStream in; private DataOutputStream out; + private boolean isBanned = false; @Override public void start(Stage primaryStage) { @@ -24,11 +26,10 @@ public void start(Stage primaryStage) { chatArea.setEditable(false); chatArea.setWrapText(true); - TextField inputField = new TextField(); + inputField = new TextField(); inputField.setPromptText("Введите сообщение..."); Button sendButton = new Button("Отправить"); - sendButton.setOnAction(e -> sendMessage()); VBox root = new VBox(10, inputField, sendButton); @@ -47,9 +48,15 @@ public static void main(String[] args) { private void sendMessage() { String message = inputField.getText().trim(); - if (!message.isEmpty()) { - chatArea.appendText("Вы: " + message + "\n"); - inputField.clear(); + if (!message.isEmpty() && !isBanned) { + try { + out.writeUTF(message); // Отправляем на сервер + inputField.clear(); // Очищаем поле + } catch (IOException e) { + chatArea.appendText("Ошибка отправки сообщения\n"); + } + } else if (isBanned) { + chatArea.appendText("Вы не можете писать сообщения, так как заблокированы.\n"); } } private void connectToServer() { @@ -63,7 +70,7 @@ private void connectToServer() { try { while (true) { String message = in.readUTF(); - Platform.runLater(() -> chatArea.appendText(message + "\n")); + Platform.runLater(() -> processServerMessage(message)); } } catch (Exception e) { Platform.runLater(() -> chatArea.appendText(e.getMessage() + "\n")); @@ -73,4 +80,33 @@ private void connectToServer() { chatArea.appendText(e.getMessage() + "\n"); } } + private void processServerMessage(String message) { + if (message.startsWith("/")) { + if (message.equalsIgnoreCase("/exitok")) { + disconnect(); + } else if (message.startsWith("/authOK ")) { + chatArea.appendText("Авторизация успешна! Ваш ник: " + message.split(" ")[1] + "\n"); + } else if (message.startsWith("/regOK ")) { + chatArea.appendText("Регистрация успешна! Ваш ник: " + message.split(" ")[1] + "\n"); + } else if (message.equalsIgnoreCase("/banok")) { + isBanned = true; + chatArea.appendText("Вы были заблокированы администратором.\n"); + } else if (message.equalsIgnoreCase("/unbanok")) { + isBanned = false; + chatArea.appendText("Вы теперь разбанены и можете писать сообщения.\n"); + } + } else { + chatArea.appendText(message + "\n"); // Обычное сообщение + } + } + private void disconnect() { + try { + if (socket != null) socket.close(); + if (in != null) in.close(); + if (out != null) out.close(); + chatArea.appendText("Отключено от сервера\n"); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/Server/src/main/java/ru/project/database/DatabaseManager.java b/Server/src/main/java/ru/project/database/DatabaseManager.java index a9bb845..51ad55c 100644 --- a/Server/src/main/java/ru/project/database/DatabaseManager.java +++ b/Server/src/main/java/ru/project/database/DatabaseManager.java @@ -4,7 +4,7 @@ import java.sql.*; public class DatabaseManager { - private static final String DB_URL = "jdbc:postgresql://localhost:5432/postgres?currentSchema=public&user=postgres&password=postgres"; + private static final String DB_URL = "jdbc:postgresql://localhost:5432/postgres?currentSchema=public&user=iakovlysenko&password=null"; public DatabaseManager() { From eb34b2d365da7ae15bbe4c0c17e101c69a168a3b Mon Sep 17 00:00:00 2001 From: iakovlysenko Date: Thu, 20 Feb 2025 01:07:02 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=87=D0=B0=D1=81=D1=82=D0=B8:=20=D1=82=D0=B5=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D1=8C=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=20?= =?UTF-8?q?=D0=B1=D0=BE=D0=BB=D0=B5=D0=B5=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=20=D0=B2=D0=B8=D0=B4=D0=B8=D1=82=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B8=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Server/src/main/java/ru/project/Server.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Server/src/main/java/ru/project/Server.java b/Server/src/main/java/ru/project/Server.java index 40a4f29..d490365 100644 --- a/Server/src/main/java/ru/project/Server.java +++ b/Server/src/main/java/ru/project/Server.java @@ -42,11 +42,14 @@ public void start(){ public void subscribe(ClientHandler clientHandler){ clients.add(clientHandler); + broadcastMessage("В чат зашел: " + clientHandler.getUsername()); + System.out.println("[SERVER] Пользователь " + clientHandler.getUsername() + " подключился."); } public void unsubscribe(ClientHandler clientHandler){ clients.remove(clientHandler); broadcastMessage("Из чата вышел: "+ clientHandler.getUsername()); + System.out.println("[SERVER] Клиент " + clientHandler.getUsername() + " отключён."); } public void broadcastMessage(String message){ From da16f534785d98c0106128c1534c1ae673b0fd17 Mon Sep 17 00:00:00 2001 From: iakovlysenko Date: Thu, 20 Feb 2025 01:17:13 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=87=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/src/main/java/ru/project/ChatClientGUI.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Client/src/main/java/ru/project/ChatClientGUI.java b/Client/src/main/java/ru/project/ChatClientGUI.java index a826c89..37d5a53 100644 --- a/Client/src/main/java/ru/project/ChatClientGUI.java +++ b/Client/src/main/java/ru/project/ChatClientGUI.java @@ -2,10 +2,12 @@ import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; -import javafx.scene.control.*; +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.stage.Stage; - +import javafx.geometry.Insets; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; @@ -32,7 +34,8 @@ public void start(Stage primaryStage) { Button sendButton = new Button("Отправить"); sendButton.setOnAction(e -> sendMessage()); - VBox root = new VBox(10, inputField, sendButton); + VBox root = new VBox(10,chatArea, inputField, sendButton); + root.setPadding(new Insets(10, 10, 10, 10)); Scene scene = new Scene(root, 400, 300); primaryStage.setTitle("Чат-клиент");