3 Commits
Author SHA1 Message Date
ahren 4ec7e6bc4c bzw jetzt ist auch der Transmitter kein Subscriber mehr, warum war
der das eh überhaupt?
2023-12-20 16:04:24 +01:00
ahren e8f0fd53d6 angepasst an Lehners UML,
Transmitterinterface raus, nur noch ein Controller und ein Chatmodel
mit GrafikDaten anstatt GrafikModel
das einzige was noch nicht so ist wie in seinem UML ist, dass das 
Chatmodel kein Subscriber ist sondern immernoch der Transmitter
2023-12-20 16:00:43 +01:00
ahren 7ae10ac02f whatever 2023-12-20 14:49:45 +01:00
19 changed files with 443 additions and 370 deletions
-18
View File
@@ -1067,15 +1067,6 @@ is divided into following sections:
<propertyfile file="${built-jar.properties}"> <propertyfile file="${built-jar.properties}">
<entry key="${basedir}" value=""/> <entry key="${basedir}" value=""/>
</propertyfile> </propertyfile>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-jar.properties}"/>
<param location="${project.Aufgabe9_mvcGrafik}" name="call.subproject"/>
<param location="${project.Aufgabe9_mvcGrafik}/build.xml" name="call.script"/>
<param name="call.target" value="jar"/>
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
<param name="transfer.not.archive.disabled" value="true"/>
<param name="transfer.do.jlink" value="false"/>
</antcall>
</target> </target>
<target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/> <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
<target depends="init" name="-check-automatic-build"> <target depends="init" name="-check-automatic-build">
@@ -1747,15 +1738,6 @@ is divided into following sections:
<propertyfile file="${built-clean.properties}"> <propertyfile file="${built-clean.properties}">
<entry key="${basedir}" value=""/> <entry key="${basedir}" value=""/>
</propertyfile> </propertyfile>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-clean.properties}"/>
<param location="${project.Aufgabe9_mvcGrafik}" name="call.subproject"/>
<param location="${project.Aufgabe9_mvcGrafik}/build.xml" name="call.script"/>
<param name="call.target" value="clean"/>
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
<param name="transfer.not.archive.disabled" value="true"/>
<param name="transfer.do.jlink" value="false"/>
</antcall>
</target> </target>
<target depends="init" name="-do-clean"> <target depends="init" name="-do-clean">
<delete dir="${build.dir}"/> <delete dir="${build.dir}"/>
+3 -3
View File
@@ -1,8 +1,8 @@
build.xml.data.CRC32=d624b1fd build.xml.data.CRC32=126b3ece
build.xml.script.CRC32=1a88b66a build.xml.script.CRC32=1a88b66a
build.xml.stylesheet.CRC32=f85dc8f2@1.108.0.48 build.xml.stylesheet.CRC32=f85dc8f2@1.108.0.48
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=d624b1fd nbproject/build-impl.xml.data.CRC32=126b3ece
nbproject/build-impl.xml.script.CRC32=476a1ac9 nbproject/build-impl.xml.script.CRC32=fdc076e6
nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.108.0.48 nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.108.0.48
+1 -4
View File
@@ -37,8 +37,7 @@ endorsed.classpath=
excludes= excludes=
includes=** includes=**
jar.compress=false jar.compress=false
javac.classpath=\ javac.classpath=
${reference.Aufgabe9_mvcGrafik.jar}
# Space-separated list of extra javac options # Space-separated list of extra javac options
javac.compilerargs= javac.compilerargs=
javac.deprecation=false javac.deprecation=false
@@ -79,8 +78,6 @@ manifest.file=manifest.mf
meta.inf.dir=${src.dir}/META-INF meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false mkdist.disabled=false
platform.active=default_platform platform.active=default_platform
project.Aufgabe9_mvcGrafik=../../T9_mvcGrafik/Aufgabe9_mvcGrafik
reference.Aufgabe9_mvcGrafik.jar=${project.Aufgabe9_mvcGrafik}/dist/Aufgabe9_mvcGrafik.jar
run.classpath=\ run.classpath=\
${javac.classpath}:\ ${javac.classpath}:\
${build.classes.dir} ${build.classes.dir}
+1 -10
View File
@@ -11,15 +11,6 @@
<root id="test.src.dir"/> <root id="test.src.dir"/>
</test-roots> </test-roots>
</data> </data>
<references xmlns="http://www.netbeans.org/ns/ant-project-references/1"> <references xmlns="http://www.netbeans.org/ns/ant-project-references/1"/>
<reference>
<foreign-project>Aufgabe9_mvcGrafik</foreign-project>
<artifact-type>jar</artifact-type>
<script>build.xml</script>
<target>jar</target>
<clean-target>clean</clean-target>
<id>jar</id>
</reference>
</references>
</configuration> </configuration>
</project> </project>
+6 -25
View File
@@ -5,14 +5,9 @@
package ChatProgramm; package ChatProgramm;
import ChatProgramm.controller.GrafikController; import ChatProgramm.controller.CommandController;
import ChatProgramm.controller.commands.CommandConnectV2;
import ChatProgramm.controller.commands.CommandSendV2;
import ChatProgramm.model.ChatModel; import ChatProgramm.model.ChatModel;
import ChatProgramm.model.GrafikDaten;
import ChatProgramm.controller.ReceiveAdapter;
import ChatProgramm.view.ChatView; import ChatProgramm.view.ChatView;
import ChatProgramm.view.GrafikView;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.UIManager; import javax.swing.UIManager;
@@ -24,26 +19,12 @@ public class Start
{ {
public Start() public Start()
{ {
GrafikDaten gDaten = new GrafikDaten();
ChatView view = new ChatView(); ChatView view = new ChatView();
GrafikView zeichenflaeche = view.getGvZeichenflaeche(); ChatModel model = new ChatModel(view);
zeichenflaeche.setModel(gDaten); view.getGvZeichenflaeche().setModel(model.getGrafikDaten());
CommandController controller_commands = new CommandController(view, model);
ChatModel model = new ChatModel(gDaten); controller_commands.registerEvents();
controller_commands.registerCommands();
GrafikController gContoller = new GrafikController(view,model);
gContoller.registerEvents();
CommandConnectV2 cConnect = new CommandConnectV2(view,model);
cConnect.registerEvents();
CommandSendV2 cSend = new CommandSendV2(view, model);
cSend.registerEvents();
ReceiveAdapter rAdapter = new ReceiveAdapter(view, model);
model.addSubscription(rAdapter);
view.setVisible(true); view.setVisible(true);
} }
@@ -0,0 +1,77 @@
/*
* 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 ChatProgramm.controller.commands.CommandConnect;
import ChatProgramm.controller.commands.CommandInvoker;
import ChatProgramm.controller.commands.CommandSend;
import ChatProgramm.model.ChatModel;
import ChatProgramm.view.ChatView;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import static java.awt.event.MouseEvent.MOUSE_RELEASED;
import java.awt.event.MouseMotionListener;
/**
*
* @author ahren
*/
public class CommandController extends MouseAdapter implements MouseMotionListener, ActionListener{
private ChatView view;
private ChatModel model;
private CommandInvoker invoker;
public CommandController(ChatView view, ChatModel model){
this.view = view;
this.model = model;
this.invoker = new CommandInvoker();
}
public void registerEvents(){
view.getBtnConnect().addActionListener(this);
view.addMouseMotionListener(this);
view.addMouseListener(this);
}
public void registerCommands(){
invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, model));
invoker.addCommand(view.getGvZeichenflaeche(), new CommandSend(view, model));
}
/**
* Ausführen des jeweiligen Kommandos
* @param e Referenz auf das Event
*/
@Override
public void actionPerformed(ActionEvent e) {
Component key = (Component)e.getSource();
invoker.executeCommand(key);
}
@Override
public void mouseDragged(MouseEvent evt)
{
Point p = evt.getPoint();
model.getGrafikDaten().addPoint(p);
view.getGvZeichenflaeche().drawPoint();
}
@Override
public void mouseReleased(MouseEvent evt)
{
model.getGrafikDaten().endShape();
invoker.executeCommand(view.getGvZeichenflaeche());
}
}
@@ -1,57 +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 ChatProgramm.model.ChatModel;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.logging.Logger;
/**
*
* @author le
*/
public class GrafikController extends MouseAdapter implements MouseMotionListener
{
private static Logger lg = OhmLogger.getLogger();
private ChatView view;
private ChatModel model;
public GrafikController(ChatView view, ChatModel model)
{
this.view = view;
this.model = model;
}
public void registerEvents()
{
view.getGvZeichenflaeche().addMouseMotionListener(this);
view.getGvZeichenflaeche().addMouseListener(this);
}
@Override
public void mouseDragged(MouseEvent evt)
{
Point p = evt.getPoint();
model.getGrafikDaten().addPoint(p);
view.getGvZeichenflaeche().drawPoint();
}
@Override
public void mouseReleased(MouseEvent evt)
{
model.getGrafikDaten().endShape();
}
}
@@ -0,0 +1,77 @@
/*
* 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.commands;
import ChatProgramm.model.ChatModel;
import ChatProgramm.model.Client;
import ChatProgramm.model.GrafikDaten;
import ChatProgramm.model.Server;
import ChatProgramm.model.Transmitter;
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;
import javax.swing.JRadioButton;
/**
*
* @author ahren
*/
public class CommandConnect implements CommandInterface
{
private JRadioButton rBtnServer;
private JRadioButton rBtnClient;
private JDialog dialogFenster;
private static Logger lg = OhmLogger.getLogger();
private ChatView view;
private ChatModel model;
public CommandConnect(ChatView view, ChatModel model)
{
rBtnServer = view.getBtnServer();
rBtnClient = view.getBtnClient();
dialogFenster = view.getjDialog1();
this.view = view;
this.model = model;
}
@Override
public void execute()
{
if(rBtnServer.isSelected()){
lg.info("Server ausgewählt");
try {
model.setTransmitterToServer();
} catch (IOException ex) {
lg.info("Die Verbindung zum Server ist Fehlgeschlagen");
}
}
if(rBtnClient.isSelected()){
lg.info("Client ausgewählt");
try {
model.setTransmitterToClient();
} catch (IOException ex) {
lg.info("Die Verbindung zum Client ist Fehlgeschlagen");
}
}
dialogFenster.setVisible(false);
}
@Override
public boolean isUndoable()
{
return false;
}
@Override
public void undo()
{
}
}
@@ -1,61 +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.commands;
import ChatProgramm.model.ChatModel;
import ChatProgramm.model.Client;
import ChatProgramm.model.Server;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.logging.Logger;
/**
*
* @author Js-Sc
*/
public class CommandConnectV2 implements ActionListener {
private static Logger lg = OhmLogger.getLogger();
private ChatView view;
private ChatModel model;
public CommandConnectV2(ChatView view, ChatModel model) {
this.view = view;
this.model = model;
}
public void registerEvents() {
view.getBtnConnect().addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (view.getBtnServer().isSelected()) {
lg.info("Server ausgewählt");
try {
model.setTransmitter(new Server(view, model));
} catch (IOException ex) {
lg.info("Die Verbindung zum Server ist Fehlgeschlagen");
}
}
if (view.getBtnClient().isSelected()) {
lg.info("Client ausgewählt");
try {
model.setTransmitter(new Client(view, model));
} catch (IOException ex) {
lg.info("Die Verbindung zum Client ist Fehlgeschlagen");
}
}
view.getjDialog1().setVisible(false);
}
}
@@ -0,0 +1,17 @@
/*
* 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.commands;
/**
*
* @author ahren
*/
public interface CommandInterface
{
public void execute();
public void undo();
public boolean isUndoable();
}
@@ -0,0 +1,69 @@
/*
* 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.commands;
import java.awt.Component;
import java.util.HashMap;
import java.util.Stack;
/**
*
* @author ahren
*/
public class CommandInvoker {
private HashMap<Component, CommandInterface> commands;
private Stack <CommandInterface> undoStack;
public CommandInvoker(){
commands = new HashMap<>();
undoStack = new Stack();
}
/**
* Fügt ein Kommando zur Kommando-"Datenbank" = HashMap hinzu
* @param key Quelle des Events
* @param value Referenz auf das zugehörige Kommando-Objekt
*/
public void addCommand(Component key, CommandInterface value){
commands.put(key, value);
}
/**
* Führt Kommando der Eventquelle "key" aus und legt die Referenz
* des Kommando in den Undo-Stack
* @param key Referenz auf die Eventquelle
*/
public void executeCommand(Component key){
CommandInterface command = commands.get(key);
command.execute();
if (command.isUndoable())
{
undoStack.push(command);
}
}
/**
* Falls der Stack Elemente enthält, wird das oberste Element geholt
* und die Methode "undo" des Commands aufgerufen
*/
public void undoCommand()
{
if (!undoStack.isEmpty())
{
undoStack.pop().undo();
}
}
/**
* Löscht bei Öffnen einer neuen Datei den Stack
*/
public void deleteStack()
{
while(!undoStack.isEmpty())
undoStack.pop();
}
}
@@ -0,0 +1,55 @@
/*
* 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.commands;
import ChatProgramm.model.ChatModel;
import ChatProgramm.model.Figur;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import java.util.logging.Logger;
/**
*
* @author ahren
*/
public class CommandSend implements CommandInterface
{
private static Logger lg = OhmLogger.getLogger();
private ChatView view;
private ChatModel model;
public CommandSend(ChatView view, ChatModel model)
{
this.view = view;
this.model = model;
}
@Override
public void execute()
{
Figur aktuelleFigur = model.getGrafikDaten().getFiguren().getLast();
try
{
model.getTransmitter().send(aktuelleFigur);
}
catch(Exception NullPointerExeption)
{
lg.info("Der Transmitter ist null");
}
}
@Override
public boolean isUndoable()
{
return false;
}
@Override
public void undo()
{
}
}
@@ -1,39 +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.commands;
import ChatProgramm.model.ChatModel;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.logging.Logger;
/**
*
* @author Js-Sc
*/
public class CommandSendV2 extends MouseAdapter implements MouseMotionListener {
private static Logger lg = OhmLogger.getLogger();
private ChatView view;
private ChatModel model;
public CommandSendV2(ChatView view, ChatModel model) {
this.view = view;
this.model = model;
}
public void registerEvents() {
view.getGvZeichenflaeche().addMouseListener(this);
}
@Override
public void mouseReleased(MouseEvent e) {
model.sendFigur();
}
}
+31 -61
View File
@@ -2,78 +2,48 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * 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 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/ */
package ChatProgramm.model; package ChatProgramm.model;
import ChatProgramm.util.OhmLogger; import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import java.util.concurrent.Flow; import java.io.IOException;
import java.util.concurrent.Flow.Subscriber;
import java.util.concurrent.SubmissionPublisher;
import java.util.logging.Logger; import java.util.logging.Logger;
/** /**
* @author Js-Sc *
* @author ahren
*/ */
public class ChatModel implements Subscriber<Figur> { public class ChatModel
{
private static Logger lg = OhmLogger.getLogger(); private Transmitter transmitter;
private SubmissionPublisher<Figur> figurPublisher; private static Logger lg = OhmLogger.getLogger();
private Flow.Subscription subscription; private GrafikDaten grafikdaten = new GrafikDaten();
private ChatView view;
private Transmitter transmitter; public ChatModel(ChatView view)
private GrafikDaten grafikDaten; {
this.view = view;
}
public GrafikDaten getGrafikDaten()
{
return grafikdaten;
}
public void setTransmitterToClient() throws IOException
{
transmitter = new Client(view, this);
}
public ChatModel(GrafikDaten gDaten) { public void setTransmitterToServer()throws IOException
this.grafikDaten = gDaten; {
this.transmitter = null; transmitter = new Server(view, this);
}
this.figurPublisher = new SubmissionPublisher<>();
}
public void setTransmitter(Transmitter transmitter) {
this.transmitter = transmitter;
this.transmitter.addSubscription(this);
}
public void addSubscription(Subscriber<Figur> subscriber) {
figurPublisher.subscribe(subscriber);
}
@Override
public void onSubscribe(Flow.Subscription subscription) {
this.subscription = subscription;
this.subscription.request(1);
}
@Override
public void onNext(Figur item) {
grafikDaten.addFigure(item);
lg.info("Figur wurde dem Grafikmodel hinzugefügt");
figurPublisher.submit(item);
this.subscription.request(1);
}
@Override
public void onError(Throwable throwable) {
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}
@Override
public void onComplete() {
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}
public GrafikDaten getGrafikDaten() {
return grafikDaten;
}
public void sendFigur() {
lg.info("Sende aktuelle Figur");
transmitter.send(grafikDaten.getFiguren().getLast());
}
public Transmitter getTransmitter()
{
return transmitter;
}
} }
+2 -2
View File
@@ -6,10 +6,10 @@ package ChatProgramm.model;
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.net.Socket; import java.net.Socket;
import java.util.logging.Logger; import java.util.logging.*;
/** /**
* Builder Class * Builder Class
+10 -3
View File
@@ -4,14 +4,21 @@
*/ */
package ChatProgramm.model; package ChatProgramm.model;
import ChatProgramm.util.OhmLogger; import java.awt.Point;
import java.io.BufferedInputStream;
import java.awt.*; import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.prefs.Preferences; import java.util.prefs.Preferences;
import ChatProgramm.util.OhmLogger;
/** /**
* *
@@ -2,10 +2,8 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * 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 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/ */
package ChatProgramm.controller; package ChatProgramm.model;
import ChatProgramm.model.ChatModel;
import ChatProgramm.model.Figur;
import ChatProgramm.util.OhmLogger; import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView; import ChatProgramm.view.ChatView;
import ChatProgramm.view.GrafikView; import ChatProgramm.view.GrafikView;
@@ -23,7 +21,6 @@ public class ReceiveAdapter implements Subscriber<Figur> {
private ChatView view; private ChatView view;
private ChatModel model; private ChatModel model;
private Flow.Subscription subscription; private Flow.Subscription subscription;
public ReceiveAdapter(ChatView view, ChatModel model) { public ReceiveAdapter(ChatView view, ChatModel model) {
@@ -38,8 +35,9 @@ public class ReceiveAdapter implements Subscriber<Figur> {
} }
public void onNext(Figur item) { public void onNext(Figur item) {
model.getGrafikDaten().addFigure(item);
view.getGvZeichenflaeche().drawFigur(); view.getGvZeichenflaeche().drawFigur();
lg.info("Figur auf die Zeichenfläche projiziert"); lg.info("Figur wurde dem Grafikmodel hinzugefügt");
this.subscription.request(1); this.subscription.request(1);
} }
+2 -2
View File
@@ -7,10 +7,10 @@ package ChatProgramm.model;
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.net.ServerSocket; import java.net.ServerSocket;
import java.util.logging.Logger; import java.util.logging.*;
/** /**
* Builder Class * Builder Class
+78 -69
View File
@@ -4,20 +4,24 @@
*/ */
package ChatProgramm.model; package ChatProgramm.model;
import ChatProgramm.controller.ReceiveAdapter;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView; import ChatProgramm.view.ChatView;
import java.io.IOException;
import java.io.*; import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.Socket; import java.net.Socket;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.Flow;
import java.util.concurrent.Flow.Subscriber; import java.util.concurrent.Flow.Subscriber;
import java.util.concurrent.SubmissionPublisher; import java.util.concurrent.SubmissionPublisher;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
/** /**
*
* @author ahren * @author ahren
*/ */
public abstract class Transmitter implements Runnable { public abstract class Transmitter implements Runnable {
@@ -25,112 +29,117 @@ public abstract class Transmitter implements Runnable {
static final int timeout = 60000; static final int timeout = 60000;
private static final int PORT = 35000; private static final int PORT = 35000;
private static Logger lg = OhmLogger.getLogger(); private static Logger lg = Logger.getLogger("netz");
protected Socket socket; protected Socket socket;
protected ObjectInputStream reader; protected ObjectInputStream reader;
protected ObjectOutputStream writer; protected ObjectOutputStream writer;
private Figur figur;
private SubmissionPublisher<Figur> figurPublisher; private SubmissionPublisher<Figur> figurPublisher;
private ExecutorService eService; private ExecutorService eService;
private String receivedString;
private ChatView view; private ChatView view;
private ChatModel model; private ChatModel model;
private ReceiveAdapter receiveAdapter; private ReceiveAdapter receiveAdapter;
public Transmitter(ChatView view, ChatModel model) { public Transmitter(ChatView view, ChatModel model)
socket = new Socket(); {
eService = null; socket = new Socket();
eService = null;
figurPublisher = new SubmissionPublisher<>(); receiveAdapter = new ReceiveAdapter(view, model);
figurPublisher = new SubmissionPublisher<>();
this.view = view; this.view = view;
this.model = model; addWertSubscription(receiveAdapter);
figur = new Figur();
} }
public void addSubscription(Subscriber<Figur> subscriber) { public void addWertSubscription(Subscriber<Figur> subscriber)
figurPublisher.subscribe(subscriber); {
figurPublisher.subscribe(subscriber);
} }
public abstract void connect() throws IOException; public abstract void connect() throws IOException;
public void initIO() { public void initIO() {
try { try {
lg.info("Initialisiere reader und writer"); lg.info("Initialisiere reader und writer");
InputStream is = socket.getInputStream(); InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream(); OutputStream os = socket.getOutputStream();
writer = new ObjectOutputStream(os); writer = new ObjectOutputStream(os);
writer.flush(); writer.flush();
reader = new ObjectInputStream(is); reader = new ObjectInputStream(is);
lg.info("Reader / Writer Initialisierung abgeschlossen"); lg.info("Reader / Writer Initialisierung abgeschlossen");
startempfangen(); startempfangen();
} catch (IOException ex) { } catch (UnsupportedEncodingException ex) {
Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex);
} } catch (IOException ex) {
Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex);
}
} }
/** /**
* @param figur *
* @throws IOException * @param figur
*/ * @throws IOException
public void send(Figur figur) { */
try { public void send(Figur figur){
writer.writeObject(figur); try
writer.flush(); {
} catch (IOException ex) { writer.writeObject(figur);
Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex); writer.flush();
} }
catch (IOException ex)
{
Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex);
}
lg.info("Nachricht gesendet"); lg.info("Nachricht gesendet");
figurPublisher.submit(figur); figurPublisher.submit(figur);
} }
public Figur receive(){
public Figur receive() {
Object receivedObject; Object receivedObject;
Figur figur = new Figur();
try { try {
receivedObject = reader.readObject(); receivedObject = reader.readObject();
if (receivedObject instanceof Figur) { if (receivedObject instanceof Figur) {
lg.info("Figur erhalten"); lg.info("Figur erhalten");
figur = (Figur) receivedObject; figur = (Figur) receivedObject;
} }
} catch (IOException | ClassNotFoundException ex) { } catch (IOException ex) {
lg.info(ex.getMessage()); Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex);
} }
return figur;
return figur;
} }
@Override @Override
public void run() { public void run() {
while (true) { while (true) {
Figur figur = new Figur(); lg.info("Warte auf Nachricht");
lg.info("Warte auf Nachricht"); figur = receive();
figur = receive(); if(!figur.getPunkte().isEmpty()){
if (!figur.getPunkte().isEmpty()) { figurPublisher.submit(figur);
figurPublisher.submit(figur); }
} }
}
} }
private void startempfangen()
private void startempfangen() { {
synchronized (this) { synchronized (this){
}
if (eService == null) {
eService = Executors.newSingleThreadExecutor();
eService.execute(this);
}
lg.info("Starte Chat");
} }
if (eService == null){
eService = Executors.newSingleThreadExecutor();
eService.execute(this);
}
lg.info("Starte Chat");
}
} }