|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.javagroups.stack.Protocol
The Protocol class provides a set of common services for protocol layers. Each layer has to
be a subclass of Protocol and override a number of methods (typically just up()
,
Down
and getName
. Layers are stacked in a certain order to form
a protocol stack. Events are passed from lower
layers to upper ones and vice versa. E.g. a Message received by the UDP layer at the bottom
will be passed to its higher layer as an Event. That layer will in turn pass the Event to
its layer and so on, until a layer handles the Message and sends a response or discards it,
the former resulting in another Event being passed down the stack.
Each layer has 2 FIFO queues, one for up Events and one for down Events. When an Event is
received by a layer (calling the internal upcall ReceiveUpEvent
), it is placed
in the up-queue where it will be retrieved by the up-handler thread which will invoke method
Up
of the layer. The same applies for Events traveling down the stack. Handling
of the up-handler and down-handler threads and the 2 FIFO queues is donw by the Protocol
class, subclasses will almost never have to override this behavior.
The important thing to bear in mind is that Events have to passed on between layers in FIFO order which is guaranteed by the Protocol implementation and must be guranteed by subclasses implementing their on Event queuing.
Note that each class implementing interface Protocol MUST provide an empty, public constructor !
Field Summary | |
protected org.javagroups.stack.DownHandler |
down_handler
|
protected Protocol |
down_prot
|
protected Queue |
down_queue
|
protected boolean |
down_thread
|
protected ProtocolObserver |
observer
|
protected java.util.Properties |
props
|
protected ProtocolStack |
stack
|
protected org.javagroups.stack.UpHandler |
up_handler
|
protected Protocol |
up_prot
|
protected Queue |
up_queue
|
protected boolean |
up_thread
|
Constructor Summary | |
Protocol()
|
Method Summary | |
void |
destroy()
This method is called on a Channel.close() . |
void |
down(Event evt)
An event is to be sent down the stack. |
Protocol |
getDownProtocol()
|
Queue |
getDownQueue()
|
abstract java.lang.String |
getName()
|
java.util.Properties |
getProperties()
|
Protocol |
getUpProtocol()
|
Queue |
getUpQueue()
|
void |
init()
Called after instance has been created (null constructor) and before protocol is started. |
void |
passDown(Event evt)
Causes the event to be forwarded to the next layer down in the hierarchy.Typically called by the implementation of Down (when done). |
void |
passUp(Event evt)
Causes the event to be forwarded to the next layer up in the hierarchy. |
java.util.Vector |
providedDownServices()
List of events that are provided to layers below (they will be handled when sent down from below). |
java.util.Vector |
providedUpServices()
List of events that are provided to layers above (they will be handled when sent down from above). |
protected void |
receiveDownEvent(Event evt)
Internal method, should not be called by clients. |
protected void |
receiveUpEvent(Event evt)
Internal method, should not be called by clients. |
java.util.Vector |
requiredDownServices()
List of events that are required to be answered by some layer below. |
java.util.Vector |
requiredUpServices()
List of events that are required to be answered by some layer above. |
void |
setDownProtocol(Protocol down_prot)
|
void |
setObserver(ProtocolObserver observer)
|
boolean |
setProperties(java.util.Properties props)
Configures the protocol initially. |
boolean |
setPropertiesInternal(java.util.Properties props)
Called by Configurator. |
void |
setProtocolStack(ProtocolStack stack)
|
void |
setUpProtocol(Protocol up_prot)
|
void |
start()
This method is called on a Channel.connect(String) . |
void |
startDownHandler()
Used internally. |
void |
startUpHandler()
Used internally. |
void |
stop()
This method is called on a Channel.disconnect() . |
void |
stopInternal()
Used internally. |
void |
up(Event evt)
An event was received from the layer below. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected java.util.Properties props
protected Protocol up_prot
protected Protocol down_prot
protected ProtocolStack stack
protected Queue up_queue
protected Queue down_queue
protected org.javagroups.stack.UpHandler up_handler
protected org.javagroups.stack.DownHandler down_handler
protected ProtocolObserver observer
protected boolean down_thread
protected boolean up_thread
Constructor Detail |
public Protocol()
Method Detail |
public boolean setProperties(java.util.Properties props)
"loopback=false;unicast_inport=4444"
public boolean setPropertiesInternal(java.util.Properties props)
public java.util.Properties getProperties()
public void setObserver(ProtocolObserver observer)
public void init() throws java.lang.Exception
java.lang.Exception
- Thrown if protocol cannot be initialized successfully. This will cause the
ProtocolStack to fail, so the channel constructor will throw an exceptionpublic void start() throws java.lang.Exception
Channel.connect(String)
. Starts work.
Protocols are connected and queues are ready to receive events.
Will be called from bottom to top. This call will replace
the START and START_OK events.
java.lang.Exception
- Thrown if protocol cannot be started successfully. This will cause the ProtocolStack
to fail, so Channel.connect(String)
will throw an exceptionpublic void stop()
Channel.disconnect()
. Stops work (e.g. by closing multicast socket).
Will be called from top to bottom. This means that at the time of the method invocation the
neighbor protocol below is still working. This method will replace the
STOP, STOP_OK, CLEANUP and CLEANUP_OK events. The ProtocolStack guarantees that
when this method is called all messages in the down queue will have been flushed
public void destroy()
Channel.close()
. Do some cleanup; after the call the VM will terminate
public Queue getUpQueue()
public Queue getDownQueue()
public java.util.Vector requiredUpServices()
public java.util.Vector requiredDownServices()
public java.util.Vector providedUpServices()
public java.util.Vector providedDownServices()
public abstract java.lang.String getName()
public Protocol getUpProtocol()
public Protocol getDownProtocol()
public void setUpProtocol(Protocol up_prot)
public void setDownProtocol(Protocol down_prot)
public void setProtocolStack(ProtocolStack stack)
public void startUpHandler()
public void startDownHandler()
public void stopInternal()
protected void receiveUpEvent(Event evt)
protected void receiveDownEvent(Event evt)
public void passUp(Event evt)
Up
(when done).
public void passDown(Event evt)
Down
(when done).
public void up(Event evt)
passDown()
or c) the event (or another event) is sent up
the stack using passUp()
.
public void down(Event evt)
passDown()
. In case of a GET_ADDRESS event (which tries to
retrieve the stack's address from one of the bottom layers), the layer may need to send
a new response event back up the stack using passUp()
.
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |