Something went wrong on our end
-
Terry D. Norbraten authoredTerry D. Norbraten authored
ArrivalProcessOpenDis7.java 4.35 KiB
package SimkitOpenDis7Examples;
import edu.nps.moves.dis7.enumerations.VariableRecordType;
import edu.nps.moves.dis7.utilities.DisChannel;
import simkit.SimEntityBase;
import simkit.random.RandomVariate;
/**
* ArrivalProcess event graph with openDis7 output PDU messages added.
* One of the simplest non-trivial Event Graph models. A series of Arrival
* events is scheduled based on an inter arrival time random variate. The state
* variable, simply counts the number of these arrivals.
*
* @see SimkitOpenDis7Examples.SimpleServer
* @see SimkitOpenDis7Examples.run.RunSimpleServerOpenDis7
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/ArrivalProcessOpenDis7EventGraph.png" target="_blank">ArrivalProcessDisPdu.png</a>
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/SimpleServerComponentEventGraph.png" target="_blank">SimpleServerComponentEventGraph.png</a>
* @author abuss@nps.edu
* @author brutzman@nps.edu
*/
public class ArrivalProcessOpenDis7 extends SimEntityBase {
/** Not a sim parameter */
private final DisChannel disChannel;
/**
* Generates interarrival times
*/
private RandomVariate interarrivalTimeGenerator;
/**
* State variable that counts the number of Arrival events
*/
protected int numberArrivals;
/**
* Instantiate an ArrivalProcess with the given interarrivalTimeGenerator
*
* @param interarrivalTimeGenerator Given RandomVariate for interarrival
* times
*/
public ArrivalProcessOpenDis7(RandomVariate interarrivalTimeGenerator) {
this();
this.interarrivalTimeGenerator = interarrivalTimeGenerator;
}
/**
* If the ArrivalProcess is instantiated using the zero-argument
* constructor, be sure the set the interarrivalTimeGenerator with an
* explicit call to its setter method.
*/
public ArrivalProcessOpenDis7() {
disChannel = new DisChannel();
}
/**
* Initialize numberArrivals to 0
*/
@Override
public void reset() {
super.reset();
numberArrivals = 0;
initializeDisChannel();
}
/**
* Schedule the first Arrival event with delay generated by
* interarrivalTimeGenerator
*/
public void doRun() {
firePropertyChange("numberArrivals", getNumberArrivals());
// TODO send simulation management PDUs via DIS channel, announce commencement
waitDelay("Arrival", interarrivalTimeGenerator);
}
/**
* Increment numberArrivals<br>
* Schedule next Arrival event with delay generated by
* interarrivalTimeGenerator
*/
public void doArrival() {
int oldNumberArrivals = getNumberArrivals();
numberArrivals += 1;
firePropertyChange("numberArrivals", oldNumberArrivals, getNumberArrivals());
// TODO announce selected arrivals via DIS channel
waitDelay("Arrival", interarrivalTimeGenerator);
}
/**
* accessor method to get a state variable
* @return the interarrivalTimeGenerator
*/
public RandomVariate getInterarrivalTimeGenerator() {
return interarrivalTimeGenerator;
}
/**
* accessor method to set a state variable
* @param interarrivalTimeGenerator the interarrivalTimeGenerator to set
*/
public void setInterarrivalTimeGenerator(RandomVariate interarrivalTimeGenerator) {
this.interarrivalTimeGenerator = interarrivalTimeGenerator;
}
/**
* accessor method to get a state variable
* @return the numberArrivals
*/
public int getNumberArrivals() {
return numberArrivals;
}
/**
* accessor method to get current DIS channel object
* @return the disChannel
*/
public DisChannel getDisChannel() {
return disChannel;
}
/** Initialize channel setup for OpenDis7 and report a test PDU */
private void initializeDisChannel()
{
disChannel.setUpNetworkInterface();
disChannel.printlnTRACE ("disChannel.getNetworkAddress()=" + disChannel.getNetworkAddress() +
", getNetworkPort()=" + disChannel.getNetworkPort());
disChannel.sendCommentPdu(VariableRecordType.OTHER, getClass().getName() + " initialized");
}
}