coreDS™ C# – Implementation sample

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();
                }
            }