|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectrice.pastry.wire.SocketChannelWriter
Class which serves as an "writer" for all of the messages sent across the wire in Pastry. This class serializes and properly formats all messages, and then waits to be called with an available SocketChannel in order to write the message out. If the messagae could not be written in one go, subsequent calls to the write() method will finish writing out the message. This class also maintains an internal queue of messages waiting to be sent across the wire. Calling isEmpty() will tell clients if it is safe to mark the SelectionKey as not being interested in writing.
Field Summary | |
protected WireNodeHandle |
handle
|
protected static byte[] |
MAGIC_NUMBER
the magic number array which is written first |
static int |
MAXIMUM_QUEUE_LENGTH
the maximum length of the queue |
protected java.lang.Object |
pendingMsg
a message that has already been serialized and pulled off of the queue but hasn't been sent |
Constructor Summary | |
SocketChannelWriter(WirePastryNode spn,
SocketCommandMessage msg,
java.nio.channels.SelectionKey key)
Constructor which creates this SocketChannelWriter with a pastry node and an object to write out. |
|
SocketChannelWriter(WirePastryNode spn,
SocketCommandMessage msg,
java.nio.channels.SelectionKey key,
WireNodeHandle wnh)
Constructor which creates this SocketChannelWriter with a pastry node and an object to write out. |
Method Summary | |
void |
enqueue(java.lang.Object o)
Adds an object to this SocketChannelWriter's queue of pending objects to write. |
java.util.Iterator |
getQueue()
Returns the queue of writes for the remote address We are only returning the iterator of the queue because we don't actually want to return the queue, as we need to control the SelectionKey state based on the queue. |
void |
greetingReceived()
called when the greeting has been received, setting that the socket is ready to be used to write data over |
boolean |
isEmpty()
Returns whether or not there are objects in the queue on in writing. |
boolean |
isInterestedInWriting()
Gets the InterestedInWriting attribute of the SocketChannelWriter object |
void |
notifyKilled()
prints out any messages still in queue |
int |
queueSize()
Accessor for the queue size. |
void |
reset(SocketCommandMessage msg)
Resets the SocketChannelWriter, by clearing both the buffer and the queue. |
static java.nio.ByteBuffer |
serialize(java.lang.Object o,
java.nio.ByteBuffer oldBuf)
Method which serializes a given object into a ByteBuffer, in order to prepare it for writing. |
void |
setKey(java.nio.channels.SelectionKey key)
method to re-assign the key if it changes |
boolean |
write(java.nio.channels.SocketChannel sc)
Method which is designed to be called when this writer should write out its data. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static int MAXIMUM_QUEUE_LENGTH
protected static byte[] MAGIC_NUMBER
protected WireNodeHandle handle
protected java.lang.Object pendingMsg
Constructor Detail |
public SocketChannelWriter(WirePastryNode spn, SocketCommandMessage msg, java.nio.channels.SelectionKey key)
spn
- The PastryNode the SocketChannelWriter serversmsg
- first message to sendkey
- the key that this writer should maintainpublic SocketChannelWriter(WirePastryNode spn, SocketCommandMessage msg, java.nio.channels.SelectionKey key, WireNodeHandle wnh)
spn
- The PastryNode the SocketChannelWriter serversmsg
- first message to sendkey
- the key that this writer should maintainwnh
- the WireNodeHandle that this object servicesMethod Detail |
public boolean isInterestedInWriting()
public boolean isEmpty()
public java.util.Iterator getQueue()
public void enqueue(java.lang.Object o)
o
- The object to be written.public void setKey(java.nio.channels.SelectionKey key)
key
- the new keypublic int queueSize()
public void reset(SocketCommandMessage msg)
msg
- The greeting message that should be enqueued firstpublic void greetingReceived()
public boolean write(java.nio.channels.SocketChannel sc) throws java.io.IOException
sc
- The SocketChannel to write to
java.io.IOException
- DESCRIBE THE EXCEPTIONpublic static java.nio.ByteBuffer serialize(java.lang.Object o, java.nio.ByteBuffer oldBuf) throws java.io.IOException
o
- The object to serialize
java.io.IOException
- if there is an errorpublic void notifyKilled()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |