Class PacketStream

java.lang.Object
services.moleculer.stream.PacketStream

public class PacketStream extends Object
NodeJS compatible streaming API to transfer binary files/content.

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 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

      protected final ScheduledExecutorService scheduler
    • nodeID

      protected final String nodeID
      Current node ID.
    • closed

      protected final AtomicBoolean closed
      Is stream closed?
      See Also:
    • buffer

      protected final LinkedList<byte[]> buffer
      Memory-buffer of an unconnected stream. Connected streams do not use this buffer.
    • transferedBytes

      protected final AtomicLong transferedBytes
      Counter of transfered bytes.
      See Also:
    • listeners

      protected PacketListener[] listeners
      Array of PacketListeners (receivers).
    • cause

      protected Throwable cause
      Cause (blocking error).
    • packetSize

      protected int packetSize
      Minimum size of packets.
    • packetDelay

      protected long packetDelay
      Time between each packet sent. This may be necessary because the other Threads will get some CPU-time.
  • Constructor Details

  • Method Details

    • onPacket

      public boolean onPacket(PacketListener listener)
    • sendData

      public boolean sendData(byte[] bytes)
    • sendError

      public boolean sendError(Throwable cause)
    • sendClose

      public boolean sendClose()
    • asOutputStream

      public OutputStream asOutputStream()
    • asWritableByteChannel

      public WritableByteChannel asWritableByteChannel()
    • transferFrom

      public io.datatree.Promise transferFrom(URL source)
    • transferFrom

      public io.datatree.Promise transferFrom(URL source, BooleanSupplier blocker)
    • transferFrom

      public io.datatree.Promise transferFrom(File source)
    • transferFrom

      public io.datatree.Promise transferFrom(File source, BooleanSupplier blocker)
    • transferFrom

      public io.datatree.Promise transferFrom(InputStream source)
    • transferFrom

      public io.datatree.Promise transferFrom(InputStream source, BooleanSupplier blocker)
    • transferFrom

      public io.datatree.Promise transferFrom(ReadableByteChannel source)
    • transferFrom

      public io.datatree.Promise transferFrom(ReadableByteChannel source, BooleanSupplier blocker)
    • 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

      public io.datatree.Promise transferTo(File destination)
    • transferTo

      public io.datatree.Promise transferTo(File destination, boolean append)
    • transferTo

      public io.datatree.Promise transferTo(OutputStream destination)
    • transferTo

      public io.datatree.Promise transferTo(OutputStream destination, boolean closeStream)
    • transferTo

      public io.datatree.Promise transferTo(WritableByteChannel destination)
    • transferTo

      public io.datatree.Promise transferTo(WritableByteChannel destination, boolean closeChannel)
    • 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

      public Throwable getCause()