コード例 #1
0
        /// <summary>
        /// Méthode de départ pour le lancement de la lecture d'un scénario
        /// </summary>
        public void PlayScenario()
        {
            isCrashed = false;

            this.ChangeStatus(ScenarioPlayerSatus.VerifyScenario);

            //Verification du scenario - Etape 1
            if (ScenarioTools.VerifyScenario(scenarioToPlay).IsCorrect)
            {
                msg = "Scenario Valide";
            }
            else
            {
                isCrashed = true;
                crashMsg  = "Scenario non valide";
                this.ChangeStatus(ScenarioPlayerSatus.error);
            }

            //Initialisation des testeurs - Etape 2
            if (isCrashed == false)
            {
                this.ChangeStatus(ScenarioPlayerSatus.initTesters);
                if (Preliminaries())
                {
                    Trace.WriteInfo("Testeurs prêt");
                }
                else
                {
                    isCrashed = true;
                    crashMsg  = "Testeurs non prêt";
                    Trace.WriteInfo(crashMsg);
                    this.ChangeStatus(ScenarioPlayerSatus.error);
                }
            }


            if (!isCrashed)
            {
                //On donne l'ordre de charger le scenario sur chaque tester - Etape 3
                this.ChangeStatus(ScenarioPlayerSatus.sendScenario);
                if (SendAndLoadScenario())
                {
                    Trace.WriteInfo("Envoi et chargement du scenario OK");
                }
                else
                {
                    isCrashed = true;
                    Trace.WriteError("Envoi et chargement du scenario KO");
                }
            }

            //On joue les steps - Etape 4
            this.ChangeStatus(ScenarioPlayerSatus.running);

            if (!isCrashed)
            {
                foreach (GenericStep currentStep in scenarioToPlay.Steps)
                {
                    if (PlayStep(currentStep.NumStep))
                    {
                        Trace.WriteInfo("Lecture du Step " + ((StepsName)currentStep.NameId).ToString() + " OK");
                        //On copie le résultat du step dans scenarioResult
                        scenarioResult.AddStepResults(stepResult);

                        //On indique qu'un step à été joué
                        this.ChangeStatus(ScenarioPlayerSatus.stepPlayed);
                    }
                    else
                    {
                        //erreur fatal
                        Trace.WriteError("Lecture du Step " + ((StepsName)currentStep.NameId).ToString() + " KO");
                        //isCrashed = true;
                        scenarioResult.AddStepResults(stepResult);
                        break;
                    }
                    Thread.Sleep(2000);
                }
            }

            if (!isCrashed)
            {
                //On affiche le scenario dans tout les cas dans l'IHM
                MainEntry._ScenarioEvents.OnNewScenarioResultToView(scenarioResult, null);
                //On enregistre les données si le scenario a été validé
                if (scenarioToPlay.IsValidate)
                {
                    MainEntry.scenarioSolution.Scenarios[scenarioResult.IdScenario].AddResult(scenarioResult);
                }
            }

            //On ferme les threads ouverts par les testeurs
            if (StopScenario())
            {
                Trace.WriteInfo("Player bien terminé");
                //Fin du scenario - Etape 6
                this.ChangeStatus(ScenarioPlayerSatus.played);
            }
            else
            {
                Trace.WriteInfo("Problème lors de la fermeture du Player pour le scenario");
            }
        }