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/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
diff --git a/Client/src/main/java/ru/project/ChatClientGUI.java b/Client/src/main/java/ru/project/ChatClientGUI.java
index 2f31496..37d5a53 100644
--- a/Client/src/main/java/ru/project/ChatClientGUI.java
+++ b/Client/src/main/java/ru/project/ChatClientGUI.java
@@ -1,27 +1,115 @@
package ru.project;
import javafx.application.Application;
+import javafx.application.Platform;
import javafx.scene.Scene;
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;
+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;
+ private boolean isBanned = false;
@Override
public void start(Stage primaryStage) {
- TextField inputField = new TextField();
+ chatArea = new TextArea();
+ chatArea.setEditable(false);
+ chatArea.setWrapText(true);
+
+ inputField = new TextField();
inputField.setPromptText("Введите сообщение...");
+
Button sendButton = new Button("Отправить");
- VBox root = new VBox(10, inputField, sendButton);
+ sendButton.setOnAction(e -> sendMessage());
+
+ 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("Чат-клиент");
primaryStage.setScene(scene);
primaryStage.show();
+
+ connectToServer();
}
public static void main(String[] args) {
launch(args);
}
+
+ private void sendMessage() {
+ String message = inputField.getText().trim();
+ 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() {
+ 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(() -> processServerMessage(message));
+ }
+ } catch (Exception e) {
+ Platform.runLater(() -> chatArea.appendText(e.getMessage() + "\n"));
+ }
+ }).start();
+ } catch (Exception e) {
+ 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/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){
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() {