public class StreamDemultiplexer extends Object
Modifier and Type | Class and Description |
---|---|
private static class |
StreamDemultiplexer.DemultiplexerStreaminformations
Diese Objekt beinhaltet alle Informationen, die für einen Stream, auf Empfängerseite, wichtig sind.
|
private static class |
StreamDemultiplexer.ReferenceDataPacket
Objekte dieser Klasse speichern die Nutzdaten(Byte-Array) und den Index der Nutzdaten.
|
Modifier and Type | Field and Description |
---|---|
private int |
_abortedStreamReceivedData
Debug Wenn ein stream aborted wird, dann darf er keine Daten mehr empfangen.
|
private StreamDemultiplexer.DemultiplexerStreaminformations[] |
_arrayOfStreams
Alle Streams bekommen einen Eintrag in diesem Array.
|
private int |
_blockingFactor
Der _blockingFactor bestimmt die größe des Empfängerpuffers.
|
private static Debug |
_debug |
private StreamDemultiplexerDirector |
_director
Objekt, das das versenden von Tickets (Bestätigungen, dass der Sender Datenpakete senden darf) zur Verfügung
stellen
|
private int |
_numberOfOverchargesReceiver
Debug Wie oft überlastet der Sender den Empfänger (der Sender schickt mehr Nutzdatenpakete als die dataQueue des
Empfängers aufnehmen darf (_blockingFactor)).
|
private int |
_numberOfPacketsReceived
Debug, hier wird gezählt wie viele Nutzdatenpackete empfangen wurden
|
private int[] |
_numberOfReceivedPackets
Debug Anzahl der empfangenen Pakete je stream
|
private int |
_numberOfStreams
Anzahl der Streams auf denen Datensätze verschickt werden können
|
private int[] |
_numberOfTakes
Debug Anzahl der Takes, die auch Nutzdaten enthielten (take mit einem Datensatz, der null enthält wird nicht
gezählt)
|
private int |
_ticketBlockingFactor
Der _blockingFactor wird durch 2 geteilt.
|
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.
|
private void |
printByteArrayScreen(byte[] data) |
private void |
printDebugVariables() |
void |
receivedDataFromSender(byte[] streamDataPacket)
Ein streamDataPacket, das der Multiplexer verschickt hat, wird entgegen genommen.
|
private void |
sendNewTicketIndexToSender(int indexOfStream,
int maximumStreamTicketsIndex)
Der Sender wird benachrichtigt, dass er auf einem Stream weitere Nutzdatenpakete schicken darf.
|
byte[] |
take(int indexOfStream)
Diese Methode gibt die Nutzdaten eines bestimmten Streams an die Empfängerapplikation zurück.
|
private void |
unpackBigPacket(StreamDemultiplexer.DemultiplexerStreaminformations stream) |
private final int _numberOfStreams
private final int _blockingFactor
private final int _ticketBlockingFactor
private final StreamDemultiplexerDirector _director
private final StreamDemultiplexer.DemultiplexerStreaminformations[] _arrayOfStreams
private int _numberOfPacketsReceived
private int _abortedStreamReceivedData
private int _numberOfOverchargesReceiver
private final int[] _numberOfReceivedPackets
private final int[] _numberOfTakes
private static Debug _debug
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)IllegalArgumentException
- Der blockingFactor war kleiner als 1public void abort(int indexOfStream)
indexOfStream
- Index des Streams, der beendet werden sollpublic byte[] take(int indexOfStream) throws InterruptedException, IllegalStateException, ProtocolException, ClosedChannelException
indexOfStream
- Eindeutiger Index des Streams, der Daten zurückgeben sollInterruptedException
- Ein Thread, der Nutzdaten mit take anfordert hat, wird mit Interrupt abgebrochen.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.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.ClosedChannelException
- Die physische Verbindung zum Sender wurde unterbrochen. Jeder take Aufruf wird für
alle Streams diese Exception ausgeben, da alle Streams betroffen sindprivate void unpackBigPacket(StreamDemultiplexer.DemultiplexerStreaminformations stream) throws InterruptedException
InterruptedException
public void receivedDataFromSender(byte[] streamDataPacket) throws IOException
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.IOException
- Es ist ein Fehler beim deserialisieren der Daten aufgetretenprivate void sendNewTicketIndexToSender(int indexOfStream, int maximumStreamTicketsIndex) throws IOException
indexOfStream
- Die eindeutige Nummer des Stream, der neue Datenpakete schicken darfmaximumStreamTicketsIndex
- Bis zu diesem Wert darf der Sender auf dem Stream neue Nutzdatenpakete schicken.
Der Sender benutzt dafür den streamPacketIndex als Anzahl wie viele Datenpakete
verschickt wurden.IOException
- Es ist ein Fehler beim serialisieren der Daten aufgetretenpublic void killAllStreams()
private void printByteArrayScreen(byte[] data)
private void printDebugVariables()