Package org.jcsp.net2
Class Link
java.lang.Object
org.jcsp.net2.Link
- All Implemented Interfaces:
CSProcess
- Direct Known Subclasses:
TCPIPLink
Abstract class representing a Link. This class defines the two processes (Link TX, Link RX) where the network
protocol is of key importance. Specific technology protocols (e.g. TCP/IP) must extend this class, providing the
necessary streams for operation, and also overriding the methods connect, createResources and destroyResources, which
will have specific implementations dependent on the underlying technology. Everything else should operate as defined
in this class.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) final class
The RxLoop for the Link.(package private) final class
The TxLoop for the Link. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected boolean
A flag used to indicate whether the Link is connected or not.private Hashtable
This Hashtable is used to keep track of the current barriers that are connected to this Link.private Hashtable
This Hashtable is used to keep track of the current output channels that are connected to this Link.static int
Link priority in the system.protected int
Link priority for this Link.protected NodeID
The NodeID of the opposite end of the connection.protected DataInputStream
The incoming stream for the connection.private final Any2OneChannel
The channel connected to the Link Tx process.protected DataOutputStream
The outgoing stream for the connection. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract boolean
connect()
Connects to the remote Node.protected abstract boolean
Creates the resources (if any) required for the Node.(package private) void
deRegisterBarrier
(BarrierData data) Unregisters a barrier with the Link(package private) void
deRegisterChannel
(ChannelData data) Unregisters and removes the channel from the Link.protected abstract void
Destroys any used resources.final NodeID
Returns the NodeID of the connected Link.protected final ChannelOutput
Gets the channel that is connected to the Link Tx process.protected final void
lostLink()
Marks the Link as lost within the LinkManager.(package private) void
registerBarrier
(BarrierData data) Registers a barrier with the Link(package private) void
registerChannel
(ChannelData data) Register a channel with the Link.final boolean
Registers the Link with the LinkManagerfinal void
run()
The run method for the process.
-
Field Details
-
connected
protected boolean connectedA flag used to indicate whether the Link is connected or not. This flag is set normally during the connect operation, but may be done within the constructor. If not set during the constructor, and if connect is not called to set the flag to true, then when the process is run connect will be called. -
rxStream
The incoming stream for the connection. This must be created by the specific protocol implementation. -
txStream
The outgoing stream for the connection. This must be created by the specific protocol implementation. -
txChannel
The channel connected to the Link Tx process. This is used by channels, barriers, and the Link Rx to send messages to the node this Link is connected to. -
remoteID
The NodeID of the opposite end of the connection. This should be set either during construction, or during the connect method of a child class. -
LINK_PRIORITY
public static int LINK_PRIORITYLink priority in the system. This is a publicly accessible value that can be set by a user. -
priority
protected int priorityLink priority for this Link. This is exposed to child classes to allow specific Link priorities for different Link types. -
connectedOutputs
This Hashtable is used to keep track of the current output channels that are connected to this Link. In the outcome of a connection failure to the remote Node, the Link uses this table to notify all registered output ends, allowing them to throw an exception instead of deadlocking. -
connectedBarriers
This Hashtable is used to keep track of the current barriers that are connected to this Link. In the outcome of a connection failure to the remote Node, the Link uses this table to notify all registered barriers, allowing them to throw an exception instead of deadlocking.
-
-
Constructor Details
-
Link
public Link()
-
-
Method Details
-
getRemoteNodeID
Returns the NodeID of the connected Link.- Returns:
- NodeID of the connected Link.
-
getTxChannel
Gets the channel that is connected to the Link Tx process.- Returns:
- The ChannelOutput used to communicate with the Link Tx.
-
connect
Connects to the remote Node. This must be overridden by a child class implementation.- Returns:
- True if the connection succeeds, false otherwise.
- Throws:
JCSPNetworkException
- Thrown if the connection fails.
-
createResources
Creates the resources (if any) required for the Node. These could be set up during construction, but if not, this method is called immediately after connect within the run method. Child implementations should override this method.- Returns:
- True if resources were created OK, false otherwise.
- Throws:
JCSPNetworkException
- Thrown if a problem occurs creating the resources.
-
destroyResources
protected abstract void destroyResources()Destroys any used resources. This is called whenever a Node fails. Particular implementations must overwrite this method. -
registerLink
public final boolean registerLink()Registers the Link with the LinkManager- Returns:
- True if Link was registered, false otherwise.
-
lostLink
protected final void lostLink()Marks the Link as lost within the LinkManager. -
registerChannel
Register a channel with the Link.- Parameters:
data
- The ChannelData object representing the channel
-
deRegisterChannel
Unregisters and removes the channel from the Link.- Parameters:
data
- The ChannelData object representing the channel.
-
registerBarrier
Registers a barrier with the Link- Parameters:
data
- The barrier to register with the Link
-
deRegisterBarrier
Unregisters a barrier with the Link- Parameters:
data
- The BarrierData representing the Barrier to unregister
-
run
public final void run()The run method for the process. This will connect the Link (if necessary) and then start the Tx and Rx Loops.
-