コード例 #1
0
ファイル: TestCommon.cs プロジェクト: agustinsantos/Sxta
        public void InitAndCreateFederation()
        {
            LogAndRtiInit();

            //Build a Uri using a file path
            FileInfo file    = new FileInfo(Sxta.Rti1516ResourcesNames.HelloWorldObjectModel);
            Uri      fileUri = new Uri("file://" + file.FullName);

            try
            {
                //Create Federation
                rtiAmbassador.CreateFederationExecution(federationName, fileUri);
            }
            catch (Exception exception)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error(exception.Message);
                }
            }

            try
            {
                federateAmbassador = new TestFederate(rtiAmbassador);
                mobileServices     = new MobileFederateServices(new LongValuedLogicalTimeFactory(), new LongValuedLogicalTimeIntervalFactory());
            }
            catch (Exception exception)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error(exception.Message);
                }
            }
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: agustinsantos/Sxta
        private void OnJoinFederationHelloWorld(object sender, EventArgs e)
        {
            try
            {
                // Join to federation
                sampleFederateAmbassador = new XrtiFederateAmbassador(rtiAmbassador);
                mobileServices           = new MobileFederateServices(new DoubleValuedLogicalTimeFactory(), new DoubleValuedLogicalTimeIntervalFactory());
                IFederateHandle federateHandle = rtiAmbassador.JoinFederationExecution(peerName, federationName, sampleFederateAmbassador, mobileServices);

                EvokeCallbackMenuItem.Enabled         = true;
                EvokeCallbacksMenuItem.Enabled        = true;
                SetTimeConstrainedMenuItem.Enabled    = true;
                SetTimeRegulatingMenuItem.Enabled     = true;
                TimeAdvanceRequestMinMenuItem.Enabled = true;
                TimeAdvanceRequestMenuItem.Enabled    = true;
                Example1MenuItem.Enabled = true;
                Example2MenuItem.Enabled = true;
                Example3MenuItem.Enabled = true;
            }
            catch (Exception exception)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error(exception.Message);
                }
                MessageBox.Show(exception.Message);
            }
        }
