private void ProcessRandomMsg(RandomMsg msg)
        {
            // Pravilo Lamporovog sata
            LamportClock = Math.Max(msg.TimeStampMsg.LamportTime, LamportClock) + 1;

            string mojeIme = Self.Path.Name;

            TimeStampMsg timeStampPoruka = new TimeStampMsg(LamportClock, "Hello from " + mojeIme);

            _logger.Tell(new Log(mojeIme, timeStampPoruka));
        }
示例#2
0
        private void ProcessLog(Log log)
        {
            // Izvucimo ime iz poruke
            string name = log.Name;

            // Izvucimo Lamportov sat i poruku
            TimeStampMsg msg = log.TimeStampMsg;

            // Provjerimo jesmo li primili vec poruku od ovoga korisnika
            if (_userMessages.ContainsKey(name) && _userMessages[name].Count > 0)
            {
                // ako jesmo
                List <TimeStampMsg> listaKorisnikovihPoruka = _userMessages[name];

                // Prvo provjerimo je li novo primljeno vrijeme vece od starog:
                // Dohvatimo maksimalno vrijeme koje se vec nalazi u nekoj od poruka u listi:
                int lastTime = listaKorisnikovihPoruka.Max(x => x.LamportTime);

                // trenutno vrijeme je ono koje smo primili
                int currentTime = msg.LamportTime;

                // ako je trenutno vrijeme vece od onog koje vec imamo, dodajmo element
                if (currentTime > lastTime)
                {
                    // dodajmo novu poruku
                    listaKorisnikovihPoruka.Add(msg);
                }
            }
            else
            {
                // u suprotnom (stvaranje liste s jednim elementom - msg)
                _userMessages[name] = new List <TimeStampMsg> {
                    msg
                };
            }

            LogIt(_userMessages);
        }
        private void Loop(List <IActorRef> others, int sleep)
        {
            IActorRef actor = SelectOne(others);

            // Pravilo Lamportovog sata
            LamportClock++;

            // Ime actora mozemo dohvatiti uz pomoc putanje
            string mojeIme = Self.Path.Name;

            TimeStampMsg timeStampPoruka = new TimeStampMsg(LamportClock, "Hello from " + mojeIme);

            RandomMsg randommsg = new RandomMsg(_rnd.Next(2000), timeStampPoruka);

            actor.Tell(randommsg);

            Thread.Sleep(_rnd.Next(100));

            // Posaljimo poruku loggeru da logira trenutno stanje
            _logger.Tell(new Log(mojeIme, timeStampPoruka));

            // Pricekat cemo "sleep" prije nego posaljemo novu poruku
            Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromMilliseconds(sleep), Self, new Loop(), Self);
        }
示例#4
0
 public RandomMsg(int br, TimeStampMsg timeStampMsg)
 {
     Br           = br;
     TimeStampMsg = timeStampMsg;
 }
示例#5
0
 public Log(string name, TimeStampMsg timeStampMsg)
 {
     Name         = name;
     TimeStampMsg = timeStampMsg;
 }