void game_onLevelStarted(object obj, EventArgs messageArgs)
        {
            pss.Pss.SendCommandFrame(CommandCodes.StreamingMod);
            lastOrder = LastOrder.StreamingMod;

            if (this.currentType != TypeMazeGame.Null)
            {
                this.canDoMath = true;
            }
        }
 void Pss_StreamingDone(object sender, EventArgs e)
 {
     if (this.frame != null)
     {
         Application.Current.Dispatcher.Invoke(new Action(() =>
         {
             pss.Pss.SendExerciceFrame(frame);
             lastOrder = LastOrder.Positioning;
         }), DispatcherPriority.Normal);
     }
 }
        /// <summary>
        /// Updates ONE single User (PUT)
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public void UpdateUser(int userId)
        {
            UserViewModel item;
            DAL           objDAL = new DAL();

            string querySql = $"update clients set " +
                              $"Name = '{Username.ToString()}'," +
                              $"Password = '******'," +
                              $"Email = '{Email.ToString()}'," +
                              $"CreatedAt = '{DateTime.Parse(CreatedAt.ToString()).ToString("yyyy/MM/dd")}'," +
                              $"LastOrder = '{DateTime.Parse(LastOrder.ToString()).ToString("yyyy/MM/dd")}'," +
                              $"UrlImg = '{UrlImg.ToString()}'," +
                              $"Phone = '{Phone.ToString()}' " +
                              $"where UserId = {userId.ToString()}";

            objDAL.ExecutaComandoSQL(querySql);
        }
        //public virtual OrderViewModel Order { get; set; }

        #endregion

        #region HTTP Methods (GET/POST/PUT/DELETE)

        /// <summary>
        /// Registrar um novo usuário (POST)
        /// </summary>
        public void RegisterUser()
        {
            DAL objDAL = new DAL();

            //$ -> interpolação de strings
            string stringSql = $"insert into clients (" +
                               $" Name," +
                               $" Password," +
                               $" Email," +
                               $" CreatedAt," +
                               $" LastOrder," +
                               $" UrlImg," +
                               $" Phone)" +
                               $"values (" +
                               $"'{Username}'," +
                               $"'{Password}'," +
                               $"'{Email}'," +
                               $"'{DateTime.Parse(CreatedAt.ToString()).ToString("yyyy/MM/dd")}'," +
                               $"'{DateTime.Parse(LastOrder.ToString()).ToString("yyyy/MM/dd")}'," +
                               $"'{UrlImg}'," +
                               $"'{Phone}') ";

            objDAL.ExecutaComandoSQL(stringSql);
        }
        void game_onLevelStopped(object obj, EventArgs messageArgs)
        {
            this.pss.Pss.SendCommandFrame(CommandCodes.STOPnv);
            this.canDoMath = false;
            double score = 0;

            if (this.currentType == TypeMazeGame.Reaching)
            {
                // Sauvegarde le dernier segement du reaching avant de tout reset
                this.SaveSegment(0);

                // Score pour le Reaching qui ne se calcul pas de la meme maniere

                if (satMoy.Count > 0)
                {
                    foreach (var sat in satMoy)
                    {
                        score += sat;
                    }
                    score /= satMoy.Count;
                    score *= 100;
                }
                else
                {
                    score = 1;
                }
            }
            else
            {
                if (this.ErrorMoyPlot.Count > 0)
                {
                    // ErrorMoyPlot à une erreurMoy par segement et il y a 11 segments par tour
                    double nbrTurn = Math.Floor(this.ErrorMoyPlot.Count / 11.0);

                    for (int i = 0; i < nbrTurn; i++)
                    {
                        int    segMin    = i * 11;
                        int    segMax    = segMin + 10;
                        double errorTour = 0.0;
                        // Calcul de l'erreur moyenne du tour i
                        for (int j = segMin; j <= segMax; j++)
                        {
                            errorTour += ErrorMoyPlot[j];
                        }

                        errorTour /= 11.0;

                        score += (10 + (10 * (1 - errorTour)));
                    }
                }
                else
                {
                    score = 1;
                }
            }

            if (score > highScore)
            {
                highScore = score;
            }

            this.game.SetScore((int)score);
            this.game.SetHighScore((int)highScore);

            // Actualisation des Plot
            // En reaching on actualise a chaque segement plutot que a chaque fin de circuit
            if (this.currentType != TypeMazeGame.Reaching)
            {
                double axeX = 1.0;
                if (this.ErrorPlotPoint.Count > 0)
                {
                    axeX = this.ErrorPlotPoint.Last().X + 1;
                }

                double errorMoy = 0.0;
                foreach (var error in this.ErrorMoyPlot)
                {
                    errorMoy += error;
                }
                errorMoy /= this.ErrorMoyPlot.Count;
                var newError = new DataPoint(axeX, errorMoy);
                this.ErrorPlotPoint.Add(newError);

                double vitesseMoy = 0.0;
                foreach (var vitesse in this.VitesseMoyPlot)
                {
                    vitesseMoy += vitesse;
                }
                vitesseMoy /= this.VitesseMoyPlot.Count;
                var newVitesse = new DataPoint(axeX, vitesseMoy);
                this.VitessePlotPoint.Add(newVitesse);
                Application.Current.Dispatcher.Invoke(new Action(() =>
                {
                    Messenger.Default.Send <bool>(true, "RefreshPlot");
                }), DispatcherPriority.Normal);
            }

            // Reset des liste de segment
            listPos  = new List <PositionDataModel>();
            listPos2 = new List <Position2DataModel>();

            listForce  = new List <ForceDataModel>();
            listForce2 = new List <Force2DataModel>();

            listVit  = new List <VitesseModel>();
            listVit2 = new List <Vitesse2Model>();

            listError = new List <PprDataModel>();

            satMoy = new List <double>();

            VitesseMoyPlot = new List <double>();
            ErrorMoyPlot   = new List <double>();

            // Repositionnement du robot sur la ligne de départ
            pss.Pss.SendExerciceFrame(frame);
            lastOrder = LastOrder.Positioning;
        }