コード例 #3
0
        public override void StartSimulation(IRTIambassador rtiAmb)
        {
            if (log.IsInfoEnabled)
            {
                log.Info("Start Time Management simulation");
            }

            try
            {
                rti      = (XrtiExecutiveAmbassador)rtiAmb;
                form     = new TimeManagementForm(rti, this);
                scenario = form.Scenario;

                federateAmbassador = new TimeManagementFederateAmbassador(rtiAmb);
                timeManagementFederateAmbassador = (TimeManagementFederateAmbassador)federateAmbassador;
                mobileServices = new MobileFederateServices(new DoubleValuedLogicalTimeFactory(), new DoubleValuedLogicalTimeIntervalFactory());
                JoinSimulation(rtiAmb, federate.Type, federation.Name);

                AddVisualElements();

                InitFederate();

                // Add Federation's interaction listener
                TimeManagementObjectModelInteractionListener l1 = new TimeManagementObjectModelInteractionListener(rti, mobileServices._timeFactory, home, moveActorInterval, form, this);
                rti.interactionManager.AddInteractionListener(l1);

                MyLowLevelManagementObjectModelInteractionListener l2 = new MyLowLevelManagementObjectModelInteractionListener(rti, "My", form);
                rti.interactionManager.AddInteractionListener(l2);
コード例 #4
0
ファイル: PluginSimulator.cs プロジェクト: agustinsantos/Sxta
        public virtual void JoinSimulation(IRTIambassador rtiAmb, string federateType, string federation)
        {
            if (rtiAmb == null)
            {
                throw new System.ArgumentNullException("Rti ambassador could not be null");
            }

            rtiAmbassador = rtiAmb;

            InitLogSystem();

            federationName = federation;

            try
            {
                //Build a Uri using a file path
                FileInfo file    = new FileInfo(this.FomList[0].Uri);
                Uri      fileUri = new Uri("file://" + file.FullName);

                //Create Federation
                rtiAmbassador.CreateFederationExecution(federationName, fileUri);
            }
            catch (Exception exception)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error(exception.Message);
                }
            }

            try
            {
                // PATCH ANGEL: Si está inicializado el federateAmbassador no se crea de nuevo
                if (federateAmbassador == null)
                {
                    federateAmbassador = new XrtiFederateAmbassador(rtiAmbassador);
                }

                if (mobileServices == null)
                {
                    mobileServices = new MobileFederateServices(new LongValuedLogicalTimeFactory(), new LongValuedLogicalTimeIntervalFactory());
                }

                // Join to federation
                IFederateHandle federateHandle = rtiAmbassador.JoinFederationExecution(federateType,
                                                                                       federationName,
                                                                                       federateAmbassador,
                                                                                       mobileServices);
            }
            catch (Exception e)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error("Failed while joining to :" + federateAmbassador + ". Exception :" + e.Message);
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// Joins a federation execution.
        /// </summary>
        /// <param name="federateType">a string describing the federate's role in the federation
        /// </param>
        /// <param name="federationExecutionName">the name of the federation to join
        /// </param>
        /// <param name="federateReference">the federate ambassador object
        /// </param>
        /// <param name="serviceReferences">the federate's mobile services
        /// </param>
        /// <exception cref="FederateAlreadyExecutionMember"> if the federate is already a member of
        /// an execution
        /// </exception>
        /// <exception cref="FederationExecutionDoesNotExist"> if the federation execution does not
        /// exist
        /// </exception>
        /// <exception cref="SaveInProgress"> if a save operation is in progress
        /// </exception>
        /// <exception cref="RestoreInProgress"> if a restore operation is in progress
        /// </exception>
        /// <exception cref="RTIinternalError"> if an internal error occurred in the
        /// run-time infrastructure
        /// </exception>
        public IFederateHandle JoinFederationExecution(string federateType,
                                                       string federationExecutionName,
                                                       IFederateAmbassador federateReference,
                                                       MobileFederateServices serviceReferences)
        {
            if (!initialized)
            {
                InitializeRTI();
            }

            // TODO : + Checks if a save operation is in progress
            //        + Checks if a restore operation is in progress

            // if the federate is already a member of an execution
            if (!this.federationName.Equals(HLA_META_FEDERATION_EXECUTION))
            {
                throw new FederateAlreadyExecutionMember("joined to " + this.federationName);
            }

            // if the federation execution does not exits
            if (!federationsMap.ContainsKey(federationExecutionName))
            {
                throw new FederationExecutionDoesNotExist(federationExecutionName);
            }

            HLAfederation federation = federationsMap[federationExecutionName];

            if (serviceReferences != null)
            {
                this.logicalTimeFactory         = serviceReferences._timeFactory;
                this.logicalTimeIntervalFactory = serviceReferences._intervalFactory;

                // Sets time's factory to the federation
                federation.LogicalTimeFactory         = serviceReferences._timeFactory;
                federation.LogicalTimeIntervalFactory = serviceReferences._intervalFactory;

                /*
                 * XrtiSerializerManager serializerMngr = this.interactionManager.SerializerManager;
                 *
                 * Type objType = typeof(ILogicalTime);
                 * long handle = -1000;
                 * serializerMngr.RegisterSerializer(objType, handle, new ILogicalTimeXrtiSerializer(serializerMngr, logicalTimeFactory));
                 *
                 * objType = typeof(ILogicalTimeInterval);
                 * handle = -2000;
                 * serializerMngr.RegisterSerializer(objType, handle, new ILogicalTimeIntervalXrtiSerializer(serializerMngr, logicalTimeIntervalFactory));
                 */
            }

            Sxtafederate sxtaFederate;

            try
            {
                lock (this)
                {
                    // Creates the federate;
                    this.federate = Sxtafederate.NewSxtafederate();

                    sxtaFederate = this.federate as Sxtafederate;

                    // Sets the federate's ambassador
                    sxtaFederate.FederateAmbassador = federateReference;

                    // Sets the federation
                    sxtaFederate.Federation = federation;

                    // Updates the federate's properties
                    sxtaFederate.HLAisJoined = true;

                    sxtaFederate.HLAfederationNameJoined = federationExecutionName;

                    federate.HLAfederateType = federateType;

                    String nameHost = Dns.GetHostName();
                    System.Net.IPHostEntry hostEntry = System.Net.Dns.GetHostEntry(nameHost);
                    sxtaFederate.HLAfederateHost = hostEntry.AddressList[0].ToString();

                    this.federateHandle        = new XRTIFederateHandle();
                    federate.HLAfederateHandle = (HLAfederateHandle)this.federateHandle;
                    //federate.HLAfederateState = HLAfederateState.ActiveFederate;

                    // Init time management's properties
                    federate.HLAtimeConstrained  = false;
                    federate.HLAtimeRegulating   = false;
                    federate.HLAtimeManagerState = HLAtimeState.TimeGranted;

                    // TODO ANGEL: Posiblemente NO sea el lugar adecuado para inicializar
                    federate.HLAlogicalTime     = logicalTimeFactory.MakeInitial();
                    federate.HLAGALT            = logicalTimeFactory.MakeInitial();
                    federate.HLALITS            = logicalTimeFactory.MakeFinal();
                    sxtaFederate.HLApendingTime = logicalTimeFactory.MakeInitial();

                    federate.HLAlookahead = logicalTimeIntervalFactory.MakeZero();
                }
            }
            catch (System.Exception e)
            {
                throw new RTIinternalError(e.ToString());
            }

            // Initializes Federate's State
            Lrc.LrcQueue queue = new Lrc.LrcQueue();
            state = new Lrc.LrcState(queue, sxtaFederate);
            lrc   = new Lrc.Lrc(state, queue);

            // Sets federate ambassador
            this.federateAmbassador = federateReference;

            // Adds the new federate to the execution
            federation.HLAfederatesinFederation.Add(federate.HLAfederateHandle);

            this.federationHandle = federationsMap[federationExecutionName].InstanceHandle;
            this.joinedFederationExecutionHandle = ((XRTIObjectInstanceHandle)this.federationHandle).Identifier;
            this.federationName = federationExecutionName;

            // Set-up HLAobjectRoot static properties
            HLAobjectRoot.DefaultFederate                  = federate;
            HLAobjectRoot.DefaultFederateAmbassador        = federateReference;
            HLAobjectRoot.DefaultFederationExecutionHandle = this.joinedFederationExecutionHandle;

            // Adds listeners to process federation's interactions
            FederationLowLevelManagementObjectModelInteractionListener federationLLMObjectModelInteractionListener = new FederationLowLevelManagementObjectModelInteractionListener(this, federationExecutionName);

            dispatcher.AddListener(joinedFederationExecutionHandle, federationLLMObjectModelInteractionListener);

            FederationManagementObjectModelInteractionListener federationMObjectModelInteractionListener = new FederationManagementObjectModelInteractionListener(this, federationExecutionName);

            dispatcher.AddListener(joinedFederationExecutionHandle, federationMObjectModelInteractionListener);

            PublishAndSubscribeFederationObjectClass(federation.HLAFDDID, this.joinedFederationExecutionHandle);

            Debug("Joined execution " + this.federationName + " [" + this.federationHandle + ")]");

            return(this.federateHandle);
        }