From 5d9417011cb85f18c0bf0d066e63a1c85a7e5f8c Mon Sep 17 00:00:00 2001 From: maciejrusek Date: Mon, 6 Apr 2026 14:20:52 +0200 Subject: [PATCH] Index, added simple code for connection. --- .gitignore | 39 ++++++++++++++++ .idea/.gitignore | 10 +++++ .idea/encodings.xml | 7 +++ .idea/misc.xml | 14 ++++++ .idea/vcs.xml | 6 +++ pom.xml | 17 +++++++ src/main/java/ChatServer.java | 84 +++++++++++++++++++++++++++++++++++ src/main/java/Client.java | 62 ++++++++++++++++++++++++++ src/main/java/Main.java | 10 +++++ src/main/java/User.java | 16 +++++++ 10 files changed, 265 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 pom.xml create mode 100644 src/main/java/ChatServer.java create mode 100644 src/main/java/Client.java create mode 100644 src/main/java/Main.java create mode 100644 src/main/java/User.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..480bdf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +.kotlin + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d61b968 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..5edfb19 --- /dev/null +++ b/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + pl.mrusek + SimpleChat + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + \ No newline at end of file diff --git a/src/main/java/ChatServer.java b/src/main/java/ChatServer.java new file mode 100644 index 0000000..4ae0e2e --- /dev/null +++ b/src/main/java/ChatServer.java @@ -0,0 +1,84 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.ArrayList; + + +public class ChatServer implements Runnable { + private int port = 9000; + private ArrayList clientSockets = new ArrayList(); + + public ChatServer() { + } + + public ChatServer(int port) { + this.port = port; + } + + private User getOrCreateUser(String username) { + return new User(username); + } + + private void SendMessage(User user, String msg) { + try { + for (Socket client : clientSockets) { + PrintWriter out = new PrintWriter(client.getOutputStream(), true); + + out.println(user.getUsername() + " " + msg); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void handleClient(Socket socket) { + try { + clientSockets.add(socket); + + String msg; + User user = null; + + PrintWriter out = new PrintWriter(socket.getOutputStream(), true); + BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + + out.println("Login: /login username"); + while ((msg = in.readLine()) != null) { + if (user != null) { + SendMessage(user, msg); + } + + if (user == null) { + if (msg.toLowerCase().startsWith("/login")) { + String username = msg.substring(6).strip(); + user = getOrCreateUser(username); + } + } + } + + } catch (IOException e) { + clientSockets.remove(socket); + e.printStackTrace(); + } + } + + + @Override + public void run() { + try { + ServerSocket serverSocket = new ServerSocket(port); + + while (true) { + Socket clientSocket = serverSocket.accept(); + + Thread thread = new Thread(() -> handleClient(clientSocket)); + thread.start(); + } + + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/Client.java b/src/main/java/Client.java new file mode 100644 index 0000000..314e55b --- /dev/null +++ b/src/main/java/Client.java @@ -0,0 +1,62 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; +import java.util.Scanner; + +public class Client { + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; + + public void startConnection(String ip, int port) throws IOException { + clientSocket = new Socket(ip, port); + out = new PrintWriter(clientSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + } + + public void sendMessage(String message) throws IOException { + out.println(message); + } + + public String loadMessage() throws IOException { + String resp = in.readLine(); + return resp; + } + + public void stopConnection() throws IOException { + in.close(); + out.close(); + clientSocket.close(); + } + + public static void main(String[] args) throws IOException { + Client client = new Client(); + client.startConnection("127.0.0.1", 9000); + + String msg; + Scanner scanner = new Scanner(System.in); + + Thread thread = new Thread(() -> { + try { + String resp; + + while (true) { + resp = client.loadMessage(); + System.out.println(resp); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + thread.start(); + + while (true) { + msg = scanner.nextLine(); + client.sendMessage(msg); + } + +// client.stopConnection(); + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 0000000..6115892 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,10 @@ +public class Main { + public static void main(String[] args) { + ChatServer chatServer = new ChatServer(9000); + + + Thread serverThread = new Thread(chatServer); + serverThread.start(); + + } +} diff --git a/src/main/java/User.java b/src/main/java/User.java new file mode 100644 index 0000000..a5d38f7 --- /dev/null +++ b/src/main/java/User.java @@ -0,0 +1,16 @@ +public class User { + + private String username; + + public User(String username) { + this.username = username; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } +}