zeichenflaeche.setModel(model); | zeichenflaeche.setModel(model); | ||||
GrafikController controller = new GrafikController(zeichenflaeche, model); | GrafikController controller = new GrafikController(zeichenflaeche, model); | ||||
controller.registerEvents(); | controller.registerEvents(); | ||||
CommandController controller_commands = new CommandController(view); | |||||
CommandController controller_commands = new CommandController(view, model, controller, zeichenflaeche); | |||||
controller_commands.registerEvents(); | controller_commands.registerEvents(); | ||||
controller_commands.registerCommands(); | controller_commands.registerCommands(); | ||||
view.setVisible(true); | view.setVisible(true); |
import ChatProgramm.controller.commands.CommandConnect; | import ChatProgramm.controller.commands.CommandConnect; | ||||
import ChatProgramm.controller.commands.CommandInvoker; | import ChatProgramm.controller.commands.CommandInvoker; | ||||
import ChatProgramm.controller.commands.CommandSend; | import ChatProgramm.controller.commands.CommandSend; | ||||
import ChatProgramm.model.GrafikModel; | |||||
import ChatProgramm.view.ChatView; | import ChatProgramm.view.ChatView; | ||||
import ChatProgramm.view.GrafikView; | |||||
import java.awt.Component; | import java.awt.Component; | ||||
import java.awt.event.ActionEvent; | import java.awt.event.ActionEvent; | ||||
import java.awt.event.ActionListener; | import java.awt.event.ActionListener; | ||||
public class CommandController implements ActionListener{ | public class CommandController implements ActionListener{ | ||||
private ChatView view; | private ChatView view; | ||||
private GrafikModel model; | |||||
private GrafikView gView; | |||||
private CommandInvoker invoker; | private CommandInvoker invoker; | ||||
private GrafikController controller; | |||||
public CommandController(ChatView view){ | |||||
public CommandController(ChatView view, GrafikModel model, GrafikController controller, GrafikView gView){ | |||||
this.view = view; | this.view = view; | ||||
this.model = model; | |||||
this.gView = gView; | |||||
this.invoker = new CommandInvoker(); | this.invoker = new CommandInvoker(); | ||||
this.controller = controller; | |||||
} | } | ||||
public void registerEvents(){ | public void registerEvents(){ | ||||
} | } | ||||
public void registerCommands(){ | public void registerCommands(){ | ||||
CommandSend commandSend = new CommandSend(view.getGvZeichenflaeche()); | |||||
invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, commandSend)); | |||||
//invoker.addCommand(view.getTfNachricht(), commandSend); | |||||
CommandSend commandSend = new CommandSend(view.getGvZeichenflaeche(), model); | |||||
invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, commandSend, model, gView)); | |||||
this.controller.setCommand(commandSend); | |||||
} | } | ||||
/** | /** | ||||
public void actionPerformed(ActionEvent e) { | public void actionPerformed(ActionEvent e) { | ||||
Component key = (Component)e.getSource(); | Component key = (Component)e.getSource(); | ||||
invoker.executeCommand(key); | invoker.executeCommand(key); | ||||
// if(key == view.getBtnOpen()|| key==view.getMiOpen()) | |||||
// invoker.deleteStack(); | |||||
// } | |||||
} | } | ||||
} | } | ||||
{ | { | ||||
this.view = view; | this.view = view; | ||||
this.model = model; | this.model = model; | ||||
commandSend = new CommandSend(view); | |||||
commandSend = null; | |||||
} | |||||
void setCommand(CommandSend command){ | |||||
this.commandSend = command; | |||||
} | } | ||||
public void registerEvents() | public void registerEvents() | ||||
{ | { | ||||
Point p = evt.getPoint(); | Point p = evt.getPoint(); | ||||
model.addPoint(p); | model.addPoint(p); | ||||
view.drawPoint(p); | |||||
view.drawPoint(); | |||||
} | } | ||||
@Override | @Override | ||||
public void mouseReleased(MouseEvent evt) | public void mouseReleased(MouseEvent evt) | ||||
{ | { | ||||
model.endShape(); | model.endShape(); | ||||
commandSend.execute(); | |||||
// if (evt.getButton() == MouseEvent.BUTTON3) | |||||
// { | |||||
// view.doPrint(); | |||||
// } | |||||
if(commandSend != null){ | |||||
commandSend.execute(); | |||||
} | |||||
} | } | ||||
} | } |
package ChatProgramm.controller.commands; | package ChatProgramm.controller.commands; | ||||
import ChatProgramm.model.Client; | import ChatProgramm.model.Client; | ||||
import ChatProgramm.model.GrafikModel; | |||||
import ChatProgramm.model.Server; | import ChatProgramm.model.Server; | ||||
import ChatProgramm.util.OhmLogger; | import ChatProgramm.util.OhmLogger; | ||||
import ChatProgramm.view.ChatView; | import ChatProgramm.view.ChatView; | ||||
import ChatProgramm.view.GrafikView; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.util.logging.Logger; | import java.util.logging.Logger; | ||||
import javax.swing.JDialog; | import javax.swing.JDialog; | ||||
*/ | */ | ||||
public class CommandConnect implements CommandInterface | public class CommandConnect implements CommandInterface | ||||
{ | { | ||||
private JRadioButton rBtnServer; | |||||
private JRadioButton rBtnClient; | |||||
private JDialog dialogFenster; | |||||
private static Logger lg = OhmLogger.getLogger(); | |||||
private CommandSend commandSend; | |||||
private ChatView view; | |||||
private JRadioButton rBtnServer; | |||||
private JRadioButton rBtnClient; | |||||
private JDialog dialogFenster; | |||||
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(); | |||||
dialogFenster = view.getjDialog1(); | |||||
rBtnServer = view.getBtnServer(); | |||||
rBtnClient = view.getBtnClient(); | |||||
dialogFenster = view.getjDialog1(); | |||||
commandSend = (CommandSend) value; | |||||
commandSend = (CommandSend) value; | |||||
this.view = view; | |||||
this.view = view; | |||||
this.model = model; | |||||
this.gView = gView; | |||||
} | } | ||||
@Override | @Override | ||||
public void execute() | public void execute() | ||||
{ | { |
package ChatProgramm.controller.commands; | package ChatProgramm.controller.commands; | ||||
import ChatProgramm.model.Client; | import ChatProgramm.model.Client; | ||||
import ChatProgramm.model.Figur; | |||||
import ChatProgramm.model.GrafikModel; | |||||
import ChatProgramm.model.Server; | import ChatProgramm.model.Server; | ||||
import ChatProgramm.model.TransmitterInterface; | import ChatProgramm.model.TransmitterInterface; | ||||
import ChatProgramm.util.OhmLogger; | import ChatProgramm.util.OhmLogger; | ||||
import ChatProgramm.view.ChatView; | import ChatProgramm.view.ChatView; | ||||
import java.util.logging.Logger; | import java.util.logging.Logger; | ||||
import javax.swing.JTextField; | import javax.swing.JTextField; | ||||
import ChatProgramm.model.Nachricht; | |||||
import ChatProgramm.view.GrafikView; | import ChatProgramm.view.GrafikView; | ||||
/** | /** | ||||
private JTextField eingabeFeld; | private JTextField eingabeFeld; | ||||
private String nachricht; | private String nachricht; | ||||
private GrafikView view; | private GrafikView view; | ||||
private GrafikModel model; | |||||
public TransmitterInterface transmitterInterface; | public TransmitterInterface transmitterInterface; | ||||
public Server server; | public Server server; | ||||
public Client client; | public Client client; | ||||
public CommandSend(GrafikView view) | |||||
public CommandSend(GrafikView view, GrafikModel model) | |||||
{ | { | ||||
this.view = view; | this.view = view; | ||||
this.model = model; | |||||
//ToDo: Hier muss auch der gFrame referenziert werden | //ToDo: Hier muss auch der gFrame referenziert werden | ||||
//this.eingabeFeld = view.getTfNachricht(); | //this.eingabeFeld = view.getTfNachricht(); | ||||
transmitterInterface = null; | transmitterInterface = null; | ||||
public void execute() | public void execute() | ||||
{ | { | ||||
lg.info("wir sind drin"); | lg.info("wir sind drin"); | ||||
Figur aktuelleFigur = model.getFiguren().getLast(); | |||||
if(transmitterInterface != null){ | |||||
transmitterInterface.send(aktuelleFigur); | |||||
} | |||||
else{ | |||||
lg.info("Der Transmitter ist immernoch null"); | |||||
} | |||||
//ToDo in dieser methode muss die Figur serialisiert werden und zum | //ToDo in dieser methode muss die Figur serialisiert werden und zum | ||||
//übermitteln bereitgestellt werden | //übermitteln bereitgestellt werden | ||||
public void undo() | public void undo() | ||||
{ | { | ||||
} | } | ||||
} | |||||
void setTransmitter(TransmitterInterface transmitter) { | |||||
lg.info("Transmitter wird gesetzt"); | |||||
if(transmitter != null){ | |||||
this.transmitterInterface = transmitter; | |||||
} | |||||
else{ | |||||
lg.info("der transmitter kommt hier als null an"); | |||||
} | |||||
} | |||||
} |
figuren.add(aktuelleFigur); | figuren.add(aktuelleFigur); | ||||
aktuelleFigur = new Figur(); | aktuelleFigur = new Figur(); | ||||
} | } | ||||
public void setFigur(Figur figur){ | |||||
aktuelleFigur = figur; | |||||
figuren.add(figur); | |||||
} | |||||
/** | /** | ||||
* Bestimmt die Adresse des zuletzt besuchten Ordners | * Bestimmt die Adresse des zuletzt besuchten Ordners |
*/ | */ | ||||
package ChatProgramm.model; | package ChatProgramm.model; | ||||
import ChatProgramm.util.OhmLogger; | |||||
import ChatProgramm.view.ChatView; | import ChatProgramm.view.ChatView; | ||||
import ChatProgramm.view.GrafikView; | |||||
import java.util.concurrent.Flow; | import java.util.concurrent.Flow; | ||||
import java.util.concurrent.Flow.Subscriber; | import java.util.concurrent.Flow.Subscriber; | ||||
import java.util.logging.Logger; | |||||
/** | /** | ||||
* | * | ||||
* @author ahren | * @author ahren | ||||
*/ | */ | ||||
public class ReceiveAdapter implements Subscriber<Figur> { | public class ReceiveAdapter implements Subscriber<Figur> { | ||||
private static Logger lg = OhmLogger.getLogger(); | |||||
private ChatView view; | private ChatView view; | ||||
private GrafikModel model; | |||||
private GrafikView gView; | |||||
private Flow.Subscription subscription; | private Flow.Subscription subscription; | ||||
public ReceiveAdapter(ChatView view) { | |||||
public ReceiveAdapter(ChatView view, GrafikModel model, GrafikView gView) { | |||||
this.view = view; | this.view = view; | ||||
this.model = model; | |||||
this.gView = gView; | |||||
} | } | ||||
@Override | @Override | ||||
this.subscription.request(1); | 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.setFigur(item); | |||||
gView.drawFigur(); | |||||
// evtl muss die Figur aber zuerst serialisiert werden | // evtl muss die Figur aber zuerst serialisiert werden | ||||
//view.getTxtChat().append(item.getNachricht()); | //view.getTxtChat().append(item.getNachricht()); | ||||
this.subscription.request(1); | this.subscription.request(1); | ||||
public void onComplete(){ | public void onComplete(){ | ||||
} | } | ||||
@Override | |||||
public void onNext(Figur item) | |||||
{ | |||||
} | |||||
} | |||||
} |
package ChatProgramm.model; | package ChatProgramm.model; | ||||
import ChatProgramm.view.ChatView; | import ChatProgramm.view.ChatView; | ||||
import ChatProgramm.view.GrafikView; | |||||
import java.io.BufferedInputStream; | import java.io.BufferedInputStream; | ||||
import java.io.BufferedOutputStream; | import java.io.BufferedOutputStream; | ||||
import java.io.BufferedReader; | import java.io.BufferedReader; | ||||
private ExecutorService eService; | private ExecutorService eService; | ||||
private String receivedString; | private String receivedString; | ||||
private ChatView view; | private ChatView view; | ||||
private GrafikView gView; | |||||
private GrafikModel model; | |||||
private ReceiveAdapter receiveAdapter; | private ReceiveAdapter receiveAdapter; | ||||
public Transmitter(ChatView view) | public Transmitter(ChatView view) | ||||
{ | { | ||||
socket = new Socket(); | socket = new Socket(); | ||||
eService = null; | eService = null; | ||||
receiveAdapter = new ReceiveAdapter(view); | |||||
receiveAdapter = new ReceiveAdapter(view, model, gView); | |||||
figurPublisher = new SubmissionPublisher<>(); | figurPublisher = new SubmissionPublisher<>(); | ||||
this.view = view; | this.view = view; | ||||
addWertSubscription(receiveAdapter); | addWertSubscription(receiveAdapter); | ||||
InputStream is = socket.getInputStream(); | InputStream is = socket.getInputStream(); | ||||
OutputStream os = socket.getOutputStream(); | OutputStream os = socket.getOutputStream(); | ||||
lg.info("1"); | |||||
BufferedOutputStream bos = new BufferedOutputStream(os); | |||||
BufferedInputStream bis = new BufferedInputStream(is); | |||||
lg.info("2"); | |||||
// InputStreamReader isr = new InputStreamReader(is, "UTF-8"); | |||||
// OutputStreamWriter osr = new OutputStreamWriter(os, "UTF-8"); | |||||
reader = new ObjectInputStream(bis); | |||||
writer = new ObjectOutputStream(bos); | |||||
writer = new ObjectOutputStream(os); | |||||
writer.flush(); | |||||
reader = new ObjectInputStream(is); | |||||
lg.info("Reader / Writer Initialisierung abgeschlossen"); | lg.info("Reader / Writer Initialisierung abgeschlossen"); | ||||
startempfangen(); | startempfangen(); | ||||
lg.info("Warte auf Nachricht"); | lg.info("Warte auf Nachricht"); | ||||
figurPublisher.submit(figur); | figurPublisher.submit(figur); | ||||
} | } | ||||
public Figur receive(){ | public Figur receive(){ | ||||
Object receivedObject; | |||||
try { | try { | ||||
figur = (Figur) reader.readObject(); | |||||
if(!txtNachricht.isEmpty()){ | |||||
lg.info("Nachricht erhalten"); | |||||
return figur; | |||||
receivedObject = reader.readObject(); | |||||
if(receivedObject instanceof Figur){ | |||||
lg.info("Figur erhalten"); | |||||
figur = (Figur) receivedObject; | |||||
} | } | ||||
} catch (IOException e) { | } catch (IOException e) { |
* Zeichnet den aktuellen Pfad (solange die maus gedrückt gehalten wird) | * Zeichnet den aktuellen Pfad (solange die maus gedrückt gehalten wird) | ||||
* @param p -> Der aktuelle punkt als x-y-Koordinate | * @param p -> Der aktuelle punkt als x-y-Koordinate | ||||
*/ | */ | ||||
public void drawPoint(Point p) | |||||
public void drawFigur() | |||||
{ | { | ||||
Graphics2D g2 = (Graphics2D)this.getGraphics(); // gefährlich! | Graphics2D g2 = (Graphics2D)this.getGraphics(); // gefährlich! | ||||
drawPath(model.getPunkte(),g2); | |||||
drawPath(model.getFiguren().getLast().getPunkte(),g2); | |||||
g2.dispose(); //SEEEEHHHHRRRR WICHTIG!!!!!!! | g2.dispose(); //SEEEEHHHHRRRR WICHTIG!!!!!!! | ||||
} | } | ||||
public void drawPoint() | |||||
{ | |||||
Graphics2D g2 = (Graphics2D)this.getGraphics(); // gefährlich! | |||||
drawPath(model.getPunkte(),g2); | |||||
g2.dispose(); //SEEEEHHHHRRRR WICHTIG!!!!!!! | |||||
} | |||||
/** | /** |