//meta! sender="AgentDopravy", id="36", type="Request" public void ProcessNalozAuto(MessageForm message) { Vehicle naNalozenie = ((MyMessage)message).Car; // zaciatok cakania // to do dorobit ak cakalo cez noc tak += naNalozenie.ZaciatokCakania = MySim.CurrentTime; // TO=DO - KOLKO SA BUDE NAKLADAT NA AUTO ak bude na skladke menej materialu? Pocka na dovoz???? // ak nakladace prave niekoho nakladaju alebo nemaju pracovnu dobu if ((!(!MyAgent.NakladacBIsOccupied && MyAgent.NakladacBIsWorking()) && !(!MyAgent.NakladacAIsOccupied && MyAgent.NakladacAIsWorking())) || MyAgent.MaterialNaSkladke == 0) { lock (naNalozenie) { naNalozenie.Activity = "Waiting"; naNalozenie.Position = "Queue at Loader"; MyAgent.AutaSkladkaQueue.AddLast(naNalozenie); MyAgent.MessageSkladkaQueue.AddLast((MyMessage)message); } } else { // ak B ma pracovnu dobu a nenaklada nikoho if (!MyAgent.NakladacBIsOccupied && MyAgent.NakladacBIsWorking()) { message.Addressee = MyAgent.FindAssistant(SimId.ProcesNakladacB); MyAgent.NakladacBIsOccupied = true; naNalozenie.Activity = "Being loaded"; naNalozenie.Position = "Loader B"; BStartedWorking = MySim.CurrentTime; // koniec cakania naNalozenie.CasCakaniaNaSkladke = (MySim.CurrentTime - naNalozenie.ZaciatokCakania); // nalozime mnozstvo ktore je aktualne na skladke naNalozenie.ToUnload = (int)LoadCarWith(naNalozenie.Volume - naNalozenie.RealVolume); // pridanie casu cakania na skladke do statistik MyAgent.WaitingTimePerCar.AddSample(naNalozenie.CasCakaniaNaSkladke); StartContinualAssistant(message); } else if (!MyAgent.NakladacAIsOccupied && MyAgent.NakladacAIsWorking()) { message.Addressee = MyAgent.FindAssistant(SimId.ProcesNakladacA); MyAgent.NakladacAIsOccupied = true; naNalozenie.Activity = "Being loaded"; naNalozenie.Position = "Loader A"; AStartedWorking = MySim.CurrentTime; // koniec cakania naNalozenie.CasCakaniaNaSkladke = (MySim.CurrentTime - naNalozenie.ZaciatokCakania); // nalozime mnozstvo ktore je aktualne na skladke naNalozenie.ToUnload = (int)LoadCarWith(naNalozenie.Volume - naNalozenie.RealVolume); // pridanie casu cakania na skladke do statistik MyAgent.WaitingTimePerCar.AddSample(naNalozenie.CasCakaniaNaSkladke); StartContinualAssistant(message); } } }
public void NejakaMetoda(MyMessage message) { Vehicle naNalozenie = null; // ak B ma pracovnu dobu a nenaklada nikoho if (!MyAgent.NakladacBIsOccupied && MyAgent.NakladacBIsWorking() && MyAgent.MaterialNaSkladke != 0) { MyMessage sprava = MyAgent.MessageSkladkaQueue.First.Value; MyAgent.MessageSkladkaQueue.RemoveFirst(); naNalozenie = MyAgent.AutaSkladkaQueue.First.Value; MyAgent.AutaSkladkaQueue.RemoveFirst(); sprava.Addressee = MyAgent.FindAssistant(SimId.ProcesNakladacB); MyAgent.NakladacBIsOccupied = true; BStartedWorking = MySim.CurrentTime; // koniec cakania naNalozenie.CasCakaniaNaSkladke = (MySim.CurrentTime - naNalozenie.ZaciatokCakania); // nalozime mnozstvo ktore je aktualne na skladke naNalozenie.ToUnload = (int)LoadCarWith(naNalozenie.Volume - naNalozenie.RealVolume); // pridanie casu cakania na skladke do statistik sprava.Car = naNalozenie; MyAgent.WaitingTimePerCar.AddSample(naNalozenie.CasCakaniaNaSkladke); StartContinualAssistant(sprava); } else if (!MyAgent.NakladacAIsOccupied && MyAgent.NakladacAIsWorking()) { MyMessage sprava = MyAgent.MessageSkladkaQueue.First.Value; MyAgent.MessageSkladkaQueue.RemoveFirst(); naNalozenie = MyAgent.AutaSkladkaQueue.First.Value; MyAgent.AutaSkladkaQueue.RemoveFirst(); sprava.Addressee = MyAgent.FindAssistant(SimId.ProcesNakladacA); MyAgent.NakladacAIsOccupied = true; AStartedWorking = MySim.CurrentTime; // koniec cakania naNalozenie.CasCakaniaNaSkladke = (MySim.CurrentTime - naNalozenie.ZaciatokCakania); // nalozime mnozstvo ktore je aktualne na skladke naNalozenie.ToUnload = (int)LoadCarWith(naNalozenie.Volume - naNalozenie.RealVolume); // pridanie casu cakania na skladke do statistik sprava.Car = naNalozenie; MyAgent.WaitingTimePerCar.AddSample(naNalozenie.CasCakaniaNaSkladke); StartContinualAssistant(sprava); } }
//meta! sender="ProcesNakladacB", id="70", type="Finish" public void ProcessFinishProcesNakladacB(MessageForm message) { if (((MyMessage)message).Car.RealVolume != ((MyMessage)message).Car.Volume && MyAgent.MaterialNaSkladke == 0 && MyAgent.fullLoad) { MyAgent.AutaSkladkaQueue.AddFirst(((MyMessage)message).Car); MyAgent.MessageSkladkaQueue.AddFirst((MyMessage)message); MyAgent.NakladacBIsOccupied = false; return; } if (((MyMessage)message).Car.RealVolume == ((MyMessage)message).Car.Volume || MyAgent.MaterialNaSkladke == 0 || !MyAgent.NakladacBIsWorking()) { MyAgent.NakladacBIsOccupied = false; message.Addressee = MySim.FindAgent(SimId.AgentDopravy); message.Code = Mc.NalozAuto; Response(message); Vehicle naNalozenie; if (!MyAgent.AutaSkladkaQueue.IsEmpty() && MyAgent.NakladacBIsWorking() && MyAgent.MaterialNaSkladke != 0) { lock (Constants.QueueLock) { naNalozenie = MyAgent.AutaSkladkaQueue.First.Value; MyAgent.AutaSkladkaQueue.RemoveFirst(); } MyMessage zFrontu = MyAgent.MessageSkladkaQueue.First.Value; MyAgent.MessageSkladkaQueue.RemoveFirst(); zFrontu.Addressee = MyAgent.FindAssistant(SimId.ProcesNakladacB); zFrontu.Code = Mc.NalozAuto; // nalozime mnozstvo ktore je aktualne na skladke naNalozenie.ToUnload = (int)LoadCarWith(naNalozenie.Volume - naNalozenie.RealVolume); // ukoncenie cakania naNalozenie.CasCakaniaNaSkladke = (MySim.CurrentTime - naNalozenie.ZaciatokCakania); // pridanie casu cakania na skladke do statistik MyAgent.WaitingTimePerCar.AddSample(naNalozenie.CasCakaniaNaSkladke); zFrontu.Car = naNalozenie; MyAgent.NakladacBIsOccupied = true; BStartedWorking = MySim.CurrentTime; StartContinualAssistant(zFrontu); } } else { ((MyMessage)message).Car.ToUnload = LoadCarWith(((MyMessage)message).Car.Volume - ((MyMessage)message).Car.RealVolume); MyAgent.NakladacBIsOccupied = true; BStartedWorking = MySim.CurrentTime; message.Addressee = MyAgent.FindAssistant(SimId.ProcesNakladacB); message.Code = Mc.NalozAuto; StartContinualAssistant(message); } }