Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
NetworkedGraphicsMV3500
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Model registry
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Savage
NetworkedGraphicsMV3500
Commits
23bf42af
Commit
23bf42af
authored
3 years ago
by
Brutzman, Don
Browse files
Options
Downloads
Patches
Plain Diff
Add variety of utility methods
parent
11e4fde5
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
examples/src/OpenDis7Examples/SimulationManager.java
+212
-17
212 additions, 17 deletions
examples/src/OpenDis7Examples/SimulationManager.java
with
212 additions
and
17 deletions
examples/src/OpenDis7Examples/SimulationManager.java
+
212
−
17
View file @
23bf42af
...
@@ -35,6 +35,8 @@ POSSIBILITY OF SUCH DAMAGE.
...
@@ -35,6 +35,8 @@ POSSIBILITY OF SUCH DAMAGE.
package
OpenDis7Examples
;
package
OpenDis7Examples
;
import
edu.nps.moves.dis7.pdus.CreateEntityPdu
;
import
edu.nps.moves.dis7.pdus.RemoveEntityPdu
;
import
edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface
;
import
edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -42,17 +44,18 @@ import java.util.ArrayList;
...
@@ -42,17 +44,18 @@ import java.util.ArrayList;
* Manage overall simulation choreography for a DIS exercise.
* Manage overall simulation choreography for a DIS exercise.
* TODO once operation is working satisfactorily, this class will be moved into the open-dis7-java distribution utilities.
* TODO once operation is working satisfactorily, this class will be moved into the open-dis7-java distribution utilities.
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/specifications/README.md" target="_blank">Networked Graphics MV3500, Specification Documents, IEEE and SISO</a>
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/specifications/README.md" target="_blank">Networked Graphics MV3500, Specification Documents, IEEE and SISO</a>
* @see <a href="https://ieeexplore.ieee.org/document/6387564" target="_blank">1278.1-2012. IEEE Standard for Distributed Interactive Simulation (DIS) - Application Protocols</a>
* @see <a href="https://ieeexplore.ieee.org/document/6387564" target="_blank">1278.1-2012. IEEE Standard for Distributed Interactive Simulation (DIS) - Application Protocols</a>
5.6.3 The simulation management computer
* @see <a href="https://ieeexplore.ieee.org/document/587529" target="_blank">1278.3-1996. IEEE Recommended Practice for Distributed Interactive Simulation - Exercise Management and Feedback</a>
* @see <a href="https://ieeexplore.ieee.org/document/587529" target="_blank">1278.3-1996. IEEE Recommended Practice for Distributed Interactive Simulation - Exercise Management and Feedback</a>
* @author brutzman
* @author brutzman
*/
*/
public
class
SimulationManager
public
class
SimulationManager
{
{
private
DisThreadedNetworkInterface
disThreadedNetworkInterface
;
private
DisThreadedNetworkInterface
disThreadedNetworkInterface
;
private
ArrayList
<
RecordType
>
entityRecordList
=
new
ArrayList
<>();
private
static
ArrayList
<
RecordType
>
entityRecordList
=
new
ArrayList
<>();
private
ArrayList
<
RecordType
>
hostRecordList
=
new
ArrayList
<>();
private
static
ArrayList
<
RecordType
>
hostRecordList
=
new
ArrayList
<>();
private
ArrayList
<
RecordType
>
applicationRecordList
=
new
ArrayList
<>();
private
static
ArrayList
<
RecordType
>
applicationRecordList
=
new
ArrayList
<>();
private
String
descriptor
=
new
String
();
private
String
descriptor
=
new
String
();
private
static
int
hostID
=
0
;
private
String
TRACE_PREFIX
=
"["
+
(
SimulationManager
.
class
.
getSimpleName
())
+
"] "
;
private
String
TRACE_PREFIX
=
"["
+
(
SimulationManager
.
class
.
getSimpleName
())
+
"] "
;
...
@@ -62,7 +65,8 @@ public class SimulationManager
...
@@ -62,7 +65,8 @@ public class SimulationManager
*/
*/
public
SimulationManager
(
String
newDescriptor
)
public
SimulationManager
(
String
newDescriptor
)
{
{
this
.
descriptor
=
newDescriptor
;
if
(
newDescriptor
!=
null
)
descriptor
=
newDescriptor
.
trim
();
}
}
/**
/**
* Object constructor
* Object constructor
...
@@ -122,8 +126,10 @@ public class SimulationManager
...
@@ -122,8 +126,10 @@ public class SimulationManager
{
{
private
int
id
=
-
1
;
private
int
id
=
-
1
;
private
String
name
=
new
String
();
private
String
name
=
new
String
();
private
String
alias
=
new
String
();
private
String
description
=
new
String
();
private
String
description
=
new
String
();
private
String
reference
=
new
String
();
private
String
reference
=
new
String
();
private
boolean
isHostType
=
false
;
/**
/**
* Constructor for new record
* Constructor for new record
...
@@ -138,6 +144,7 @@ public class SimulationManager
...
@@ -138,6 +144,7 @@ public class SimulationManager
this
.
name
=
name
;
this
.
name
=
name
;
this
.
description
=
description
;
this
.
description
=
description
;
this
.
reference
=
reference
;
this
.
reference
=
reference
;
// TODO create alias: if IP address then check for hostname, and vice versa
}
}
/**
/**
* Utility constructor for new record, description and reference remain blank
* Utility constructor for new record, description and reference remain blank
...
@@ -150,6 +157,22 @@ public class SimulationManager
...
@@ -150,6 +157,22 @@ public class SimulationManager
this
.
name
=
name
;
this
.
name
=
name
;
this
.
description
=
""
;
this
.
description
=
""
;
this
.
reference
=
""
;
this
.
reference
=
""
;
// TODO create alias: if IP address then check for hostname, and vice versa
}
/**
* Utility constructor for new record, description and reference remain blank
* @param id identifying number
* @param name common name
* @param isHostType
*/
public
RecordType
(
int
id
,
String
name
,
boolean
isHostType
)
{
this
.
id
=
id
;
this
.
name
=
name
;
this
.
description
=
""
;
this
.
reference
=
""
;
this
.
isHostType
=
isHostType
;
// TODO create alias: if IP address then check for hostname, and vice versa
}
}
/**
/**
...
@@ -171,9 +194,11 @@ public class SimulationManager
...
@@ -171,9 +194,11 @@ public class SimulationManager
/**
/**
* @param newID the id to set
* @param newID the id to set
* @return same object to permit progressive setters
*/
*/
public
void
setId
(
int
newID
)
{
public
RecordType
setId
(
int
newID
)
{
this
.
id
=
newID
;
this
.
id
=
newID
;
return
this
;
}
}
/**
/**
...
@@ -185,9 +210,11 @@ public class SimulationManager
...
@@ -185,9 +210,11 @@ public class SimulationManager
/**
/**
* @param newName the name to set
* @param newName the name to set
* @return same object to permit progressive setters
*/
*/
public
void
setName
(
String
newName
)
{
public
RecordType
setName
(
String
newName
)
{
this
.
name
=
newName
;
this
.
name
=
newName
;
return
this
;
}
}
/**
/**
...
@@ -199,9 +226,11 @@ public class SimulationManager
...
@@ -199,9 +226,11 @@ public class SimulationManager
/**
/**
* @param newDescription the description to set
* @param newDescription the description to set
* @return same object to permit progressive setters
*/
*/
public
void
setDescription
(
String
newDescription
)
{
public
RecordType
setDescription
(
String
newDescription
)
{
this
.
description
=
newDescription
;
this
.
description
=
newDescription
;
return
this
;
}
}
/**
/**
...
@@ -213,9 +242,43 @@ public class SimulationManager
...
@@ -213,9 +242,43 @@ public class SimulationManager
/**
/**
* @param newReference the reference to set
* @param newReference the reference to set
* @return same object to permit progressive setters
*/
*/
public
void
setReference
(
String
newReference
)
{
public
RecordType
setReference
(
String
newReference
)
{
this
.
reference
=
newReference
;
this
.
reference
=
newReference
;
return
this
;
}
/**
* @return the alias
*/
public
String
getAlias
()
{
return
alias
;
}
/**
* @param alias the alias to set
* @return same object to permit progressive setters
*/
public
RecordType
setAlias
(
String
alias
)
{
this
.
alias
=
alias
;
return
this
;
}
/**
* Does record represent a network address
* @return whether record is a network address
*/
public
boolean
isNetworkAddress
()
{
return
isHostType
;
}
/**
* Set whether record represents a network address
* @param isAddress the isAddress to set
*/
public
void
setNetworkAddress
(
boolean
isAddress
)
{
this
.
isHostType
=
isAddress
;
}
}
}
}
...
@@ -374,12 +437,21 @@ public class SimulationManager
...
@@ -374,12 +437,21 @@ public class SimulationManager
/**
/**
* Set the disThreadedNetworkInterface singleton to match other classes
* Set the disThreadedNetworkInterface singleton to match other classes
* @param disThreadedNetworkInterface the disThreadedNetworkInterface to set
* @param disThreadedNetworkInterface the disThreadedNetworkInterface to set
* @return same object to permit progressive setters
*/
*/
public
void
setDisThreadedNetworkInterface
(
DisThreadedNetworkInterface
disThreadedNetworkInterface
)
{
public
SimulationManager
setDisThreadedNetworkInterface
(
DisThreadedNetworkInterface
disThreadedNetworkInterface
)
{
this
.
disThreadedNetworkInterface
=
disThreadedNetworkInterface
;
this
.
disThreadedNetworkInterface
=
disThreadedNetworkInterface
;
return
this
;
}
/**
* Check for disThreadedNetworkInterface
*/
protected
boolean
hasDisThreadedNetworkInterface
()
{
return
(
this
.
disThreadedNetworkInterface
!=
null
);
}
}
/**
/**
* C
onstructor for
disThreadedNetworkInterface
* C
reate
disThreadedNetworkInterface
*/
*/
protected
void
createDisThreadedNetworkInterface
()
protected
void
createDisThreadedNetworkInterface
()
{
{
...
@@ -424,13 +496,136 @@ public class SimulationManager
...
@@ -424,13 +496,136 @@ public class SimulationManager
/**
/**
* Set new simple descriptor (such as parent class name) for this SimulationManager, used in trace statements
* Set new simple descriptor (such as parent class name) for this SimulationManager, used in trace statements
* @param newDescriptor simple descriptor name for this interface
* @param newDescriptor simple descriptor name for this interface
*/
* @return same object to permit progressive setters */
public
void
setDescriptor
(
String
newDescriptor
)
public
SimulationManager
setDescriptor
(
String
newDescriptor
)
{
if
(
newDescriptor
!=
null
)
this
.
descriptor
=
newDescriptor
.
trim
();
TRACE_PREFIX
=
"["
+
DisThreadedNetworkInterface
.
class
.
getSimpleName
()
+
" "
+
descriptor
+
"] "
;
return
this
;
}
/**
* Reset descriptor
* @return same object to permit progressive setters */
public
SimulationManager
clearDescriptor
()
{
setDescriptor
(
""
);
return
this
;
}
/**
* clear all lists
* @return same object to permit progressive setters*/
public
SimulationManager
clearAll
()
{
entityRecordList
.
clear
();
hostRecordList
.
clear
();
applicationRecordList
.
clear
();
clearDescriptor
();
return
this
;
}
/**
* Add entity to simulation list, if this is first occurrence
* @param newEntity new entity to add
* @return same object to permit progressive setters*/
public
SimulationManager
addEntity
(
RecordType
newEntity
)
{
if
(!
entityRecordList
.
contains
(
newEntity
))
{
// TODO check record type
entityRecordList
.
add
(
newEntity
);
if
(
hasDisThreadedNetworkInterface
())
{
CreateEntityPdu
createEntityPdu
=
new
CreateEntityPdu
();
// TODO set record parameters
getDisThreadedNetworkInterface
().
send
(
createEntityPdu
);
}
else
{
System
.
err
.
println
(
TRACE_PREFIX
+
"addEntity() unable to send CreateEntityPdu since no disThreadedNetworkInterface found"
);
// TODO consider queue for unsent entities
}
}
return
this
;
}
/**
* Remove entity from simulation list, if found
* @param oldEntity old entity to remove
* @return same object to permit progressive setters*/
public
SimulationManager
removeEntity
(
RecordType
oldEntity
)
{
if
(!
entityRecordList
.
contains
(
oldEntity
))
{
// TODO check record type
entityRecordList
.
remove
(
oldEntity
);
if
(
hasDisThreadedNetworkInterface
())
{
RemoveEntityPdu
removeEntityPdu
=
new
RemoveEntityPdu
();
// TODO set record parameters
getDisThreadedNetworkInterface
().
send
(
removeEntityPdu
);
}
else
{
System
.
err
.
println
(
TRACE_PREFIX
+
"removeEntity() unable to send RemoveEntityPdu since no disThreadedNetworkInterface found"
);
// TODO consider queue for unsent entities
}
}
return
this
;
}
/**
* Add host to simulation list, if this is first occurrence
* @param newHost new host to add
* @return same object to permit progressive setters*/
public
SimulationManager
addHost
(
String
newHost
)
{
{
this
.
descriptor
=
newDescriptor
;
boolean
nameFound
=
false
;
TRACE_PREFIX
=
"["
+
(
DisThreadedNetworkInterface
.
class
.
getSimpleName
()
+
" "
+
descriptor
).
trim
()
+
"] "
;
boolean
aliasFound
=
false
;
for
(
RecordType
nextRecord
:
hostRecordList
)
{
if
(
nextRecord
.
name
.
equalsIgnoreCase
(
newHost
.
trim
()))
nameFound
=
true
;
if
(
nextRecord
.
alias
.
equalsIgnoreCase
(
newHost
.
trim
()))
aliasFound
=
true
;
if
((
nameFound
||
aliasFound
)
&&
!
nextRecord
.
isHostType
)
nextRecord
.
isHostType
=
true
;
// make sure
}
if
(!
nameFound
&&
!
aliasFound
)
{
RecordType
newRecord
=
new
RecordType
(
hostID
,
newHost
,
true
);
// TODO set alias to IP number
hostRecordList
.
add
(
newRecord
);
hostID
++;
// no PDU sent
}
return
this
;
}
/**
* Remove host from simulation list, if found
* @param oldHost old host to remove
* @return same object to permit progressive setters*/
public
SimulationManager
removeHost
(
String
oldHost
)
{
boolean
nameFound
=
false
;
boolean
aliasFound
=
false
;
for
(
RecordType
nextRecord
:
hostRecordList
)
{
if
(
nextRecord
.
name
.
equalsIgnoreCase
(
oldHost
.
trim
()))
nameFound
=
true
;
if
(
nextRecord
.
alias
.
equalsIgnoreCase
(
oldHost
.
trim
()))
aliasFound
=
true
;
if
((
nameFound
||
aliasFound
)
&&
!
nextRecord
.
isHostType
)
nextRecord
.
isHostType
=
true
;
// make sure
if
(
nameFound
||
aliasFound
)
{
hostRecordList
.
remove
(
nextRecord
);
// no PDU sent
break
;
}
}
return
this
;
}
}
/** Self test to check basic operation, invoked by main() */
public
void
selfTest
()
public
void
selfTest
()
{
{
createDisThreadedNetworkInterface
();
createDisThreadedNetworkInterface
();
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment