From 246abce07b62a207302106730456fb66d58802fe Mon Sep 17 00:00:00 2001 From: eichehome Date: Sat, 15 May 2021 22:53:58 +0200 Subject: [PATCH] Server auf mehrere Threads und Pipes umgestellt. --- src/client/Client.java | 171 ++++++++++++++++++++++ src/client/Client1.java | 5 +- src/server/ClientMessageStore.java | 61 -------- src/server/ClientPushMessageThread.java | 65 ++++++++ src/server/ClientReciveMessageThread.java | 65 ++++++++ src/server/ClientStore.java | 148 +++++++++++++++++++ src/server/MainServer.java | 44 +++++- src/server/ServerHandelClientsThread.java | 82 ----------- src/test/MainClient.java | 3 + src/test/PipeTest.java | 8 - src/utils/ArrayHelper.java | 69 --------- src/utils/Client.java | 35 +++-- 12 files changed, 515 insertions(+), 241 deletions(-) create mode 100644 src/client/Client.java delete mode 100644 src/server/ClientMessageStore.java create mode 100644 src/server/ClientPushMessageThread.java create mode 100644 src/server/ClientReciveMessageThread.java create mode 100644 src/server/ClientStore.java delete mode 100644 src/server/ServerHandelClientsThread.java delete mode 100644 src/utils/ArrayHelper.java diff --git a/src/client/Client.java b/src/client/Client.java new file mode 100644 index 0000000..c6df47a --- /dev/null +++ b/src/client/Client.java @@ -0,0 +1,171 @@ +package client; + +import java.awt.BorderLayout; +import java.awt.EventQueue; +import java.awt.TextArea; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; + +import utils.Message; + +import javax.swing.JTextField; +import javax.swing.JButton; +import javax.swing.JTextArea; +import java.awt.Color; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.net.Socket; +import java.util.Scanner; +import java.awt.event.ActionEvent; + +public class Client extends JFrame { + + private static JPanel contentPane; + JTextField txtMessage; + private JTextField txtUsername; + public static String currentText = " "; + public static int i = 0; + public static Object tosend = new Message("Leer", "Leer"); + public static Client t1; + public static Socket socket; + public static ObjectInputStream obinstr; + public static ObjectOutputStream oboust; + + + + public static void main(String[] args) { + t1 = new Client(); + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + Client frame = new Client(); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + + try { + start(); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + + public Client() { + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setBounds(100, 100, 450, 300); + contentPane = new JPanel(); + contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); + setContentPane(contentPane); + contentPane.setLayout(null); + + txtMessage = new JTextField(); + txtMessage.setText("Message"); + txtMessage.setBounds(117, 29, 218, 20); + contentPane.add(txtMessage); + txtMessage.setColumns(10); + + txtUsername = new JTextField(); + txtUsername.setText("Username"); + txtUsername.setBounds(21, 29, 86, 20); + contentPane.add(txtUsername); + txtUsername.setColumns(10); + + JButton btnSend = new JButton("Send"); + btnSend.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + + String themessage = txtMessage.getText(); + String theusername = txtUsername.getText(); + + tosend = new Message(theusername, themessage); + i = 1; + + System.out.println("Button pressed"); + + try { + oboust.writeObject(tosend); + oboust.flush(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + }); + + btnSend.setBounds(345, 28, 79, 23); + contentPane.add(btnSend); + + JTextArea textArea = new JTextArea(currentText); + textArea.setLineWrap(true); + textArea.setForeground(Color.WHITE); + textArea.setBackground(Color.LIGHT_GRAY); + textArea.setBounds(20, 60, 323, 176); + contentPane.add(textArea); + } + + public static void print(JTextArea textArea, String asd){ + currentText = asd + "\n" + currentText; + textArea.setText(currentText); + } + + public static void start() throws IOException, ClassNotFoundException{ + Scanner scan = new Scanner(System.in); + + JTextArea textArea = new JTextArea(currentText); + textArea.setLineWrap(true); + textArea.setForeground(Color.WHITE); + textArea.setBackground(Color.BLACK); + textArea.setBounds(20, 60, 323, 176); + contentPane.add(textArea); + + socket = new Socket( "localhost", 1236 ); + oboust = new ObjectOutputStream(socket.getOutputStream()); + obinstr = new ObjectInputStream(socket.getInputStream()); + + Object erhalten = null; + Message message = new Message("leer", "leer"); + + while(!message.getMessage().equals("exit")){ + System.out.println("While"); + try{ + erhalten = obinstr.readObject(); //Bleibt hier stehen, bis ein neues Object reinkommt + System.out.println("Nachricht erhalten"); + message = (Message)erhalten; + System.out.println(message.getMessage()); + String Ausgeben = "[" + message.getUsername() + "] " + message.getMessage(); + print(textArea, Ausgeben); + System.out.println("[" + message.getUsername() + "] " + message.getMessage()); + oboust.flush(); + }catch(Exception f){ + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + } + oboust.close(); + obinstr.close(); + socket.close(); + } + + + + +} diff --git a/src/client/Client1.java b/src/client/Client1.java index 03fbccd..fa511d3 100644 --- a/src/client/Client1.java +++ b/src/client/Client1.java @@ -221,10 +221,11 @@ public class Client1 extends JFrame { System.out.println("WHILE"); try{ //System.out.println("hile4"); - erhalten = obinstr.readObject(); //Bleibt hier stehen, bis ein neues Object reinkommt + System.out.println("Nachricht erhalten"); + erhalten = obinstr.readObject(); //Bleibt hier stehen, bis ein neues Object reinkommt message = (Message)erhalten; - + System.out.println("[" + message.getUsername() + "] " + message.getMessage()); String Ausgeben = message.getTime() + " [" + message.getUsername() + "] " + message.getMessage(); print(textArea, Ausgeben); //System.out.println("[CLIENT] NACHRICHT ERHALTEN"); diff --git a/src/server/ClientMessageStore.java b/src/server/ClientMessageStore.java deleted file mode 100644 index 4a0a7cf..0000000 --- a/src/server/ClientMessageStore.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2021 eichehome - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package server; - -import java.io.PipedWriter; -import utils.FifoPipe; -import utils.ArrayHelper; -import utils.Client; - -/** - * - * @author eichehome - */ -public class ClientMessageStore { - - private ArrayHelper arrayHelper = new ArrayHelper<>(); - /** - * Verzeichniss der Threads, die die Clients überwachen - */ - private Client[] clientThreads = null; - - public synchronized void addClient(Thread thread, FifoPipe pipe) { - Client client = new Client(thread, pipe); - arrayHelper.push(client, clientThreads); - } - - public synchronized Client removeClient(Thread thread) throws IllegalArgumentException { - FifoPipe pipe = null; - for (int i = 0; i < clientThreads.length; i++) { - if (clientThreads[i].getThread().equals(thread)) { - pipe = clientThreads[i].getPipe(); - } - } - if (pipe != null) { - Client client = new Client(thread, pipe); - return arrayHelper.pop(client, clientThreads); - } else { - throw new IllegalArgumentException("Element not found"); - } - } - - public void notifyAllClients() { - for (Client client : clientThreads) { - client.getThread().interrupt(); - } - } -} diff --git a/src/server/ClientPushMessageThread.java b/src/server/ClientPushMessageThread.java new file mode 100644 index 0000000..5d48848 --- /dev/null +++ b/src/server/ClientPushMessageThread.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2021 eichehome + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package server; + +import java.io.EOFException; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import utils.Message; + +/** + * + * @author eichehome + */ +public class ClientPushMessageThread extends Thread { + + private final ObjectOutputStream out; + private final ObjectInputStream pipedObjectInputStream; + private ClientStore clientStore; + + public void run() { + boolean continueLoop = true; + while (continueLoop) { + try { + Message empfangen = null; + while ((empfangen = (Message) this.pipedObjectInputStream.readObject()) != null) { + this.out.writeObject(empfangen); + this.out.flush(); + } + } catch (ClassNotFoundException ex) { + System.err.println("Thread push " + this.getId() + ": Fehler: " + ex); + } catch (EOFException ex) { + System.err.println("Thread push " + this.getId() + ": Fehler: " + ex); + continueLoop = false; + clientStore.removeClientByPusher(this); + } catch (IOException ex) { + System.err.println("Thread push" + this.getId() + ": Fehler: " + ex); + continueLoop = false; + clientStore.removeClientByPusher(this); + System.out.println("Thread recive " + this.getId() + ": Pipe wurde beendet"); + } + } + } + + public ClientPushMessageThread(ObjectOutputStream out, ObjectInputStream pipedObjectInputStream, ClientStore clientStore) { + this.out = out; + this.pipedObjectInputStream = pipedObjectInputStream; + this.clientStore = clientStore; + } + +} diff --git a/src/server/ClientReciveMessageThread.java b/src/server/ClientReciveMessageThread.java new file mode 100644 index 0000000..0654f53 --- /dev/null +++ b/src/server/ClientReciveMessageThread.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2021 eichehome + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package server; + +import java.io.EOFException; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import utils.Message; + +/** + * + * @author eichehome + */ +public class ClientReciveMessageThread extends Thread { + + private ClientStore clientStore; + private final ObjectInputStream in; + + public void run() { + System.out.println("Thread" + this.getId() + ": Gestartet"); + boolean continueLoop = true; + while (continueLoop) { + try { + Message empfangen = null; + while ((empfangen = (Message) this.in.readObject()) != null) { + System.out.println("Thread" + this.getId() + ": Client: " + empfangen.getMessage() + " from: " + empfangen.getUsername()); + for (ObjectOutputStream stream : clientStore.getAllOutputStreams()) { + stream.writeObject(empfangen); + stream.flush(); + System.out.println("Weitergeleitet"); + } + } + } catch (ClassNotFoundException ex) { + System.err.println("Thread recive " + this.getId() + ": Fehler: " + ex); + } catch (EOFException ex) { + System.err.println("Thread recive " + this.getId() + ": Fehler: " + ex); + continueLoop = false; + System.out.println("Thread push " + this.getId() + ": Socket wurde beendet"); + } catch (IOException ex) { + System.err.println("Thread recive " + this.getId() + ": Fehler: " + ex); + continueLoop = false; + } + } + } + + public ClientReciveMessageThread(ObjectInputStream in, ClientStore clientStore) { + this.in = in; + this.clientStore = clientStore; + } +} diff --git a/src/server/ClientStore.java b/src/server/ClientStore.java new file mode 100644 index 0000000..6ca7c75 --- /dev/null +++ b/src/server/ClientStore.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2021 eichehome + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package server; + +import java.io.ObjectOutputStream; +import utils.Client; + +/** + * + * @author eichehome + */ +public class ClientStore { + + private Client[] clients = null; + + public void addClient(Client newClient) { + if (this.clients != null) { + System.out.println("Weiterer Durchlauf"); + Client [] temp = new Client [this.clients.length + 1]; + System.arraycopy(clients, 0, temp, 0, clients.length); + temp[temp.length - 1] = newClient; + System.out.println(newClient.getPusher() + "/" + newClient.getReciver() + "/" + newClient.getOutputStream()); + this.clients = temp; + } else { + System.out.println("Erser Durchlauf"); + Client[] temp = new Client[1]; + temp[0] = newClient; + this.clients = temp; + } + printAll(); + } + + public Client removeClientByPusher(Thread pusher) throws IllegalArgumentException { + if (this.clients != null) { + int index = -1; + for (int i = 0; i < this.clients.length; i++) { + if (this.clients[i].getPusher().equals(pusher)) { + index = i; + break; + } + } + if (index != -1) { + Client[] temp = new Client[this.clients.length - 1]; + for (int i = 0; i < index; i++) { + temp[i] = this.clients[i]; + } + for (int i = (index + 1); i < this.clients.length; i++) { + temp[i - 1] = this.clients[i]; + } + Client result = this.clients[index]; + this.clients = temp; + return result; + } else { + throw new IllegalArgumentException("Element not found" + index); + } + } else { + throw new IllegalArgumentException("No clients present"); + } + } + + public Client removeClientByReciver(Thread reciver) throws IllegalArgumentException { + if (this.clients != null) { + int index = -1; + for (int i = 0; i < this.clients.length; i++) { + if (this.clients[i].getReciver().equals(reciver)) { + index = i; + break; + } + } + if (index != -1) { + Client[] temp = new Client[this.clients.length - 1]; + for (int i = 0; i < index; i++) { + temp[i] = this.clients[i]; + } + for (int i = (index + 1); i < this.clients.length; i++) { + temp[i - 1] = this.clients[i]; + } + Client result = this.clients[index]; + this.clients = temp; + return result; + } else { + throw new IllegalArgumentException("Element not found"); + } + } else { + throw new IllegalArgumentException("No clients present"); + } + } + + public Client removeClientByOutputStream(ObjectOutputStream out) throws IllegalArgumentException { + if (this.clients != null) { + int index = -1; + for (int i = 0; i < this.clients.length; i++) { + if (this.clients[i].getOutputStream().equals(out)) { + index = i; + } + } + if (index != -1) { + Client[] temp = new Client[this.clients.length - 1]; + for (int i = 0; i < index; i++) { + temp[i] = this.clients[i]; + } + for (int i = (index + 1); i < this.clients.length; i++) { + temp[i - 1] = this.clients[i]; + } + Client result = this.clients[index]; + this.clients = temp; + return result; + } else { + throw new IllegalArgumentException("Element not found"); + } + } else { + throw new IllegalArgumentException("No clients present"); + } + } + + public ObjectOutputStream[] getAllOutputStreams() { + ObjectOutputStream[] streams = new ObjectOutputStream[this.clients.length]; + for (int i = 0; i < this.clients.length; i++) { + streams[i] = this.clients[i].getOutputStream(); + } + return streams; + } + + public + + private void printAll() { + for (int i = 0; i < clients.length; i++) { + System.out.println("ClientStore" + i + ": " + clients[i].getPusher()); + System.out.println("ClientStore" + i + ": " + clients[i].getReciver()); + System.out.println("ClientStore" + i + ": " + clients[i].getOutputStream()); + } + } + +} diff --git a/src/server/MainServer.java b/src/server/MainServer.java index 0c52153..522af15 100644 --- a/src/server/MainServer.java +++ b/src/server/MainServer.java @@ -17,9 +17,15 @@ package server; import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; import java.io.PipedReader; import java.io.PipedWriter; +import java.lang.invoke.MethodHandles; import java.net.*; +import utils.Client; import utils.FifoPipe; /** @@ -34,17 +40,39 @@ public class MainServer { * @param args the command line arguments */ public static void main(String[] args) { + boolean continueLoop = true; try (ServerSocket serverSocket = new ServerSocket(1236)) { - ClientMessageStore messageStore = new ClientMessageStore(); - while (true) { + ClientStore clientStore = new ClientStore(); + while (continueLoop) { + System.out.println("Warte auf Clients"); Socket client = serverSocket.accept(); System.out.println("client connected"); - FifoPipe pipe = new FifoPipe(); - Thread thread = new ServerHandelClientsThread(client, messageStore, pipe); - System.out.println("Test"); - thread.run(); - messageStore.addClient(thread, pipe); - + + PipedOutputStream pipedOutputStream = new PipedOutputStream(); + PipedInputStream pipedInputStream = new PipedInputStream(pipedOutputStream); + + ObjectOutputStream pipedObjectOutputStream = new ObjectOutputStream(pipedOutputStream); + ObjectInputStream pipedObjectInputStream = new ObjectInputStream(pipedInputStream); + + ObjectInputStream in = new ObjectInputStream(client.getInputStream()); + ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream()); + + System.out.println("Streams created"); + + Thread threadRecive = new ClientReciveMessageThread(in, clientStore); + Thread threadPush = new ClientPushMessageThread(out, pipedObjectInputStream, clientStore); + + System.out.println("Threads created"); + + threadPush.start(); + threadRecive.start(); + + System.out.println("Threads started"); + + Client client = new Client(pipedObjectOutputStream, threadPush, threadRecive); + System.out.println(client.getPusher() + "/" + client.getReciver() + "/" + client.getOutputStream()); + clientStore.addClient(client); + } } catch (Exception ex) { System.err.println("Fehler: " + ex); diff --git a/src/server/ServerHandelClientsThread.java b/src/server/ServerHandelClientsThread.java deleted file mode 100644 index ccd23c8..0000000 --- a/src/server/ServerHandelClientsThread.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2021 eichehome - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package server; - -import java.io.*; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.net.*; -import utils.FifoPipe; -import utils.Message; - -/** - * - * @author eichehome - */ -public class ServerHandelClientsThread extends Thread { - - private Socket clientSocket = null; - private ClientMessageStore centralMessageStore = null; - private FifoPipe pipe = null; - - @Override - public void run() { - ObjectOutputStream out = null; - boolean continueLoop = true; - while (continueLoop) { - try (ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream())) { - out = new ObjectOutputStream(clientSocket.getOutputStream()); - Message empfangen = null; - while ((empfangen = (Message) in.readObject()) != null) { - System.out.println("client: " + empfangen); - Message message = empfangen; - out.writeObject(message); - out.flush(); - System.out.println("Nachricht gesendet"); - } - } catch (ClassNotFoundException ex) { - System.err.println(ex); - } catch (SocketException ex) { - System.err.println("Socket geschlossen"); - centralMessageStore.removeClient(this); - continueLoop = false; - } catch (EOFException ex) { - System.err.println("Fehler: " + ex); - continueLoop = false; - } catch (IOException ex) { - System.err.println("Exeption: " + ex); - Logger.getLogger(ServerHandelClientsThread.class.getName()).log(Level.SEVERE, null, ex); - centralMessageStore.removeClient(this); - continueLoop = false; - } finally { - if(out != null) { - try { - out.close(); - } catch (IOException ex) { - System.err.println("Fehler: " + ex); - } - } - } - } - } - - public ServerHandelClientsThread(Socket socket, ClientMessageStore messageStore, FifoPipe pipe) { - this.clientSocket = socket; - this.centralMessageStore = messageStore; - this.pipe = pipe; - } -} diff --git a/src/test/MainClient.java b/src/test/MainClient.java index 14ed231..e5545b7 100644 --- a/src/test/MainClient.java +++ b/src/test/MainClient.java @@ -11,7 +11,9 @@ public class MainClient { public MainClient() throws IOException, ClassNotFoundException { System.out.println("[CLIENT] START"); Socket socket = new Socket( "localhost", 1236 ); + System.out.println("[CLIENT] Debug1"); ObjectOutputStream oboust = new ObjectOutputStream(socket.getOutputStream()); + System.out.println("[CLIENT] Debug2"); ObjectInputStream obinstr = new ObjectInputStream(socket.getInputStream()); System.out.println("[CLIENT] START1"); Message senden = new Message( "berdan", "test" ); @@ -28,6 +30,7 @@ public class MainClient { while(erhalten==null){ erhalten = obinstr.readObject(); + System.out.println(erhalten); } System.out.println("[CLIENT] NACHRICHT ERHALTEN"); System.out.println(erhalten); //nickname=berdan, message=test diff --git a/src/test/PipeTest.java b/src/test/PipeTest.java index a4c2c43..25f89d8 100644 --- a/src/test/PipeTest.java +++ b/src/test/PipeTest.java @@ -16,14 +16,6 @@ */ package test; -import utils.ArrayHelper; -import java.io.IOException; -import java.io.PipedReader; -import java.io.PipedWriter; -import utils.FifoPipe; -import utils.Message; -import utils.PipeElement; - /** * * @author eichehome diff --git a/src/utils/ArrayHelper.java b/src/utils/ArrayHelper.java deleted file mode 100644 index 434a43e..0000000 --- a/src/utils/ArrayHelper.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2021 eichehome - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package utils; - -/** - * - * @author eichehome - * @param Type des Arrays, mit dem gearbeitet wird. - */ -public class ArrayHelper { - - public T[] push(T element, T[] array) { - if (array != null) { - T[] temp = new T[1 + array.length]; - for (int i = 0; i < array.length; i++) { - temp[i] = array[i]; - } - temp[temp.length - 1] = element;//Letzter eintrag - array = temp; - } else { - T[] temp = new T[1]; - temp[temp.length - 1] = element; - array = temp; - } - return array; - } - - public T pop(T element, T[] array) throws IllegalArgumentException { - if (array != null) { - int index = getIndex(element, array); - T result = array[index]; - T[] temp = new T[array.length - 2]; - for (int i = 0; i < index; i++) { - temp[i] = array[i]; - } - for (int i = ++index; i < temp.length; i++) { - temp[i - 1] = array[i]; - } - return result; - } else { - throw new IllegalArgumentException("Element not found"); - } - } - - int getIndex(T match, T[] array) { - int result = -1; - for (int i = 0; i < array.length; i++) { - if (array[i].equals(match)) { - result = i; - break; - } - } - return result; - } -} diff --git a/src/utils/Client.java b/src/utils/Client.java index 9ba39f6..376059d 100644 --- a/src/utils/Client.java +++ b/src/utils/Client.java @@ -16,29 +16,42 @@ */ package utils; +import java.io.IOException; +import java.io.ObjectOutputStream; + /** * * @author eichehome */ public class Client { - private Thread thread = null; - private FifoPipe pipe = null; + private final ObjectOutputStream out; + private final Thread pusher; + private final Thread reciver; - public Client(Thread thread, FifoPipe pipe) { - this.thread = thread; - this.pipe = pipe; + public Client(ObjectOutputStream out, Thread pusher, Thread reciver) { + this.out = out; + this.pusher = pusher; + this.reciver = reciver; } - public void writePipe(Message message) { - this.pipe.setElement(message); + public void writeMessage(Message message) { + try { + this.out.writeObject(message); + } catch (IOException ex) { + System.err.println("Cliet: Fehler: " + ex); + } } - public Thread getThread() { - return this.thread; + public ObjectOutputStream getOutputStream() { + return this.out; } - public FifoPipe getPipe() { - return this.pipe; + public Thread getPusher() { + return this.pusher; + } + + public Thread getReciver() { + return this.reciver; } }