public class StreamDemultiplexer
extends java.lang.Object
Constructor and Description |
---|
StreamDemultiplexer(int numberOfStreams,
int blockingFactor,
StreamDemultiplexerDirector director) |
Modifier and Type | Method and Description |
---|---|
void |
abort(int indexOfStream)
Eine Methode zum beenden eines Streams.
|
void |
killAllStreams()
Die physische Verbindung zum Sender ist zusammengebrochen und alle Streams werden beendet.
|
void |
receivedDataFromSender(byte[] streamDataPacket)
Ein streamDataPacket, das der Multiplexer verschickt hat, wird entgegen genommen.
|
byte[] |
take(int indexOfStream)
Diese Methode gibt die Nutzdaten eines bestimmten Streams an die Empfängerapplikation zurück.
|
public StreamDemultiplexer(int numberOfStreams, int blockingFactor, StreamDemultiplexerDirector director)
numberOfStreams
- Anzahl von Streams, die Datenpakete versenden sollenblockingFactor
- Puffer des Empfängers (dieser Wert muß größer gleich 1 sein)director
- Schnittstelle, die eine Methode zum verschicken von Informationen an den Sender bereitstellt
(siehe Interface Beschreibung)java.lang.IllegalArgumentException
- Der blockingFactor war kleiner als 1public void abort(int indexOfStream)
indexOfStream
- Index des Streams, der beendet werden sollpublic byte[] take(int indexOfStream) throws java.lang.InterruptedException, java.lang.IllegalStateException, java.net.ProtocolException, java.nio.channels.ClosedChannelException
indexOfStream
- Eindeutiger Index des Streams, der Daten zurückgeben solljava.lang.InterruptedException
- Ein Thread, der Nutzdaten mit take anfordert hat, wird mit Interrupt abgebrochen.java.lang.IllegalStateException
- Ein Stream wurde mit abort durch die Empfängerapplikation beendet und anschließend
führte die Empfängerapplikation erneut ein take auf diesen Stream aus.java.net.ProtocolException
- Es wurde ein Paket mit einem falschen Index bearbeitet. Das deutet darauf hin, dass
das Paket entweder schon einmal empfangen wurde (doppelt vorhanden) oder das ein
Paket fehlt. Der Stream wird automatisch abgebrochen. Die Applikation kann weiter
"take" aufrufen, wird aber immer für diesen Stream, diese Exception bekommen.java.nio.channels.ClosedChannelException
- Die physische Verbindung zum Sender wurde unterbrochen. Jeder take Aufruf wird für
alle Streams diese Exception ausgeben, da alle Streams betroffen sindpublic void receivedDataFromSender(byte[] streamDataPacket) throws java.io.IOException
Diese Methode erzeugt dann aus dem Byte-Array die benötigten Objekte und legt diese in den dafür vorgesehenen Datenstrukturen ab.
Der Empfang neuer Nutzdaten wird von der Applikation an den StreamDemultiplexer geleitet (dadurch hat die Applikation den Datentransfer als Aufgabe).
streamDataPacket
- Ein Byte-Array in dem verschlüsselt der Index des Streams, der Index des Pakets, die Größe
des Byte-Arrays in dem die Nutzdaten gespeichert sind und die Nutzdaten selber stehen.java.io.IOException
- Es ist ein Fehler beim deserialisieren der Daten aufgetretenpublic void killAllStreams()