From 0548fee0a4613757c70e2f70e25ac90711b8b01a Mon Sep 17 00:00:00 2001 From: ahren Date: Tue, 12 Dec 2023 13:16:31 +0100 Subject: [PATCH] =?UTF-8?q?run=20und=20publish=20m=C3=B6chtegernm=C3=A4?= =?UTF-8?q?=C3=9Fig=20implementiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ChatProgramm/controller/Nachricht.java | 18 ----- .../controller/ReceiveAdapter.java | 41 ----------- src/ChatProgramm/model/Client.java | 39 +--------- src/ChatProgramm/model/Nachricht.java | 39 ++++++++++ src/ChatProgramm/model/ReceiveAdapter.java | 43 +++++++++++ src/ChatProgramm/model/Server.java | 62 +--------------- src/ChatProgramm/model/Transmitter.java | 73 +++++++++++++++++-- 7 files changed, 152 insertions(+), 163 deletions(-) delete mode 100644 src/ChatProgramm/controller/Nachricht.java delete mode 100644 src/ChatProgramm/controller/ReceiveAdapter.java create mode 100644 src/ChatProgramm/model/Nachricht.java create mode 100644 src/ChatProgramm/model/ReceiveAdapter.java diff --git a/src/ChatProgramm/controller/Nachricht.java b/src/ChatProgramm/controller/Nachricht.java deleted file mode 100644 index 55590e4..0000000 --- a/src/ChatProgramm/controller/Nachricht.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template - */ - -package ChatProgramm.controller; - -/** - * - * @author ahren - */ -class Nachricht -{ - public Nachricht() - { - - } -} diff --git a/src/ChatProgramm/controller/ReceiveAdapter.java b/src/ChatProgramm/controller/ReceiveAdapter.java deleted file mode 100644 index 6d4d83a..0000000 --- a/src/ChatProgramm/controller/ReceiveAdapter.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template - */ - -package ChatProgramm.controller; - -import java.util.concurrent.Flow; -import java.util.concurrent.Flow.Subscriber; - -/** - * - * @author ahren - */ -public class ReceiveAdapter implements Subscriber -{ - public ReceiveAdapter() - { - - } - - @Override - public void onSubscribe(Flow.Subscription subscription) - { - } - - @Override - public void onNext(Nachricht item) - { - } - - @Override - public void onError(Throwable throwable) - { - } - - @Override - public void onComplete() - { - } -} diff --git a/src/ChatProgramm/model/Client.java b/src/ChatProgramm/model/Client.java index 21c420f..e9b2175 100644 --- a/src/ChatProgramm/model/Client.java +++ b/src/ChatProgramm/model/Client.java @@ -4,14 +4,7 @@ */ package ChatProgramm.model; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.net.ServerSocket; import java.net.Socket; import java.util.logging.*; @@ -23,29 +16,11 @@ import java.util.logging.*; public class Client extends Transmitter { private static Logger lg = Logger.getLogger("netz"); - -// private Socket socket; -// private BufferedReader reader; -// private PrintWriter writer; - private static final int PORT = 35000; //lt. iana port > 2¹⁵ private static final String IP = "127.0.0.1"; public Client() throws IOException { connect(); - -// out.println("Hallo Du Server - ich bin ein Client"); -// out.flush(); -// -// lg.info("Client: warte auf Serverantwort"); -// -// String nachricht = in.readLine(); // ACHTUNG blockiert -// lg.info("Client: Serverbestätigung erhalten"); -// -// lg.info("Client: fertig"); -// in.close(); -// out.close(); -// s.close(); } @@ -55,20 +30,8 @@ public class Client extends Transmitter { lg.info("Client: Verbindung wird aufgebaut"); socket = new Socket(IP, PORT); lg.info("Client: Verbindung aufgebaut"); - -// lg.info("Client: initialisiere reader und writer"); -// InputStream is = socket.getInputStream(); -// OutputStream os = socket.getOutputStream(); -// -// InputStreamReader isr = new InputStreamReader(is, "UTF-8"); -// OutputStreamWriter osr = new OutputStreamWriter(os, "UTF-8"); -// -// reader = new BufferedReader(isr); -// writer = new PrintWriter(osr); -// lg.info("Client: Initialisierung abgeschlossen"); -initIO(); + initIO(); lg.info("Client: warte auf Nachricht"); - } catch (java.io.InterruptedIOException e) { lg.warning("Timeout" + "(" + timeout / 1000 + "s)"); } diff --git a/src/ChatProgramm/model/Nachricht.java b/src/ChatProgramm/model/Nachricht.java new file mode 100644 index 0000000..e3713a4 --- /dev/null +++ b/src/ChatProgramm/model/Nachricht.java @@ -0,0 +1,39 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ + +package ChatProgramm.model; + +/** + * + * @author ahren + */ +class Nachricht +{ + private String nachricht; + //private int id; + + public Nachricht(String nachricht) + { + this.nachricht = nachricht; + //this.id = id; + + } + + + + /** + * @return the id + */ +// public int getId() { +// return id; +// } + + /** + * @return the nachricht + */ + public String getNachricht() { + return nachricht; + } +} \ No newline at end of file diff --git a/src/ChatProgramm/model/ReceiveAdapter.java b/src/ChatProgramm/model/ReceiveAdapter.java new file mode 100644 index 0000000..053cdc6 --- /dev/null +++ b/src/ChatProgramm/model/ReceiveAdapter.java @@ -0,0 +1,43 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package ChatProgramm.model; + +import ChatProgramm.view.ChatView; +import java.util.concurrent.Flow; +import java.util.concurrent.Flow.Subscriber; + +/** + * + * @author ahren + */ +public class ReceiveAdapter implements Subscriber { + + private ChatView view; + private Flow.Subscription subscription; + + public ReceiveAdapter(ChatView view) { + this.view = view; + } + + @Override + public void onSubscribe(Flow.Subscription subscription) { + this.subscription = subscription; + this.subscription.request(1); + } + + @Override + public void onNext(Nachricht item) { + view.getTxtChat().setText(item.getNachricht()); + this.subscription.request(1); + } + + @Override + public void onError(Throwable throwable) { + } + + @Override + public void onComplete(){ + } +} diff --git a/src/ChatProgramm/model/Server.java b/src/ChatProgramm/model/Server.java index e279793..577f64d 100644 --- a/src/ChatProgramm/model/Server.java +++ b/src/ChatProgramm/model/Server.java @@ -5,16 +5,8 @@ package ChatProgramm.model; -import ChatProgramm.model.Transmitter; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; import java.net.ServerSocket; -import java.net.Socket; import java.util.logging.*; /** @@ -23,12 +15,7 @@ import java.util.logging.*; */ public class Server extends Transmitter { - private static Logger lg = Logger.getLogger("netz"); - - private Socket socket; - private BufferedReader reader; - private PrintWriter writer; - + private static Logger lg = Logger.getLogger("netz"); private static final int PORT = 35000; //lt. iana port > 2¹⁵ public void connect() throws IOException @@ -40,57 +27,14 @@ public class Server extends Transmitter lg.info("Server: warte auf Verbindung"); socket = sSocket.accept(); lg.info("Server: Verbindung akzeptiert"); - - lg.info("Server: initialisiere reader und writer"); - InputStream is = socket.getInputStream(); - OutputStream os = socket.getOutputStream(); - - InputStreamReader isr = new InputStreamReader(is, "UTF-8"); - OutputStreamWriter osr = new OutputStreamWriter(os, "UTF-8"); - - reader = new BufferedReader(isr); - writer = new PrintWriter(osr); - lg.info("Server: Initialisierung abgeschlossen"); - - lg.info("Server: warte auf Nachricht"); - + initIO(); } catch ( java.io.InterruptedIOException e ) { lg.warning("Timeout"+"("+timeout/1000+"s)"); } - } - public Server() throws IOException - { + public Server() throws IOException{ connect(); - -// String nachricht = in.readLine(); // ACHTUNG blockiert -// lg.info("Server: Nachricht erhalten"); -// System.out.println("Server: NACHRICHT = " + nachricht); -// -// // ACHTUNG: blockiert NICHT!!!! -// out.println("Server an Client: Nachricht erhalten"); -// out.flush(); // wichtig -// -// lg.info("Server: fertig"); -// in.close(); -// out.close(); -// s.close(); - } - - /** - * @param args the command line arguments - */ - public static void main(String[] args) - { - try - { - new Server(); - } - catch (IOException ex) - { - Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); - } } } diff --git a/src/ChatProgramm/model/Transmitter.java b/src/ChatProgramm/model/Transmitter.java index 15b09b3..07649ae 100644 --- a/src/ChatProgramm/model/Transmitter.java +++ b/src/ChatProgramm/model/Transmitter.java @@ -16,6 +16,7 @@ import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.Flow; import java.util.concurrent.Flow.Subscriber; +import java.util.concurrent.SubmissionPublisher; import java.util.logging.Level; import java.util.logging.Logger; @@ -30,12 +31,26 @@ public abstract class Transmitter implements Runnable, Subscriber { private static Logger lg = Logger.getLogger("netz"); - private Socket socket; - private BufferedReader reader; - private PrintWriter writer; - - public Transmitter() { - + protected Socket socket; + protected BufferedReader reader; + protected PrintWriter writer; + + private Nachricht nachricht; + private boolean laufend; + private Thread receive; + private SubmissionPublisher textPublisher; + + public Transmitter() + { + nachricht = new Nachricht(""); + laufend = false; + receive = null; + textPublisher = new SubmissionPublisher<>(); + } + + public void addWertSubscription(Subscriber subscriber) + { + textPublisher.subscribe(subscriber); } public abstract void connect() throws IOException; @@ -52,7 +67,7 @@ public abstract class Transmitter implements Runnable, Subscriber { reader = new BufferedReader(isr); writer = new PrintWriter(osr); lg.info("Server: Initialisierung abgeschlossen"); - + startempfangen(); lg.info("Server: warte auf Nachricht"); } catch (UnsupportedEncodingException ex) { @@ -61,9 +76,42 @@ public abstract class Transmitter implements Runnable, Subscriber { Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex); } } + + public void send(String string){ + + writer.println(string); + writer.flush(); + lg.info("Nachricht gesendet"); + textPublisher.submit(new Nachricht(string)); +// +// String nachricht = in.readLine(); // ACHTUNG blockiert +// lg.info("Client: Serverbestätigung erhalten"); +// +// lg.info("Client: fertig"); +// in.close(); +// out.close(); +// s.close(); + +// in.close(); +// out.close(); +// s.close(); + } + @Override public void run() { + while(laufend){ + try + { + String receivedString = reader.readLine(); // ACHTUNG blockiert + textPublisher.submit(new Nachricht(receivedString)); + } + catch (IOException ex) + { + Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex); + } + lg.info("Client: Serverbestätigung erhalten"); + } } @Override @@ -86,4 +134,15 @@ public abstract class Transmitter implements Runnable, Subscriber { throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody } + private void startempfangen() + { + laufend = true; + if (receive == null) + { + receive = new Thread(this); + receive.start(); + } + + } + }