Class ClientStreamReceiver
- java.lang.Object
-
- org.apache.qpid.protonj2.client.impl.ClientStreamReceiver
-
- All Implemented Interfaces:
java.lang.AutoCloseable
,Receiver
,StreamReceiver
public final class ClientStreamReceiver extends java.lang.Object implements StreamReceiver
Client implementation of aStreamReceiver
.
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description StreamReceiver
addCredit(int credits)
Adds credit to theReceiver
link for use when there receiver has not been configured with a credit window.java.lang.String
address()
Returns the address that theReceiver
instance will be subscribed to.ClientInstance
client()
void
close()
Requests a close of theReceiver
at the remote and waits until the Receiver has been fully closed or until the configuredReceiverOptions.closeTimeout()
is exceeded.void
close(ErrorCondition error)
Requests a close of theReceiver
at the remote and waits until the Receiver has been fully closed or until the configuredReceiverOptions.closeTimeout()
is exceeded.ClientFuture<Receiver>
closeAsync()
Requests a close of theReceiver
link at the remote and returns aFuture
that will be completed once the link has been closed.ClientFuture<Receiver>
closeAsync(ErrorCondition error)
Requests a close of theReceiver
link at the remote and returns aFuture
that will be completed once the link has been closed.ClientConnection
connection()
java.lang.String[]
desiredCapabilities()
Returns the desired capabilities that the remote provided upon successfully opening theReceiver
.void
detach()
Requests a detach of theReceiver
at the remote and waits until the Receiver has been fully detached or until the configuredSenderOptions.closeTimeout()
is exceeded.void
detach(ErrorCondition error)
Requests a detach of theReceiver
at the remote and waits until the Receiver has been fully detached or until the configuredSenderOptions.closeTimeout()
is exceeded.ClientFuture<Receiver>
detachAsync()
Requests a detach of theReceiver
link at the remote and returns aFuture
that will be completed once the link has been detached.ClientFuture<Receiver>
detachAsync(ErrorCondition error)
Requests a detach of theReceiver
link at the remote and returns aFuture
that will be completed once the link has been detached.java.util.concurrent.Future<Receiver>
drain()
Requests the remote to drain previously granted credit for thisReceiver
link.java.lang.String[]
offeredCapabilities()
Returns the offered capabilities that the remote provided upon successfully opening theReceiver
.ClientFuture<Receiver>
openFuture()
java.util.Map<java.lang.String,java.lang.Object>
properties()
Returns the properties that the remote provided upon successfully opening theReceiver
.long
queuedDeliveries()
Returns the number of Deliveries that are currently held in theReceiver
delivery queue.StreamDelivery
receive()
Blocking receive method that waits forever for the remote to provide aStreamReceiverMessage
for consumption.StreamDelivery
receive(long timeout, java.util.concurrent.TimeUnit unit)
Blocking receive method that waits the given time interval for the remote to provide aStreamReceiverMessage
for consumption.ClientSession
session()
Source
source()
Returns an immutable view of the remoteSource
object assigned to this receiver link.Target
target()
Returns an immutable view of the remoteTarget
object assigned to this receiver link.StreamDelivery
tryReceive()
Non-blocking receive method that either returns a message is one is immediately available or returns null if none is currently at hand.
-
-
-
Method Detail
-
client
public ClientInstance client()
-
connection
public ClientConnection connection()
- Specified by:
connection
in interfaceReceiver
- Returns:
- the
Connection
instance that holds this session'sReceiver
-
session
public ClientSession session()
-
openFuture
public ClientFuture<Receiver> openFuture()
- Specified by:
openFuture
in interfaceReceiver
- Returns:
- a
Future
that will be completed when the remote opens thisReceiver
.
-
close
public void close()
Description copied from interface:Receiver
Requests a close of theReceiver
at the remote and waits until the Receiver has been fully closed or until the configuredReceiverOptions.closeTimeout()
is exceeded.
-
close
public void close(ErrorCondition error)
Description copied from interface:Receiver
Requests a close of theReceiver
at the remote and waits until the Receiver has been fully closed or until the configuredReceiverOptions.closeTimeout()
is exceeded.- Specified by:
close
in interfaceReceiver
- Parameters:
error
- TheErrorCondition
to transmit to the remote along with the close operation.
-
detach
public void detach()
Description copied from interface:Receiver
Requests a detach of theReceiver
at the remote and waits until the Receiver has been fully detached or until the configuredSenderOptions.closeTimeout()
is exceeded.
-
detach
public void detach(ErrorCondition error)
Description copied from interface:Receiver
Requests a detach of theReceiver
at the remote and waits until the Receiver has been fully detached or until the configuredSenderOptions.closeTimeout()
is exceeded.- Specified by:
detach
in interfaceReceiver
- Parameters:
error
- TheErrorCondition
to transmit to the remote along with the detach operation.
-
closeAsync
public ClientFuture<Receiver> closeAsync()
Description copied from interface:Receiver
Requests a close of theReceiver
link at the remote and returns aFuture
that will be completed once the link has been closed.- Specified by:
closeAsync
in interfaceReceiver
- Returns:
- a
Future
that will be completed when the remote closes thisReceiver
link.
-
closeAsync
public ClientFuture<Receiver> closeAsync(ErrorCondition error)
Description copied from interface:Receiver
Requests a close of theReceiver
link at the remote and returns aFuture
that will be completed once the link has been closed.- Specified by:
closeAsync
in interfaceReceiver
- Parameters:
error
- TheErrorCondition
to transmit to the remote along with the close operation.- Returns:
- a
Future
that will be completed when the remote closes thisReceiver
link.
-
detachAsync
public ClientFuture<Receiver> detachAsync()
Description copied from interface:Receiver
Requests a detach of theReceiver
link at the remote and returns aFuture
that will be completed once the link has been detached.- Specified by:
detachAsync
in interfaceReceiver
- Returns:
- a
Future
that will be completed when the remote detaches thisReceiver
link.
-
detachAsync
public ClientFuture<Receiver> detachAsync(ErrorCondition error)
Description copied from interface:Receiver
Requests a detach of theReceiver
link at the remote and returns aFuture
that will be completed once the link has been detached.- Specified by:
detachAsync
in interfaceReceiver
- Parameters:
error
- TheErrorCondition
to transmit to the remote along with the detach operation.- Returns:
- a
Future
that will be completed when the remote detaches thisReceiver
link.
-
receive
public StreamDelivery receive() throws ClientException
Description copied from interface:StreamReceiver
Blocking receive method that waits forever for the remote to provide aStreamReceiverMessage
for consumption.Receive calls will only grant credit on their own if a credit window is configured in the
StreamReceiverOptions
which is done by default. If the client application has configured no credit window than this method will not grant any credit when it enters the wait for new incoming messages.- Specified by:
receive
in interfaceReceiver
- Specified by:
receive
in interfaceStreamReceiver
- Returns:
- a new
Delivery
received from the remote. - Throws:
ClientException
- if theStreamReceiver
or its parent is closed when the call to receive is made.
-
receive
public StreamDelivery receive(long timeout, java.util.concurrent.TimeUnit unit) throws ClientException
Description copied from interface:StreamReceiver
Blocking receive method that waits the given time interval for the remote to provide aStreamReceiverMessage
for consumption. The amount of time this method blocks is based on the timeout value. If timeout is equal to-1
then it blocks until a Delivery is received. If timeout is equal to zero then it will not block and simply return aStreamReceiverMessage
if one is available locally. If timeout value is greater than zero then it blocks up to timeout amount of time.Receive calls will only grant credit on their own if a credit window is configured in the
StreamReceiverOptions
which is done by default. If the client application has not configured a credit window or granted credit manually this method will not automatically grant any credit when it enters the wait for a new incomingStreamReceiverMessage
.- Specified by:
receive
in interfaceReceiver
- Specified by:
receive
in interfaceStreamReceiver
- Parameters:
timeout
- The timeout value used to control how long the receive method waits for a newDelivery
.unit
- The unit of time that the given timeout represents.- Returns:
- a new
StreamReceiverMessage
received from the remote. - Throws:
ClientException
- if theStreamReceiver
or its parent is closed when the call to receive is made.
-
tryReceive
public StreamDelivery tryReceive() throws ClientException
Description copied from interface:StreamReceiver
Non-blocking receive method that either returns a message is one is immediately available or returns null if none is currently at hand.- Specified by:
tryReceive
in interfaceReceiver
- Specified by:
tryReceive
in interfaceStreamReceiver
- Returns:
- a new
StreamReceiverMessage
received from the remote or null if no pending deliveries are available. - Throws:
ClientException
- if theStreamReceiver
or its parent is closed when the call to try to receive is made.
-
addCredit
public StreamReceiver addCredit(int credits) throws ClientException
Description copied from interface:StreamReceiver
Adds credit to theReceiver
link for use when there receiver has not been configured with a credit window. When credit window is configured credit replenishment is automatic and calling this method will result in an exception indicating that the operation is invalid.If the
Receiver
is draining and this method is called an exception will be thrown to indicate that credit cannot be replenished until the remote has drained the existing link credit.- Specified by:
addCredit
in interfaceReceiver
- Specified by:
addCredit
in interfaceStreamReceiver
- Parameters:
credits
- credit The number of credits to add to theStreamReceiver
link.- Returns:
- this
StreamReceiver
instance. - Throws:
ClientException
- if an error occurs while attempting to add newStreamReceiver
link credit.
-
drain
public java.util.concurrent.Future<Receiver> drain() throws ClientException
Description copied from interface:Receiver
Requests the remote to drain previously granted credit for thisReceiver
link.- Specified by:
drain
in interfaceReceiver
- Returns:
- a
Future
that will be completed when the remote drains thisReceiver
link. - Throws:
ClientException
- if an error occurs while attempting to drain the link credit.
-
properties
public java.util.Map<java.lang.String,java.lang.Object> properties() throws ClientException
Description copied from interface:Receiver
Returns the properties that the remote provided upon successfully opening theReceiver
. If the attach has not completed yet this method will block to await the attach response which carries the remote properties. If the remote provides no properties this method will return null.- Specified by:
properties
in interfaceReceiver
- Returns:
- any properties provided from the remote once the receiver has successfully opened.
- Throws:
ClientException
- if an error occurs while obtaining theReceiver
remote properties.
-
offeredCapabilities
public java.lang.String[] offeredCapabilities() throws ClientException
Description copied from interface:Receiver
Returns the offered capabilities that the remote provided upon successfully opening theReceiver
. If the attach has not completed yet this method will block to await the attach response which carries the remote offered capabilities. If the remote provides no capabilities this method will return null.- Specified by:
offeredCapabilities
in interfaceReceiver
- Returns:
- any capabilities provided from the remote once the receiver has successfully opened.
- Throws:
ClientException
- if an error occurs while obtaining theReceiver
remote offered capabilities.
-
desiredCapabilities
public java.lang.String[] desiredCapabilities() throws ClientException
Description copied from interface:Receiver
Returns the desired capabilities that the remote provided upon successfully opening theReceiver
. If the attach has not completed yet this method will block to await the attach response which carries the remote desired capabilities. If the remote provides no capabilities this method will return null.- Specified by:
desiredCapabilities
in interfaceReceiver
- Returns:
- any desired capabilities provided from the remote once the receiver has successfully opened.
- Throws:
ClientException
- if an error occurs while obtaining theReceiver
remote desired capabilities.
-
address
public java.lang.String address() throws ClientException
Description copied from interface:Receiver
Returns the address that theReceiver
instance will be subscribed to.- If the Receiver was created with the dynamic receiver methods then the method will return the dynamically created address once the remote has attached its end of the receiver link. Due to the need to await the remote peer to populate the dynamic address this method will block until the open of the receiver link has completed.
-
If not a dynamic receiver then the address returned is the address passed to the original
Session.openReceiver(String)
orSession.openReceiver(String, ReceiverOptions)
methods.
- Specified by:
address
in interfaceReceiver
- Returns:
- the address that this
Receiver
is sending to. - Throws:
ClientException
- if an error occurs while obtaining theReceiver
address.
-
source
public Source source() throws ClientException
Description copied from interface:Receiver
-
target
public Target target() throws ClientException
Description copied from interface:Receiver
-
queuedDeliveries
public long queuedDeliveries() throws ClientException
Description copied from interface:Receiver
Returns the number of Deliveries that are currently held in theReceiver
delivery queue. This number is likely to change immediately following the call as more deliveries arrive but can be used to determine if any pendingDelivery
work is ready.- Specified by:
queuedDeliveries
in interfaceReceiver
- Returns:
- the number of deliveries that are currently buffered locally.
- Throws:
ClientException
- if an error occurs while attempting to fetch the queue count.
-
-