From eddd07057b2de01b10bcb4d0cccadd8f08c927bd Mon Sep 17 00:00:00 2001 From: Apollo Date: Wed, 29 May 2019 09:32:48 +0200 Subject: [PATCH] Fertig --- src/chatprogramm/Start.java | 68 +++++++++++ src/controller/ConnectController.java | 19 +++ src/controller/ReceiveAdapter.java | 29 +++++ src/controller/SendController.java | 42 +++++++ src/logger/OhmLogger.java | 57 +++++++++ src/logger/myformatter/MyFormatter.java | 35 ++++++ src/model/Transmitter.java | 131 +++++++++++++++++++++ src/netz/Client.java | 76 ++++++++++++ src/netz/Server.java | 76 ++++++++++++ src/netz/Start.java | 71 +++++++++++ src/view/ChatView.form | 83 +++++++++++++ src/view/ChatView.java | 149 ++++++++++++++++++++++++ 12 files changed, 836 insertions(+) create mode 100644 src/chatprogramm/Start.java create mode 100644 src/controller/ConnectController.java create mode 100644 src/controller/ReceiveAdapter.java create mode 100644 src/controller/SendController.java create mode 100644 src/logger/OhmLogger.java create mode 100644 src/logger/myformatter/MyFormatter.java create mode 100644 src/model/Transmitter.java create mode 100755 src/netz/Client.java create mode 100755 src/netz/Server.java create mode 100755 src/netz/Start.java create mode 100644 src/view/ChatView.form create mode 100644 src/view/ChatView.java diff --git a/src/chatprogramm/Start.java b/src/chatprogramm/Start.java new file mode 100644 index 0000000..5db7d41 --- /dev/null +++ b/src/chatprogramm/Start.java @@ -0,0 +1,68 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package chatprogramm; + +import controller.ConnectController; +import controller.ReceiveAdapter; +import controller.SendController; +import javax.swing.JOptionPane; +import javax.swing.UIManager; +import model.Transmitter; +import view.ChatView; + +/** + * + * @author Apollo + */ +public class Start +{ + public Start() + { + //Auswahl für Server oder Client + String[] options = {"Server","Client"}; + int entscheidung = JOptionPane.showOptionDialog(null, "Server oder Client Modus?","Auswahl des Operationmoduses",JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[0]); + if(entscheidung > 1) + { + JOptionPane.showMessageDialog(null, "Unbekannter Fehler"); + System.exit(0); + } + // + + ChatView view = new ChatView(); + Transmitter model = new Transmitter(entscheidung); + ConnectController conncontroller = new ConnectController(); + + SendController sendcontroller = new SendController(view); + sendcontroller.registerEvents(); + + ReceiveAdapter adapter = new ReceiveAdapter(model); + + view.setVisible(true); + + model.run(); + + } + /** + * @param args the command line arguments + */ + public static void main(String[] args) + { + try + { + for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + UIManager.setLookAndFeel(info.getClassName()); + } + } + } + catch(Exception ex) + { + JOptionPane.showMessageDialog(null, "Fehler beim Aufrufen der Syseinstellungen"); + } + new Start(); + } +} diff --git a/src/controller/ConnectController.java b/src/controller/ConnectController.java new file mode 100644 index 0000000..ae12bc3 --- /dev/null +++ b/src/controller/ConnectController.java @@ -0,0 +1,19 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package controller; + +/** + * + * @author Apollo + */ +public class ConnectController +{ + public ConnectController() + { + + } +} diff --git a/src/controller/ReceiveAdapter.java b/src/controller/ReceiveAdapter.java new file mode 100644 index 0000000..b1cc207 --- /dev/null +++ b/src/controller/ReceiveAdapter.java @@ -0,0 +1,29 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package controller; + +import java.util.Observable; +import java.util.Observer; +import model.Transmitter; + +/** + * + * @author Apollo + */ +public class ReceiveAdapter implements Observer +{ + public ReceiveAdapter(Transmitter model) + { + + } + + @Override + public void update(Observable arg0, Object arg1) + { + + } +} diff --git a/src/controller/SendController.java b/src/controller/SendController.java new file mode 100644 index 0000000..c91328c --- /dev/null +++ b/src/controller/SendController.java @@ -0,0 +1,42 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package controller; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import view.ChatView; + +/** + * + * @author Apollo + */ +public class SendController implements ActionListener +{ + ChatView view; + String input; + + public SendController(ChatView view) + { + this.view = view; + } + + public void registerEvents() + { + view.getInputField().addActionListener(this); + } + + + @Override + public void actionPerformed(ActionEvent arg0) + { + input = view.getInputField().getText(); + + view.getChatanzeige().setText(input.toString()); + } + + +} diff --git a/src/logger/OhmLogger.java b/src/logger/OhmLogger.java new file mode 100644 index 0000000..0794888 --- /dev/null +++ b/src/logger/OhmLogger.java @@ -0,0 +1,57 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package logger; + +import java.io.File; +import java.io.IOException; +import java.util.logging.ConsoleHandler; +import java.util.logging.FileHandler; +import java.util.logging.Level; +import java.util.logging.Logger; +import logger.myformatter.MyFormatter; + +/** + * + * @author nobody + */ +public class OhmLogger +{ + private static Logger lg = null; + + public static Logger getLogger() + { + if (lg == null) + { + lg = Logger.getLogger("OhmLogger"); + initLogger(); + } + return lg; + } + + private static void initLogger() + { + try + { + String datei = System.getProperty("java.io.tmpdir") + File.separator + "log.txt"; + FileHandler fh = new FileHandler(datei); + ConsoleHandler ch = new ConsoleHandler(); + lg.setUseParentHandlers(false); + lg.addHandler(fh); + ch.setFormatter(new MyFormatter()); + lg.addHandler(ch); + lg.setLevel(Level.ALL); + } + catch (IOException ioex) + { + System.err.println(ioex); + } + } + + public OhmLogger() + { + + } +} \ No newline at end of file diff --git a/src/logger/myformatter/MyFormatter.java b/src/logger/myformatter/MyFormatter.java new file mode 100644 index 0000000..ba0db8d --- /dev/null +++ b/src/logger/myformatter/MyFormatter.java @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package logger.myformatter; + +import java.util.Date; +import java.util.logging.LogRecord; +import java.util.logging.SimpleFormatter; + +/** + * + * @author nobody + */ +public class MyFormatter extends SimpleFormatter +{ + private String message; + private final Date dat = new Date(); + + @Override + public String format(LogRecord record) + { + dat.setTime(record.getMillis()); + message = "| " + dat + " | " + record.getLevel() + " | " + + record.getSourceClassName() + " | " + record.getMessage() + " |\n"; + + return message; + } + public MyFormatter() + { + + } +} \ No newline at end of file diff --git a/src/model/Transmitter.java b/src/model/Transmitter.java new file mode 100644 index 0000000..ad513cb --- /dev/null +++ b/src/model/Transmitter.java @@ -0,0 +1,131 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package 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.Observable; +import java.util.logging.Level; +import java.util.logging.Logger; +import logger.OhmLogger; + +/** + * + * @author Apollo + */ +public class Transmitter extends Observable implements Runnable +{ + private static final Logger lg = OhmLogger.getLogger(); + private static final int PORT = 35000; + private static final String IP_ADRESSE = "127.0.0.1"; + + int modus; + public Transmitter(int modus) + { + + } + + @Override + public void run() + { + if(modus == 0) + { + try + { + server(); + } + catch (IOException ex) + { + Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex); + } + } + else if(modus == 1) + { + try + { + client(); + } + catch (IOException ex) + { + Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + + public void client() throws IOException + { + lg.info("Client: verbinde ..."); + Socket s = new Socket(IP_ADRESSE, PORT); // Achtung: blockiert! + lg.info("Client: Verbindung hergestellt"); + InputStream iStream = s.getInputStream(); + OutputStream oStream = s.getOutputStream(); + + InputStreamReader isr = new InputStreamReader(iStream, "UTF-8"); + OutputStreamWriter osr = new OutputStreamWriter(oStream, "UTF-8"); + + BufferedReader in = new BufferedReader(isr); + //BufferedWriter out = new BufferedWriter(osr); + PrintWriter out = new PrintWriter(osr); + + lg.info("Client: Stream initialisiert"); + + out.println("Hallo Du Server Du - ich bin der client"); + out.flush(); // wirklich absenden!! + + lg.info("Client: Nachricht versendet"); + + String quittung = in.readLine(); // Achtung blockiert + lg.info("Client: Quittung empfangen"); + + System.out.println("Client: Quittung EMPFANGEN - " + quittung); + + + + out.close(); + in.close(); + } + + public void server() throws IOException + { + ServerSocket sSocket = new ServerSocket(PORT); + lg.info("Server: Warte auf Verbindung ..."); + Socket s = sSocket.accept(); // Achtung: blockiert! + lg.info("Server: Verbindung akzeptiert"); + InputStream iStream = s.getInputStream(); + OutputStream oStream = s.getOutputStream(); + + InputStreamReader isr = new InputStreamReader(iStream, "UTF-8"); + OutputStreamWriter osr = new OutputStreamWriter(oStream, "UTF-8"); + + BufferedReader in = new BufferedReader(isr); + //BufferedWriter out = new BufferedWriter(osr); + PrintWriter out = new PrintWriter(osr); + + lg.info("Server: Stream initialisiert"); + lg.info("Server: warte auf Nachricht ..."); + + String nachricht = in.readLine(); // Achtung blockiert + lg.info("Server: Nachricht empfangen"); + + System.out.println("Server: NACHRICHT EMPFANGEN - " + nachricht); + + out.println("Server -> ich habe die Nachricht erhalten"); + lg.info("Server: Quittung versendet"); + + out.flush(); // wirklich absenden!! + + out.close(); + in.close(); + } +} diff --git a/src/netz/Client.java b/src/netz/Client.java new file mode 100755 index 0000000..13f3287 --- /dev/null +++ b/src/netz/Client.java @@ -0,0 +1,76 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package netz; + +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.Socket; +import java.util.logging.Logger; + +/** + * Builder Class + * @author le + */ +public class Client +{ + private static final Logger lg = Logger.getLogger("netz"); + private static final int PORT = 35000; + private static final String IP_ADRESSE = "127.0.0.1"; + + public Client() throws IOException + { + lg.info("Client: verbinde ..."); + Socket s = new Socket(IP_ADRESSE, PORT); // Achtung: blockiert! + lg.info("Client: Verbindung hergestellt"); + InputStream iStream = s.getInputStream(); + OutputStream oStream = s.getOutputStream(); + + InputStreamReader isr = new InputStreamReader(iStream, "UTF-8"); + OutputStreamWriter osr = new OutputStreamWriter(oStream, "UTF-8"); + + BufferedReader in = new BufferedReader(isr); + //BufferedWriter out = new BufferedWriter(osr); + PrintWriter out = new PrintWriter(osr); + + lg.info("Client: Stream initialisiert"); + + out.println("Hallo Du Server Du - ich bin der client"); + out.flush(); // wirklich absenden!! + + lg.info("Client: Nachricht versendet"); + + String quittung = in.readLine(); // Achtung blockiert + lg.info("Client: Quittung empfangen"); + + System.out.println("Client: Quittung EMPFANGEN - " + quittung); + + + + out.close(); + in.close(); + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) + { + try + { + new Client(); + } + catch (IOException ex) + { + lg.severe(ex.toString()); + } + } +} diff --git a/src/netz/Server.java b/src/netz/Server.java new file mode 100755 index 0000000..6ea5999 --- /dev/null +++ b/src/netz/Server.java @@ -0,0 +1,76 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package netz; + +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.Logger; + +/** + * Builder Class + * @author le + */ +public class Server +{ + private static final Logger lg = Logger.getLogger("netz"); + private static final int PORT = 35000; + + public Server() throws IOException + { + ServerSocket sSocket = new ServerSocket(PORT); + lg.info("Server: Warte auf Verbindung ..."); + Socket s = sSocket.accept(); // Achtung: blockiert! + lg.info("Server: Verbindung akzeptiert"); + InputStream iStream = s.getInputStream(); + OutputStream oStream = s.getOutputStream(); + + InputStreamReader isr = new InputStreamReader(iStream, "UTF-8"); + OutputStreamWriter osr = new OutputStreamWriter(oStream, "UTF-8"); + + BufferedReader in = new BufferedReader(isr); + //BufferedWriter out = new BufferedWriter(osr); + PrintWriter out = new PrintWriter(osr); + + lg.info("Server: Stream initialisiert"); + lg.info("Server: warte auf Nachricht ..."); + + String nachricht = in.readLine(); // Achtung blockiert + lg.info("Server: Nachricht empfangen"); + + System.out.println("Server: NACHRICHT EMPFANGEN - " + nachricht); + + out.println("Server -> ich habe die Nachricht erhalten"); + lg.info("Server: Quittung versendet"); + + out.flush(); // wirklich absenden!! + + out.close(); + in.close(); + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) + { + try + { + new Server(); + } + catch (IOException ex) + { + lg.severe(ex.toString()); + } + } +} diff --git a/src/netz/Start.java b/src/netz/Start.java new file mode 100755 index 0000000..199d1ff --- /dev/null +++ b/src/netz/Start.java @@ -0,0 +1,71 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package netz; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; + +/** + * Builder Class + * @author le + */ +public class Start +{ + + public Start(String urlString, String dateiname) throws MalformedURLException, IOException + { + URL oUrl = new URL(urlString + "/" + dateiname); + InputStream iStream = oUrl.openStream(); + BufferedInputStream in = new BufferedInputStream(iStream); + + String tmpVerzeichnis = System.getProperty("java.io.tmpdir"); + String ausgabeDateiname = tmpVerzeichnis + File.separator + dateiname; + + FileOutputStream fos = new FileOutputStream(ausgabeDateiname); + BufferedOutputStream out = new BufferedOutputStream(fos); + + int wert = 0; + + while ( (wert = in.read()) >= 0) + { + out.write(wert); + } + in.close(); + out.close(); // flush! + System.out.println("Datei " + ausgabeDateiname + " erfolgreich erstellt"); + + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) + { + if (args.length == 2) + { + System.err.println("2 Aufrufparameter nötig: URL-String Dateiname"); + } + else + { + try + { + new Start(args[0], args[1]); + } + catch (Exception ex) + { + System.err.println(ex); + ex.printStackTrace(); + } + } + } +} diff --git a/src/view/ChatView.form b/src/view/ChatView.form new file mode 100644 index 0000000..48b023e --- /dev/null +++ b/src/view/ChatView.form @@ -0,0 +1,83 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/view/ChatView.java b/src/view/ChatView.java new file mode 100644 index 0000000..ace4558 --- /dev/null +++ b/src/view/ChatView.java @@ -0,0 +1,149 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package view; + +/** + * + * @author Apollo + */ +public class ChatView extends javax.swing.JFrame +{ + /** + * @param chatanzeige the chatanzeige to set + */ + public void setChatanzeige(javax.swing.JTextArea chatanzeige) + { + this.chatanzeige = chatanzeige; + } + /** + * @return the chatanzeige + */ + public javax.swing.JTextArea getChatanzeige() + { + return chatanzeige; + } + + /** + * @return the inputField + */ + public javax.swing.JTextField getInputField() + { + return inputField; + } + + /** + * Creates new form clientview + */ + public ChatView() + { + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() + { + + jPanel1 = new javax.swing.JPanel(); + jScrollPane3 = new javax.swing.JScrollPane(); + chatanzeige = new javax.swing.JTextArea(); + inputField = new javax.swing.JTextField(); + jMenuBar1 = new javax.swing.JMenuBar(); + jMenu1 = new javax.swing.JMenu(); + jMenu2 = new javax.swing.JMenu(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + + jPanel1.setLayout(new java.awt.BorderLayout()); + + chatanzeige.setEditable(false); + chatanzeige.setColumns(20); + chatanzeige.setRows(5); + jScrollPane3.setViewportView(chatanzeige); + + jPanel1.add(jScrollPane3, java.awt.BorderLayout.CENTER); + jPanel1.add(inputField, java.awt.BorderLayout.PAGE_END); + + getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); + + jMenu1.setText("File"); + jMenuBar1.add(jMenu1); + + jMenu2.setText("Edit"); + jMenuBar1.add(jMenu2); + + setJMenuBar(jMenuBar1); + + pack(); + }// //GEN-END:initComponents + + /** + * @param args the command line arguments + */ + public static void main(String args[]) + { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try + { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) + { + if ("Nimbus".equals(info.getName())) + { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } + catch (ClassNotFoundException ex) + { + java.util.logging.Logger.getLogger(ChatView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (InstantiationException ex) + { + java.util.logging.Logger.getLogger(ChatView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (IllegalAccessException ex) + { + java.util.logging.Logger.getLogger(ChatView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (javax.swing.UnsupportedLookAndFeelException ex) + { + java.util.logging.Logger.getLogger(ChatView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + // + // + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() + { + public void run() + { + new ChatView().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTextArea chatanzeige; + private javax.swing.JTextField inputField; + private javax.swing.JMenu jMenu1; + private javax.swing.JMenu jMenu2; + private javax.swing.JMenuBar jMenuBar1; + private javax.swing.JPanel jPanel1; + private javax.swing.JScrollPane jScrollPane3; + // End of variables declaration//GEN-END:variables +}