diff --git a/pom.xml b/pom.xml
index 05188ae..21bd5b6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,4 +3,14 @@
org.progmethoden
java-chat
0.0.1-SNAPSHOT
+
+
+
+
+ com.google.code.gson
+ gson
+ 2.10.1
+
+
+
\ No newline at end of file
diff --git a/src/main/java/ChatServer.java b/src/main/java/ChatServer.java
index aaf8810..0c60774 100644
--- a/src/main/java/ChatServer.java
+++ b/src/main/java/ChatServer.java
@@ -2,32 +2,59 @@
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
public class ChatServer {
-
private ServerSocket serverSocket;
+ private List clients; // Liste, um alle verbundenen Clients zu verwalten
public ChatServer(int port) {
+ clients = new CopyOnWriteArrayList<>(); // Verwende CopyOnWriteArrayList für die Thread-Sicherheit
+
try {
serverSocket = new ServerSocket(port);
System.out.println("Started ChatServer on port " + port);
- Socket connectionToClient = serverSocket.accept();
-
- System.out.println("Accepted new Client");
+ while (true) {
+ System.out.println("waiting for new Client...");
+ Socket connectionToClient = serverSocket.accept(); // Auf Verbindungen von Clients warten
+ ClientHandler client = new ClientHandler(this, connectionToClient);
+ clients.add(client); // Neuen Client zur Liste hinzufügen
+ System.out.println("Accepted new Client");
+ }
} catch (IOException e) {
e.printStackTrace();
+ } finally {
+ if (serverSocket != null) {
+ try {
+ serverSocket.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
}
}
-
- public void broadcastMessage(String s) {
+ // Methode, um eine Nachricht an alle verbundenen Clients zu senden
+ public void broadcastMessage(String message) {
+ System.out.println(message);
+ if (message != null) {
+ for (ClientHandler client : clients) {
+ client.sendMessage(message); // Nachricht an jeden Client senden
+ }
+ }
}
public static void main(String[] args) {
- new ChatServer(3141);
+ new ChatServer(3141); // ChatServer auf Port 3141 starten (eventuell den Port flexibler noch wählen? falls belegt)
}
+ // Methode, um einen Client aus der Liste der verbundenen Clients zu entfernen
+ public void removeClient(ClientHandler client) {
+ clients.remove(client);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/CreateUser.java b/src/main/java/CreateUser.java
new file mode 100644
index 0000000..8e8f15f
--- /dev/null
+++ b/src/main/java/CreateUser.java
@@ -0,0 +1,124 @@
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
+
+import java.io.*;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+import java.io.FileWriter;
+import java.io.IOException;
+
+import java.util.UUID;
+
+class CreateUser {
+ private String id;
+ private String userName;
+ private String password;
+ private String birthday;
+
+
+ // Constructor
+ public CreateUser(String id, String name, String password, String birthday) {
+ this.id = id;
+ this.userName = name;
+ this.password = password;
+ this.birthday = birthday;
+ }
+
+ // Getters and Setters
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getBirthday() {
+ return birthday;
+ }
+
+ public void setBirthday(String birthday) {
+ this.birthday = birthday;
+ }
+
+ // Function to create user with validation
+ public static CreateUser createUser(String id, String userName, String password, String birthday) {
+ if (userName == null || userName.isEmpty()) {
+ throw new IllegalArgumentException("Username cannot be empty");
+ }
+ if (password == null || password.isEmpty()) {
+ throw new IllegalArgumentException("Password cannot be empty");
+ }
+ if (password.length() < 6) {
+ throw new IllegalArgumentException("Password must be at least 6 characters long");
+ } return new CreateUser(id, userName, password, birthday);
+ }
+
+ // Function to save to JSON file, replace with database call later
+ public void saveToJsonFile(String filename) {
+ List userList = readUserListFromJsonFile(filename);
+ userList.add(this);
+
+ try (FileWriter fileWriter = new FileWriter(filename)) {
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ gson.toJson(userList, fileWriter);
+ System.out.println("User information appended to " + filename);
+ } catch (IOException e) {
+ System.out.println("Error occurred while saving user information to JSON file: " + e.getMessage());
+ }
+ }
+
+ // Function to read user information from a JSON file
+ public static List readUserListFromJsonFile(String filename) {
+ List userList = new ArrayList<>();
+ try (Reader reader = new FileReader(filename)) {
+ Type userListType = new TypeToken>() {}.getType();
+ Gson gson = new Gson();
+ userList = gson.fromJson(reader, userListType);
+ } catch (FileNotFoundException e) {
+ // File does not exist yet, so return an empty list
+ } catch (IOException e) {
+ System.out.println("Error occurred while reading user information from JSON file: " + e.getMessage());
+ }
+ return userList;
+ }
+
+ public static void main(String[] args) {
+ try {
+ // Example usage
+ UUID randomUUID = UUID.randomUUID();
+ CreateUser user = createUser(randomUUID.toString(), "Another Test User", "TestPasswort123", "01.01.2000");
+
+ // Example of accessing properties
+ System.out.println("UserID: " + user.getId());
+ System.out.println("User Name: " + user.getUserName());
+ System.out.println("User Password: " + user.getPassword());
+ System.out.println("User Birthday: " + user.getBirthday());
+
+
+ // Save user information to a JSON file
+ user.saveToJsonFile("user.json");
+ } catch (IllegalArgumentException e) {
+ System.out.println("Error: " + e.getMessage());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/SignUpGUI.java b/src/main/java/SignUpGUI.java
new file mode 100644
index 0000000..b19cf8e
--- /dev/null
+++ b/src/main/java/SignUpGUI.java
@@ -0,0 +1,103 @@
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.List;
+import java.util.UUID;
+
+public class SignUpGUI extends JFrame implements ActionListener {
+ private JTextField usernameField, passwordField, confirmPasswordField, birthdayField;
+ private JButton signUpButton;
+
+ public SignUpGUI() {
+ setTitle("Sign Up");
+ setSize(300, 250);
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ setLayout(null);
+
+ JLabel usernameLabel = new JLabel("Username:");
+ usernameLabel.setBounds(20, 20, 80, 25);
+ add(usernameLabel);
+
+ usernameField = new JTextField();
+ usernameField.setBounds(100, 20, 160, 25);
+ add(usernameField);
+
+ JLabel passwordLabel = new JLabel("Password:");
+ passwordLabel.setBounds(20, 50, 80, 25);
+ add(passwordLabel);
+
+ passwordField = new JPasswordField();
+ passwordField.setBounds(100, 50, 160, 25);
+ add(passwordField);
+
+ JLabel confirmPasswordLabel = new JLabel("Confirm Password:");
+ confirmPasswordLabel.setBounds(20, 80, 120, 25);
+ add(confirmPasswordLabel);
+
+ confirmPasswordField = new JPasswordField();
+ confirmPasswordField.setBounds(140, 80, 120, 25);
+ add(confirmPasswordField);
+
+ JLabel birthdayLabel = new JLabel("Birthday:");
+ birthdayLabel.setBounds(20, 110, 80, 25);
+ add(birthdayLabel);
+
+ birthdayField = new JTextField();
+ birthdayField.setBounds(100, 110, 160, 25);
+ add(birthdayField);
+
+ signUpButton = new JButton("Sign Up");
+ signUpButton.setBounds(100, 150, 100, 25);
+ signUpButton.addActionListener(this);
+ add(signUpButton);
+
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (e.getSource() == signUpButton) {
+ String username = usernameField.getText();
+ String password = passwordField.getText();
+ String confirmPassword = confirmPasswordField.getText();
+ String birthday = birthdayField.getText();
+
+ if (!password.equals(confirmPassword)) {
+ JOptionPane.showMessageDialog(this, "Passwords do not match!", "Sign Up Error", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if (!isUsernameAvailable("user.json", username)) {
+ JOptionPane.showMessageDialog(this, "Username already exists!", "Sign Up Error", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ try {
+ UUID randomUUID = UUID.randomUUID();
+ CreateUser user = CreateUser.createUser(randomUUID.toString(), username, password, birthday);
+ user.saveToJsonFile("user.json");
+ JOptionPane.showMessageDialog(this, "User signed up successfully!");
+ dispose();
+ } catch (IllegalArgumentException ex) {
+ JOptionPane.showMessageDialog(this, "Error: " + ex.getMessage(), "Sign Up Error", JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+ // Function to check if the input username doesn't already exist in the JSON file
+ private boolean isUsernameAvailable(String filename, String username) {
+ List userList = CreateUser.readUserListFromJsonFile(filename);
+ if (userList != null) {
+ for (CreateUser user : userList) {
+ if (user.getUserName().equals(username)) {
+ return false; // Username already exists
+ }
+ }
+ }
+ return true; // Username is available
+ }
+
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(() -> {
+ SignUpGUI signUpGUI = new SignUpGUI();
+ signUpGUI.setVisible(true);
+ });
+ }
+}
\ No newline at end of file
diff --git a/user.json b/user.json
new file mode 100644
index 0000000..0201a67
--- /dev/null
+++ b/user.json
@@ -0,0 +1,14 @@
+[
+ {
+ "id": "961ca202-ecbd-4dfc-ac0b-28f367618aa1",
+ "userName": "asd",
+ "password": "123456",
+ "birthday": "1"
+ },
+ {
+ "id": "d563a466-753b-4a5e-8b6c-e7e4756c7397",
+ "userName": "asd1",
+ "password": "123456",
+ "birthday": "1"
+ }
+]
\ No newline at end of file