Class PacketStream
java.lang.Object
services.moleculer.stream.PacketStream
NodeJS compatible streaming API to transfer binary files/content.
Sample service invocation with a stream:
Sample service invocation with a stream:
PacketStream stream = broker.createStream();
broker.call("streamService.action", stream);
stream.sendData("body".getBytes());
stream.sendClose(); // Must close!
Sample stream receiver service:
public class StreamService extends Service {
public Action action = ctx -> {
return new Promise(res -> {
ctx.stream.onPacket((bytes, cause, close) -> {
if (bytes != null) {
// Do something with the bytes
}
if (close) {
// Send response, can be a structure (Tree)
res.resolve("Ok");
}
});
});
};
}
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final LinkedList<byte[]> Memory-buffer of an unconnected stream.protected ThrowableCause (blocking error).protected static final byte[]protected final AtomicBooleanIs stream closed?protected static final intprotected PacketListener[]Array of PacketListeners (receivers).protected static final org.slf4j.Loggerprotected final StringCurrent node ID.protected longTime between each packet sent.protected intMinimum size of packets.protected final ScheduledExecutorServiceprotected final AtomicLongCounter of transfered bytes. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiongetCause()longintlongbooleanisClosed()booleanonPacket(PacketListener listener) protected voidscheduleNextPacket(InputStream source, OutputStream destination, io.datatree.Promise promise, byte[] packet, BooleanSupplier blocker) protected voidscheduleNextPacket(ReadableByteChannel source, OutputStream destination, io.datatree.Promise promise, ByteBuffer packet, BooleanSupplier blocker) booleanbooleansendData(byte[] bytes) booleanvoidsetPacketDelay(long packetDelay) voidsetPacketSize(int packetSize) io.datatree.PromisetransferFrom(File source) io.datatree.PromisetransferFrom(File source, BooleanSupplier blocker) io.datatree.PromisetransferFrom(InputStream source) io.datatree.PromisetransferFrom(InputStream source, BooleanSupplier blocker) io.datatree.PromisetransferFrom(URL source) io.datatree.PromisetransferFrom(URL source, BooleanSupplier blocker) io.datatree.PromisetransferFrom(ReadableByteChannel source) io.datatree.PromisetransferFrom(ReadableByteChannel source, BooleanSupplier blocker) io.datatree.PromisetransferTo(File destination) io.datatree.PromisetransferTo(File destination, boolean append) io.datatree.PromisetransferTo(OutputStream destination) io.datatree.PromisetransferTo(OutputStream destination, boolean closeStream) io.datatree.PromisetransferTo(WritableByteChannel destination) io.datatree.PromisetransferTo(WritableByteChannel destination, boolean closeChannel)
-
Field Details
-
DEFAULT_MIN_PACKET_SIZE
protected static final int DEFAULT_MIN_PACKET_SIZE- See Also:
-
CLOSE_MARKER
protected static final byte[] CLOSE_MARKER -
logger
protected static final org.slf4j.Logger logger -
scheduler
-
nodeID
Current node ID. -
closed
-
buffer
Memory-buffer of an unconnected stream. Connected streams do not use this buffer. -
transferedBytes
-
listeners
Array of PacketListeners (receivers). -
cause
Cause (blocking error). -
packetSize
protected int packetSizeMinimum size of packets. -
packetDelay
protected long packetDelayTime between each packet sent. This may be necessary because the other Threads will get some CPU-time.
-
-
Constructor Details
-
PacketStream
-
-
Method Details
-
onPacket
-
sendData
public boolean sendData(byte[] bytes) -
sendError
-
sendClose
public boolean sendClose() -
asOutputStream
-
asWritableByteChannel
-
transferFrom
-
transferFrom
-
transferFrom
-
transferFrom
-
transferFrom
-
transferFrom
-
transferFrom
-
transferFrom
-
scheduleNextPacket
protected void scheduleNextPacket(ReadableByteChannel source, OutputStream destination, io.datatree.Promise promise, ByteBuffer packet, BooleanSupplier blocker) -
scheduleNextPacket
protected void scheduleNextPacket(InputStream source, OutputStream destination, io.datatree.Promise promise, byte[] packet, BooleanSupplier blocker) -
transferTo
-
transferTo
-
transferTo
-
transferTo
-
transferTo
-
transferTo
-
getPacketSize
public int getPacketSize() -
setPacketSize
public void setPacketSize(int packetSize) -
getPacketDelay
public long getPacketDelay() -
setPacketDelay
public void setPacketDelay(long packetDelay) -
isClosed
public boolean isClosed() -
getTransferedBytes
public long getTransferedBytes() -
getCause
-