From 5117ecdb6fe36951703ac472c9890218ee407f45 Mon Sep 17 00:00:00 2001 From: schuhmannje82308 Date: Tue, 19 Dec 2023 11:48:40 +0100 Subject: [PATCH] Zwischenstand vor Praktikum --- src/ChatProgramm/Start.java | 9 ++++-- .../controller/CommandController.java | 15 ++++++---- .../controller/GrafikController.java | 19 +++++++----- .../controller/commands/CommandConnect.java | 14 +++++++-- src/ChatProgramm/model/Client.java | 5 ++-- src/ChatProgramm/model/GrafikModel.java | 4 +++ src/ChatProgramm/model/ReceiveAdapter.java | 23 +++++++++----- src/ChatProgramm/model/Server.java | 5 ++-- src/ChatProgramm/model/Transmitter.java | 30 +++++++------------ src/ChatProgramm/view/GrafikView.java | 2 +- 10 files changed, 74 insertions(+), 52 deletions(-) diff --git a/src/ChatProgramm/Start.java b/src/ChatProgramm/Start.java index 33a8f50..7af4d5a 100644 --- a/src/ChatProgramm/Start.java +++ b/src/ChatProgramm/Start.java @@ -26,12 +26,15 @@ public class Start GrafikView zeichenflaeche = view.getGvZeichenflaeche(); zeichenflaeche.setModel(model); - CommandController controller_commands = new CommandController(view, model); + GrafikController controller = new GrafikController(zeichenflaeche, model); + controller.registerEvents(); + + CommandController controller_commands = new CommandController(view, model, controller, zeichenflaeche); controller_commands.registerEvents(); controller_commands.registerCommands(); - GrafikController controller = new GrafikController(zeichenflaeche, model, controller_commands); - controller.registerEvents(); + + view.setVisible(true); } diff --git a/src/ChatProgramm/controller/CommandController.java b/src/ChatProgramm/controller/CommandController.java index 058bf33..2f06009 100644 --- a/src/ChatProgramm/controller/CommandController.java +++ b/src/ChatProgramm/controller/CommandController.java @@ -10,6 +10,7 @@ import ChatProgramm.controller.commands.CommandInvoker; import ChatProgramm.controller.commands.CommandSend; import ChatProgramm.model.GrafikModel; import ChatProgramm.view.ChatView; +import ChatProgramm.view.GrafikView; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -22,12 +23,16 @@ public class CommandController implements ActionListener{ private ChatView view; private GrafikModel model; + private GrafikView gView; private CommandInvoker invoker; + private GrafikController controller; - public CommandController(ChatView view, GrafikModel model){ +public CommandController(ChatView view, GrafikModel model, GrafikController controller, GrafikView gView){ this.view = view; this.model = model; + this.gView = gView; this.invoker = new CommandInvoker(); + this.controller = controller; } public void registerEvents(){ @@ -38,8 +43,8 @@ public class CommandController implements ActionListener{ public void registerCommands(){ CommandSend commandSend = new CommandSend(view.getGvZeichenflaeche(), model); - invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, commandSend)); - //invoker.addCommand(view.getTfNachricht(), commandSend); + invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, commandSend, model, gView)); + this.controller.setCommand(commandSend); } /** @@ -50,9 +55,7 @@ public class CommandController implements ActionListener{ public void actionPerformed(ActionEvent e) { Component key = (Component)e.getSource(); invoker.executeCommand(key); -// if(key == view.getBtnOpen()|| key==view.getMiOpen()) -// invoker.deleteStack(); -// } + } } diff --git a/src/ChatProgramm/controller/GrafikController.java b/src/ChatProgramm/controller/GrafikController.java index 135d387..d490e74 100644 --- a/src/ChatProgramm/controller/GrafikController.java +++ b/src/ChatProgramm/controller/GrafikController.java @@ -23,11 +23,15 @@ public class GrafikController extends MouseAdapter implements MouseMotionListene private GrafikModel model; private CommandSend commandSend; - public GrafikController(GrafikView view, GrafikModel model, CommandController controller_commands) + public GrafikController(GrafikView view, GrafikModel model) { this.view = view; this.model = model; - commandSend = new CommandSend(view, model); + commandSend = null; + } + + void setCommand(CommandSend command){ + this.commandSend = command; } public void registerEvents() @@ -43,7 +47,7 @@ public class GrafikController extends MouseAdapter implements MouseMotionListene { Point p = evt.getPoint(); model.addPoint(p); - view.drawPoint(p); + view.drawPoint(); } @Override @@ -55,10 +59,9 @@ public class GrafikController extends MouseAdapter implements MouseMotionListene public void mouseReleased(MouseEvent evt) { model.endShape(); - commandSend.execute(); -// if (evt.getButton() == MouseEvent.BUTTON3) -// { -// view.doPrint(); -// } + if(commandSend != null){ + commandSend.execute(); + } + } } diff --git a/src/ChatProgramm/controller/commands/CommandConnect.java b/src/ChatProgramm/controller/commands/CommandConnect.java index 7603372..f820ab4 100644 --- a/src/ChatProgramm/controller/commands/CommandConnect.java +++ b/src/ChatProgramm/controller/commands/CommandConnect.java @@ -6,9 +6,11 @@ package ChatProgramm.controller.commands; import ChatProgramm.model.Client; +import ChatProgramm.model.GrafikModel; import ChatProgramm.model.Server; import ChatProgramm.util.OhmLogger; import ChatProgramm.view.ChatView; +import ChatProgramm.view.GrafikView; import java.io.IOException; import java.util.logging.Logger; import javax.swing.JDialog; @@ -26,8 +28,10 @@ public class CommandConnect implements CommandInterface private static Logger lg = OhmLogger.getLogger(); private CommandSend commandSend; private ChatView view; + private GrafikModel model; + private GrafikView gView; - public CommandConnect(ChatView view, CommandInterface value) + public CommandConnect(ChatView view, CommandInterface value, GrafikModel model, GrafikView gView) { rBtnServer = view.getBtnServer(); rBtnClient = view.getBtnClient(); @@ -36,6 +40,8 @@ public class CommandConnect implements CommandInterface commandSend = (CommandSend) value; this.view = view; + this.model = model; + this.gView = gView; } @Override @@ -44,7 +50,8 @@ public class CommandConnect implements CommandInterface if(rBtnServer.isSelected()){ lg.info("Server ausgewählt"); try { - commandSend.transmitterInterface = new Server(view); + commandSend.setTransmitter(new Server(view, model, gView)); + //commandSend.transmitterInterface = new Server(view); } catch (IOException ex) { lg.info("Die Verbindung zum Server ist Fehlgeschlagen"); } @@ -53,7 +60,8 @@ public class CommandConnect implements CommandInterface if(rBtnClient.isSelected()){ lg.info("Client ausgewählt"); try { - commandSend.transmitterInterface = new Client(view); + commandSend.setTransmitter(new Client(view, model, gView)); + //commandSend.transmitterInterface = new Client(view); } catch (IOException ex) { lg.info("Die Verbindung zum Client ist Fehlgeschlagen"); diff --git a/src/ChatProgramm/model/Client.java b/src/ChatProgramm/model/Client.java index 4921a13..492557b 100644 --- a/src/ChatProgramm/model/Client.java +++ b/src/ChatProgramm/model/Client.java @@ -5,6 +5,7 @@ package ChatProgramm.model; import ChatProgramm.view.ChatView; +import ChatProgramm.view.GrafikView; import java.io.IOException; import java.net.Socket; import java.util.logging.*; @@ -21,8 +22,8 @@ public class Client extends Transmitter { private static final String IP = "127.0.0.1"; - public Client(ChatView view) throws IOException { - super(view); + public Client(ChatView view, GrafikModel model, GrafikView gView) throws IOException { + super(view, model, gView); connect(); initIO(); } diff --git a/src/ChatProgramm/model/GrafikModel.java b/src/ChatProgramm/model/GrafikModel.java index d5dedc7..7ef61e7 100644 --- a/src/ChatProgramm/model/GrafikModel.java +++ b/src/ChatProgramm/model/GrafikModel.java @@ -96,6 +96,10 @@ public class GrafikModel figuren.add(aktuelleFigur); aktuelleFigur = new Figur(); } + + public void addFigur(Figur figur){ + figuren.add(figur); + } /** * Bestimmt die Adresse des zuletzt besuchten Ordners diff --git a/src/ChatProgramm/model/ReceiveAdapter.java b/src/ChatProgramm/model/ReceiveAdapter.java index 03141a7..53066c2 100644 --- a/src/ChatProgramm/model/ReceiveAdapter.java +++ b/src/ChatProgramm/model/ReceiveAdapter.java @@ -4,21 +4,32 @@ */ package ChatProgramm.model; +import ChatProgramm.util.OhmLogger; import ChatProgramm.view.ChatView; +import ChatProgramm.view.GrafikView; import java.util.concurrent.Flow; import java.util.concurrent.Flow.Subscriber; +import java.util.logging.Logger; /** * * @author ahren */ public class ReceiveAdapter implements Subscriber { + + private static Logger lg = OhmLogger.getLogger(); private ChatView view; + private GrafikModel model; + private GrafikView gView; private Flow.Subscription subscription; - public ReceiveAdapter(ChatView view) { + public ReceiveAdapter(ChatView view, GrafikModel model, GrafikView gView) { this.view = view; + this.model = model; + this.gView = gView; + + } @Override @@ -27,9 +38,11 @@ public class ReceiveAdapter implements Subscriber { this.subscription.request(1); } - public void onNext(Nachricht item) { + public void onNext(Figur item) { - //ToDo: hier muss der gFrame aufgerufen werden + lg.info("Figur wurde dem Grafikmodel hinzugefügt"); + model.addFigur(item); + gView.drawPoint(); // evtl muss die Figur aber zuerst serialisiert werden //view.getTxtChat().append(item.getNachricht()); this.subscription.request(1); @@ -43,8 +56,4 @@ public class ReceiveAdapter implements Subscriber { public void onComplete(){ } - @Override - public void onNext(Figur item) - { - } } diff --git a/src/ChatProgramm/model/Server.java b/src/ChatProgramm/model/Server.java index 06a88ac..c769994 100644 --- a/src/ChatProgramm/model/Server.java +++ b/src/ChatProgramm/model/Server.java @@ -6,6 +6,7 @@ package ChatProgramm.model; import ChatProgramm.view.ChatView; +import ChatProgramm.view.GrafikView; import java.io.IOException; import java.net.ServerSocket; import java.util.logging.*; @@ -35,8 +36,8 @@ public class Server extends Transmitter lg.warning("Timeout"+"("+timeout/1000+"s)"); } } - public Server(ChatView view) throws IOException { - super(view); + public Server(ChatView view, GrafikModel model, GrafikView gView) throws IOException { + super(view, model, gView); connect(); initIO(); diff --git a/src/ChatProgramm/model/Transmitter.java b/src/ChatProgramm/model/Transmitter.java index 61da0bd..82fbf9a 100644 --- a/src/ChatProgramm/model/Transmitter.java +++ b/src/ChatProgramm/model/Transmitter.java @@ -5,6 +5,7 @@ package ChatProgramm.model; import ChatProgramm.view.ChatView; +import ChatProgramm.view.GrafikView; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; @@ -48,13 +49,14 @@ public abstract class Transmitter implements Runnable, Subscriber, Transm private ExecutorService eService; private String receivedString; private ChatView view; + private GrafikModel model; private ReceiveAdapter receiveAdapter; - public Transmitter(ChatView view) + public Transmitter(ChatView view, GrafikModel model, GrafikView gView) { socket = new Socket(); eService = null; - receiveAdapter = new ReceiveAdapter(view); + receiveAdapter = new ReceiveAdapter(view, model, gView); figurPublisher = new SubmissionPublisher<>(); this.view = view; addWertSubscription(receiveAdapter); @@ -74,11 +76,12 @@ public abstract class Transmitter implements Runnable, Subscriber, Transm InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); + // Bruh im ernst mann muss zuerst den writer und dann den reader initialisieren - // andersrum ist das blockierend weil die Streams von hinten nach vorne - // gelesen werden + // andersrum ist das blockiert weil die Streams von hinten nach vorne gelesen werden writer = new ObjectOutputStream(os); writer.flush(); + reader = new ObjectInputStream(is); lg.info("Reader / Writer Initialisierung abgeschlossen"); @@ -118,7 +121,8 @@ public abstract class Transmitter implements Runnable, Subscriber, Transm receivedObject = reader.readObject(); if (receivedObject instanceof Figur) { - Figur receivedFigur = (Figur) receivedObject; + lg.info("Figur erhalten"); + figur = (Figur) receivedObject; // Verarbeiten Sie die empfangene Figur } } catch (IOException ex) { @@ -126,22 +130,8 @@ public abstract class Transmitter implements Runnable, Subscriber, Transm } catch (ClassNotFoundException ex) { Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex); } - - try { - figur = (Figur) reader.readObject(); - if(!txtNachricht.isEmpty()){ - lg.info("Nachricht erhalten"); - - return figur; - } - } catch (IOException e) { - throw new RuntimeException(e); - } - catch (ClassNotFoundException ex) - { - Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex); - } + return figur; } diff --git a/src/ChatProgramm/view/GrafikView.java b/src/ChatProgramm/view/GrafikView.java index 969525c..3385e26 100644 --- a/src/ChatProgramm/view/GrafikView.java +++ b/src/ChatProgramm/view/GrafikView.java @@ -58,7 +58,7 @@ public class GrafikView extends JComponent implements Printable * Zeichnet den aktuellen Pfad (solange die maus gedrückt gehalten wird) * @param p -> Der aktuelle punkt als x-y-Koordinate */ - public void drawPoint(Point p) + public void drawPoint() { Graphics2D g2 = (Graphics2D)this.getGraphics(); // gefährlich!