示例#1
0
        //Fonction appelée à chaque tic, définis l'état du serveur et permet de vérifier périodiquement l'état des clients pour prendre des décisions en conséquence
        public override void UpdatePersonnage(int delta)
        {
            switch (etat)
            {
            case "idle":

                CheckPlatsClients();

                break;

            case "apportePain":
                break;

            case "apportePlat":

                if (hasPlats == false)
                {
                    if (GetPosition() != comptoir.GetPointAccesRestaurant())
                    {
                        MoveTo(comptoir.GetPointAccesRestaurant());
                    }
                    else
                    {
                        Console.WriteLine("Serveur " + id + " a prit plats pour table " + targetTable.GetNumTable());
                        foreach (Client client in targetTable.GetClients())
                        {
                            inventaire.Add(comptoir.stockPlats.TakeContent(comptoir.stockPlats.FindContent(new Predicate <object>(o => ((Plat)o).nomPlat == client.GetPlatAttente()))));
                        }
                        hasPlats = true;
                    }
                }
                else
                {
                    if (GetPosition() != targetTable.GetPosition())
                    {
                        MoveTo(targetTable.GetPosition());
                    }
                    else
                    {
                        foreach (Client client in targetTable.GetClients())
                        {
                            Plat plat = (Plat)inventaire.Find(o => ((Plat)o).nomPlat == client.GetPlatAttente());
                            inventaire.Remove(plat);
                            client.RecevoirPlat(plat);
                        }
                        targetTable.serveurReservee = false;
                        targetTable = null;
                        hasPlats    = false;
                        etat        = "idle";
                    }
                }
                break;

            case "debarasseRepas":
                break;
            }
        }
示例#2
0
        //Le client reçois le plat, change son état en "mange"
        public void RecevoirPlat(Plat plat)
        {
            Console.WriteLine("Client " + id + " a reçus " + plat.nomPlat);

            this.plat = plat;
            Random rnd = new Random();

            attenteCountDown = rnd.Next(5, 10) * attente;
            etat             = "mange";
        }
示例#3
0
        //Le client a finis le plat
        private void FinisPlat()
        {
            plat = null;

            Console.WriteLine("Client " + id + " a finis " + repasEtape);

            if (GetRepasEtape() == "Dessert")
            {
                etat = "part";
            }
            else
            {
                if (GetRepasEtape() == "Entree")
                {
                    repasEtape = "Plat";
                }
                else
                {
                    repasEtape = "Dessert";
                }
                etat = "attendsRepas";
            }
        }