|
JXTA | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectnet.jxta.impl.pipe.NonBlockingOutputPipe
class NonBlockingOutputPipe
An implementation of Ouput Pipe which sends messages on the pipe
asynchronously. The send()
method for this implementation will
never block.
Nested Class Summary | |
---|---|
(package private) static class |
NonBlockingOutputPipe.WorkerState
Tracks the state of our worker thread. |
Constructor Summary | |
---|---|
NonBlockingOutputPipe(PeerGroup peerGroup,
PipeResolver pipeResolver,
PipeAdvertisement pAdv,
ID destPeer,
Set<? extends ID> peers)
Create a new output pipe |
Method Summary | |
---|---|
void |
close()
close the pipe |
protected void |
finalize()
|
PipeAdvertisement |
getAdvertisement()
Gets the pipe advertisement |
String |
getName()
Gets the pipe name |
ID |
getPipeID()
Gets the pipe id |
String |
getType()
Gets the pipe type |
boolean |
isClosed()
Returns true if this pipe is closed and no longer
accepting messages to be sent. |
protected EndpointAddress |
mkAddress(ID destPeer,
ID pipeID)
Convenience method for constructing a peer endpoint address from its peer id |
boolean |
pipeNAKEvent(PipeResolver.Event event)
A NAK Event was received for this pipe |
boolean |
pipeResolveEvent(PipeResolver.Event event)
Pipe Resolve event |
void |
run()
Sends the messages. |
boolean |
send(Message msg)
Send a message through the pipe WARNING: The message object used when sending a pipe message should not be reused or modified after the OutputPipe.send(Message) call is
made. |
Methods inherited from class java.lang.Object |
---|
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public NonBlockingOutputPipe(PeerGroup peerGroup, PipeResolver pipeResolver, PipeAdvertisement pAdv, ID destPeer, Set<? extends ID> peers)
peerGroup
- peergroup we are working in.pipeResolver
- the piperesolver this pipe is bound to.pAdv
- advertisement for the pipe we are supporting.destPeer
- the peer this pipe is currently bound to.peers
- the set of peers we allow this pipe to be bound to.Method Detail |
---|
protected void finalize() throws Throwable
finalize
in class Object
Throwable
public void close()
close
in interface OutputPipe
public boolean isClosed()
true
if this pipe is closed and no longer
accepting messages to be sent. The pipe should be discarded.
isClosed
in interface OutputPipe
true
if this pipe is closed, otherwise
false
.public final String getType()
getType
in interface OutputPipe
public final ID getPipeID()
getPipeID
in interface OutputPipe
public final String getName()
getName
in interface OutputPipe
public final PipeAdvertisement getAdvertisement()
getAdvertisement
in interface OutputPipe
public boolean send(Message msg) throws IOException
OutputPipe.send(Message)
call is
made. Concurrent modification of messages will produce unexpected result.
send
in interface OutputPipe
msg
- is the PipeMessage to be sent.
true
if the message has been sent otherwise
false
. false
. is commonly returned for
non-error related congestion, meaning that you should be able to send
the message after waiting some amount of time.
IOException
- output pipe errorpublic void run()
STATE | Activity |
---|---|
ACQUIREMESSENGER | Acquire a messenger to the specified destination peer. If a messenger is acquired, then go to SENDMESSAGES state otherwise go to STARTMIGRATE.|
SENDMESSAGES | Send messages until queue is closed and all messages have
been sent. Go to state CLOSED when done. If the messenger
becomes closed then go to ACQUIREMESSENGER. IDLEWORKERLINGER
milliseconds then the worker thread will exit. It will only be
restarted if another message is eventually enqueued. |
STARTVERIFY | Starts a verification query(s) to the destination peer. This
state is activated after
PipeServiceImpl.VERIFYINTERVAL milliseconds of
sending messages. The query responses will be tracked in the
PENDINGVERIFY state. |
STARTMIGRATE | Starts a query(s) for peers listening on this pipe. The query responses will be tracked in the PENDINGMIGRATE state. |
PENDINGVERIFY | Issues query messages to verify that the destination peer is
still listening on the pipe. Queries are issued every
QUERYINTERVAL milliseconds. If a positive response
is received, go to state ACQUIREMESSENGER. If no response
is received within QUERYTIMEOUT milliseconds or a
negative response is received then go to state
STARTMIGRATE. |
PENDINGMIGRATE | Issues query messages to find a new destination peer.
Queries are issued every QUERYINTERVAL milliseconds.
If a positive response is received, go to state
ACQUIREMESSENGER. If no positive response from an
eligible peer is received within QUERYTIMEOUT
milliseconds go to state CLOSED. |
CLOSED | Exit the worker thread. |
run
in interface Runnable
protected EndpointAddress mkAddress(ID destPeer, ID pipeID)
destPeer
- the desitnation peerpipeID
- the pipe to put in the param field.
public boolean pipeNAKEvent(PipeResolver.Event event)
pipeNAKEvent
in interface PipeResolver.Listener
event
- event the PipeResolver Event
public boolean pipeResolveEvent(PipeResolver.Event event)
pipeResolveEvent
in interface PipeResolver.Listener
event
- event the PipeResolver Event
|
JXSE | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |