Here are an example of a C# Federate that send and receive information from the HLA Federation. A DIS simulator would work using exactly the same code, the data mapping being done via the GUIs.
A more information about the configuration GUIs can be found here.
Curious about using the LUA scripting engine? Take a look here.
Receiving data
It is important to notice the C# programmer NEVER has to know what is the real object type it’s updating. The programmer ALWAYS use local name representation.
See the code//This object manage generic parameters for coreDS
cCoreDSData configData = new cCoreDSData();
//This object manage the distributed simulation connect (HLA or DIS)s
cCoreDS lDSConnection = new cCoreDS();
//This will be used in the UI only
//List your INCOMING (object that your simulation will display)
cCoreDSMapping lInputObjectMapping = new cCoreDSMapping();
lInputObjectMapping.add("InputAircraft", "x");
lInputObjectMapping.add("InputAircraft", "y");
lInputObjectMapping.add("InputAircraft", "z");
/*
lInputObjectMapping.add("InputBomb", "x");
lInputObjectMapping.add("InputBomb", "y");
lInputObjectMapping.add("InputBomb", "z");
//etc
*/
//This will be used in the UI only
//List your INCOMING objects(object that your simulation will send to the simulation framework)
cCoreDSMapping lOutputObjectMapping = new cCoreDSMapping();
lOutputObjectMapping.add("OutputAircraft", "x");
lOutputObjectMapping.add("OutputAircraft", "y");
lOutputObjectMapping.add("OutputAircraft", "z");
//This will be used in the UI only
//List your INCOMING objects (object that your simulation will send to the simulation framework)
cCoreDSMapping lInputMessageMapping = new cCoreDSMapping();
lInputMessageMapping.add("MessageInputDetotation", "x");
lInputMessageMapping.add("MessageInputDetotation", "y");
lInputMessageMapping.add("MessageInputDetotation", "z");
//This will be used in the UI only
//List your INCOMING message(object that your simulation will send to the simulation framework)
cCoreDSMapping lOutputMessageMapping = new cCoreDSMapping();
lOutputMessageMapping.add("MessageOutputWeaponFire", "x");
lOutputMessageMapping.add("MessageOutputWeaponFire", "y");
lOutputMessageMapping.add("MessageOutputWeaponFire", "z");
// no config file at this point, the UI will take care of it
//configData.set("ConfigFile", "configname.json);
//If this value doesn't exists, [pwd / config] will be used
//configData.set("ConfigLocation", "c://path to config");
configData.set("EnableScripting", "1");
configData.set("SelectedLUAEditor", "");
configData.set("DisableWord", "1");
configData.set("EnableDebugging", "1" );
configData.set("ReloadScript", "1");
configData.set("LogErrorWindow", "1");
configData.set("LogToFile", "1");
configData.set("LogErrorPath", "c://temp/coreDSLog.log");
lDSConnection.showConfigHelper(configData, lInputObjectMapping, lOutputObjectMapping,
lInputMessageMapping, lOutputMessageMapping);
lDSConnection.init(configData);
//Before we initialize the connection, we need to register our callbacks
lDSConnection.registerNewObjectFoundHandler("InputAircraft", new cbAircraftFound());
lDSConnection.registerObjectUpdateHandler("InputAircraft", new cbAircraftUpdated());
if (lDSConnection.isConnected() == true)
{
isRunning = true;
while (isRunning)
{
lDSConnection.step();
}
}