/* * 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 ChatProgramm.view.GrafikView; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; 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; /** * * @author ahren */ public abstract class Transmitter implements Runnable, Subscriber, TransmitterInterface { static final int timeout = 60000; private static final int PORT = 35000; private static Logger lg = Logger.getLogger("netz"); protected Socket socket; protected ObjectInputStream reader; protected ObjectOutputStream writer; private Figur figur; private SubmissionPublisher figurPublisher; private ExecutorService eService; private String receivedString; private ChatView view; private GrafikModel model; private ReceiveAdapter receiveAdapter; public Transmitter(ChatView view, GrafikModel model, GrafikView gView) { socket = new Socket(); eService = null; receiveAdapter = new ReceiveAdapter(view, model, gView); figurPublisher = new SubmissionPublisher<>(); this.view = view; addWertSubscription(receiveAdapter); figur = new Figur(); } public void addWertSubscription(Subscriber subscriber) { figurPublisher.subscribe(subscriber); } public abstract void connect() throws IOException; public void initIO() { try { lg.info("Initialisiere reader und writer"); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); writer = new ObjectOutputStream(os); writer.flush(); reader = new ObjectInputStream(is); lg.info("Reader / Writer Initialisierung abgeschlossen"); startempfangen(); } catch (UnsupportedEncodingException 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 */ @Override public void send(Figur figur){ try { writer.writeObject(figur); writer.flush(); } catch (IOException ex) { Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex); } lg.info("Nachricht gesendet"); figurPublisher.submit(figur); } public Figur receive(){ Object receivedObject; try { receivedObject = reader.readObject(); if (receivedObject instanceof Figur) { lg.info("Figur erhalten"); figur = (Figur) receivedObject; } } catch (IOException ex) { 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; } @Override public void run() { while (true) { lg.info("Warte auf Nachricht"); figur = receive(); if(!figur.getPunkte().isEmpty()){ figurPublisher.submit(figur); } } } @Override public void onSubscribe(Flow.Subscription subscription) { throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody } @Override public void onNext(Figur item) { throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody } @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 } private void startempfangen() { synchronized (this){ } if (eService == null){ eService = Executors.newSingleThreadExecutor(); eService.execute(this); } lg.info("Starte Chat"); } }