Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .idea/dataSources.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions Client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,17 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>23.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>23.0.2</version>
</dependency>
</dependencies>

</project>
92 changes: 90 additions & 2 deletions Client/src/main/java/ru/project/ChatClientGUI.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
}
3 changes: 3 additions & 0 deletions Server/src/main/java/ru/project/Server.java
Original file line number Diff line number Diff line change
Expand Up @@ -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){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down