예제 #1
0
        public void DoLeave()
        {
            etati = SiteEtat.Dehors;

            jeton[i] = nbreqi[i];

            // jValues = "pour j de i+1 à n puis de 1 à i-1" (-- PROF)
            // or for j = i + 1 to n - 1 and then from 0 to i - 1 (-- KAITO)
            var n        = Ri.Count + 1; // all sites, including me ("i")
            var iToEnd   = Enumerable.Range(i + 1, n).Where(el => el < n);
            var startToI = Enumerable.Range(0, i).Where(el => el < i);
            var jValues  = iToEnd.Concat(startToI);

            foreach (var j in jValues)
            {
                if (nbreqi[j] > jeton[j])
                {
                    jetonDispi = false;
                    // jeton = null;
                    SendMessage(new MeikoMessage
                    {
                        Type      = "Jeton",
                        ["Jeton"] = jeton,
                        Dst       = (char)j,
                    });
                    break;
                }
            }
        }
예제 #2
0
        // ---

        public void DoEnter()
        {
            etati = SiteEtat.Demandeur;

            if (!jetonDispi)
            {
                nbreqi[i] = nbreqi[i] + 1;
                foreach (var j in Ri)
                {
                    SendMessage(new MeikoMessage
                    {
                        ["Pretty"] = $"request({i}, n={nbreqi[i]})",
                        Type       = "Request",
                        Src        = i,
                        ["n"]      = nbreqi[i],
                        Dst        = j,
                    });
                }

                while (!(jetonDispi))
                {
                    /* no-op */;
                }
            }

            etati = SiteEtat.Dedans;
        }
예제 #3
0
        // --

        public void DoEnter()
        {
            etati = SiteEtat.Demandeur;

            while (!(jetonDispi))
            {
                /* no-op */;
            }

            etati = SiteEtat.Dedans;
        }
예제 #4
0
 public void DoLeave()
 {
     etati      = SiteEtat.Dehors;
     jetonDispi = false;
     SendJetonToTheNextSite();
 }