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)); }
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); }
public RandomMsg(int br, TimeStampMsg timeStampMsg) { Br = br; TimeStampMsg = timeStampMsg; }
public Log(string name, TimeStampMsg timeStampMsg) { Name = name; TimeStampMsg = timeStampMsg; }