You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.2 KiB
Java
127 lines
3.2 KiB
Java
4 years ago
|
// MUXPdu.java
|
||
|
|
||
|
package protocol; // protocol package
|
||
|
|
||
|
import support.*; // import Jasper support classes
|
||
|
|
||
|
/**
|
||
|
This is the class that defines (de)multiplexer protocol messages.
|
||
|
|
||
|
@author Kenneth J. Turner
|
||
|
@version 1.0 (23rd July 2010, KJT): initial version
|
||
|
*/
|
||
|
public class MUXPdu extends PDU {
|
||
|
|
||
|
/** Protocol PDU type */
|
||
|
public final static String BLANK = "-";
|
||
|
|
||
|
/** Protocol PDU type */
|
||
|
public final static String TYPE = "DT";
|
||
|
|
||
|
/** Protocol SDU list */
|
||
|
private String sduList[];
|
||
|
|
||
|
/**
|
||
|
Constructor for a (de)multiplexer PDU for the required number of SDUs.
|
||
|
*/
|
||
|
public MUXPdu() {
|
||
|
super(TYPE); // construct with type
|
||
|
sduList = new String[MUXService.serviceCount]; // initialise SDU list
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Get the PDU list of SDUs as a comma-separated string.
|
||
|
|
||
|
@return comma-separated list of SDUs
|
||
|
*/
|
||
|
public String getData() {
|
||
|
String dataList = ""; // initialise SDU data list
|
||
|
for (int i = 0; i < sduList.length; i++) { // go through SDU data
|
||
|
if (i > 0) // not first SDU?
|
||
|
dataList += ","; // append a comma
|
||
|
String data = sduList[i]; // get SDU data
|
||
|
if (data == null) // SDU data missing?
|
||
|
data = BLANK; // set data blank
|
||
|
dataList += data; // append SDU data
|
||
|
}
|
||
|
return(dataList); // return SDU data list
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Return the label for an arrow representing a (de)multiplexer PDU in a time
|
||
|
sequence diagram.
|
||
|
|
||
|
@return PDU label
|
||
|
*/
|
||
|
public String getLabel() {
|
||
|
String label; // declare protocol label
|
||
|
if (MUXProtocol.protocolMode) { // asynchronous?
|
||
|
int first = firstSDU(); // get first SDU label
|
||
|
if (first >= 0) // first SDU known?
|
||
|
label = first + "," + sduList[first]; // set first index and data
|
||
|
else // first SDU unknown
|
||
|
label = "?,?"; // set unknown index and data
|
||
|
}
|
||
|
else // synchronous
|
||
|
label = getData(); // set type and SDU data list
|
||
|
label = type + "(" + label + ")"; // set protocol label
|
||
|
return(label); // return protocol label
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Return SDU for given entity.
|
||
|
|
||
|
@param entity entity index
|
||
|
@return SDU (or null if no such entity)
|
||
|
*/
|
||
|
public String getSDU(int entity) {
|
||
|
return(0 <= entity && entity < sduList.length ? sduList[entity] : null);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Return SDU list.
|
||
|
|
||
|
@return SDU list
|
||
|
*/
|
||
|
public String[] getSDUs() {
|
||
|
return(sduList);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Return index of first available SDU.
|
||
|
|
||
|
@return index of first available SDU (-1 means none)
|
||
|
*/
|
||
|
public int firstSDU() {
|
||
|
int index = -1; // initialise index
|
||
|
for (int i = 0; i < sduList.length; i++) { // go through SDU data
|
||
|
if (sduList[i] != null) { // data present?
|
||
|
index = i; // note data available
|
||
|
break; // leave loop
|
||
|
}
|
||
|
}
|
||
|
return(index); // return index
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Convert PDU to string.
|
||
|
|
||
|
@return PDU as string
|
||
|
*/
|
||
|
public String toString() {
|
||
|
return("PDU <Type " + type + ", Data <" + getData() + ">>");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Set source SDU data.
|
||
|
|
||
|
@param source source entity index
|
||
|
@param sdu source data
|
||
|
*/
|
||
|
public void setSDU(int source, String sdu) {
|
||
|
sduList[source] = sdu; // set SDU data for source
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|