public abstract class Link extends java.lang.Object implements CSProcess
This class is an abstract class that all JCSP.NET protocol implementations
must implement. Concrete implementations of the Link class
must provide the mechanism for sending data to remote Nodes and receiving
data back. When a concrete implementation of link is initiated by calling
the run() method, it must inititate a handshaking procedure
and call certain protected methods in this abstract class.
During handshaking, the
runTests(ChannelInput, ChannelOutput, boolean) should be called.
See the documentation for this method for a full explanation.
When a Link receives an object from over the network
it should deliver the object to its destination by calling the
deliverReceivedObject(Object) method.
Link implementations obtain objects to send to the remote
Node by reading from the protected txChannel object.
| Modifier and Type | Field and Description |
|---|---|
protected NodeID |
remoteNodeID
The remote NodeID.
|
protected boolean |
sendNodeID
True if the subclass must pass the ID of this node to the peer node.
|
protected FilteredAny2OneChannel |
txChannel
The channel used for TX over the link.
|
| Constructor and Description |
|---|
Link(ProtocolID protocolID,
boolean client,
boolean connected)
A constructor that must be called by sub-classes.
|
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
connect()
Establishes a connection to the peer node.
|
protected boolean |
createResources()
Allocates the resources necessary for the actual connection.
|
protected void |
deliverReceivedObject(java.lang.Object obj)
A protected method for concrete implementations of this class to call when they received a an object from the remote Node.
|
protected void |
destroyResources()
Deallocates any resources allocated by
createResources. |
boolean |
equals(java.lang.Object o)
Compares another object with this object.
|
protected boolean |
exchangeNodeIDs()
Sends the ID of this node to the peer process and receives its ID.
|
long |
getPingTime()
A public accessor for obtaining the ping time between the local Node and this Link's remote Node.
|
protected ProtocolID |
getProtocolID()
A protected accessor for obtaining the identifier of the protocol implementing this Link object.
|
protected boolean[] |
getReadSequence(boolean client)
This is used by concrete
Link implementations before calling the runTests method. |
protected NodeID |
getRemoteNodeID()
Returns the other computer's ID.
|
protected ChannelOutput |
getTxChannel()
Returns channel to use for transmitting.
|
int |
hashCode()
Returns an
int hash code for this Link. |
NodeID |
obtainNodeID()
This returns the
NodeID of the remote Node to which this
link is connected. |
boolean |
performedPingTest()
A public accessor for enquiring as to whether this
Link object has performed a ping test. |
long |
ping()
Performs a ping on the link.
|
protected boolean |
readLinkDecision()
Reads a boolean link decision as to whether this node can keep or discard the link.
|
protected java.lang.Object |
readTestObject()
Reads a test object from the underlying connection.
|
void |
run()
Main process for the link, containing generic code that makes calls on
the abstract methods that should be implemented by a concrete subclass.
|
protected void |
runTxRxLoop()
Performs send and receive actions for the link exchanging data with the peer node.
|
protected void |
waitForReplies(int numAcknowledgements)
Waits for
numRepliesOutstanding instances of LinkLost
to arrive from the txChannel. |
protected void |
writeLinkDecision(boolean use)
Writes a boolean link decision as to whether the other node has the option to keep or discard
the link.
|
protected void |
writeTestObject(java.lang.Object obj)
Writes a test object to the underlying connection.
|
protected FilteredAny2OneChannel txChannel
getTxChannel() to obtain the channel.
Protocol implementations should NOT alter any of the
filters on this channel.protected NodeID remoteNodeID
exchangeNodeIDs.protected boolean sendNodeID
public Link(ProtocolID protocolID, boolean client, boolean connected)
A constructor that must be called by sub-classes.
protocolID - A ProtocolID object for identifying the protocol that is implementing the Link.client - Indicates whether this is the client (true) or server (false) end of the connection.connected - true if a connection is already established; otherwise connect() will later be calledprotected boolean connect()
throws java.lang.Exception
Establishes a connection to the peer node. Called when the process is started unless
connected was true in the constructor. This is called internally from this
class' run method - do not call it.
java.lang.Exceptionprotected boolean createResources()
throws java.lang.Exception
Allocates the resources necessary for the actual connection. Called as the first part
of the handshaking process. This is called internally from the class' handshake
method - do not call it.
java.lang.Exceptionprotected void destroyResources()
throws java.lang.Exception
Deallocates any resources allocated by createResources. Called in the event of
an error during handshaking or when the link is dropped. An implementation of this method
must cope with being called multiple times without an intervening call to createResources.
java.lang.Exceptionprotected boolean exchangeNodeIDs()
throws java.lang.Exception
Sends the ID of this node to the peer process and receives its ID. It is only necessary to
send this node's ID if sendNodeID is true. The remoteNodeID
attribute should be set to the ID of the remote node if received. This is called internally
during handshaking - do not call it.
java.lang.Exceptionprotected void runTxRxLoop()
throws java.lang.Exception
run method - do not call it directly.java.lang.Exceptionprotected void waitForReplies(int numAcknowledgements)
throws java.lang.Exception
numRepliesOutstanding instances of LinkLost
to arrive from the txChannel. This is called internally from this class'
run method - do not call it directly.numRepliesOutstanding - LinkLost instances to wait for.java.lang.Exceptionprotected void writeTestObject(java.lang.Object obj)
throws java.lang.Exception
readTestObject
at the remote node.obj - object to be writtenjava.lang.Exceptionprotected java.lang.Object readTestObject()
throws java.lang.Exception
writeTestObject
at the peer node.java.lang.Exceptionprotected void writeLinkDecision(boolean use)
throws java.lang.Exception
readLinkDecision at the peer node.use - decision resultjava.lang.Exceptionprotected boolean readLinkDecision()
throws java.lang.Exception
writeLinkDecision at the peer node.java.lang.Exceptionprotected NodeID getRemoteNodeID()
protected ProtocolID getProtocolID()
ProtocolID of the protocol implementing this Link.protected ChannelOutput getTxChannel()
protected void deliverReceivedObject(java.lang.Object obj)
obj - the object to deliver.public long getPingTime()
long.public long ping()
public boolean performedPingTest()
A public accessor for enquiring as to whether this Link object has performed a ping test.
true iff a ping test has been performed.protected boolean[] getReadSequence(boolean client)
This is used by concrete Link implementations before calling the runTests method.
When tests are run, a series of messages are exchanged between both sides of the link. This allows
the link to perform its tests using a single thread.
client - a boolean indicating whether this Link object is the client side of the link.
If this object is the client then the parameter should be true.boolean values indicating the sequence of when to read and when to transmit.public final boolean equals(java.lang.Object o)
Compares another object with this object. This implementation
returns true iff the supplied object is the same
instance object as this object.
equals in class java.lang.Objecto - an object to compare with this object.true iff the parameter equals this object.public final int hashCode()
Returns an int hash code for this Link.
The current implementation just uses the instance from Object.
hashCode in class java.lang.Objectint hash code.public final void run()
Main process for the link, containing generic code that makes calls on
the abstract methods that should be implemented by a concrete subclass.
The subclass will be required to connect() if it hasn't
done so, perform handshaking, runTxRxLoop() and then
waitForReplies() to acknowledge link termination.
public final NodeID obtainNodeID()
This returns the NodeID of the remote Node to which this
link is connected. If a connection has not already been established,
this method may connect to the remote Node and request its
NodeID and then drop the connection.
NodeID object.Copyright © 1996–2022. All rights reserved.