//meta! sender="ProcesVykladacB", id="72", type="Finish" public void ProcessFinishProcesVykladacB(MessageForm message) { Vehicle auto = ((MyMessage)message).Car; if (auto.RealVolume == 0) { MyAgent.VykladacBIsOccupied = false; message.Code = Mc.VylozAuto; message.Addressee = MySim.FindAgent(SimId.AgentDopravy); Response(message); if (!MyAgent.AutaStavbaQueue.IsEmpty() && MyAgent.VykladacBIsWorking() && MyAgent.MaterialNaStavbe < Constants.MaxMaterialAtBuilding) { Vehicle naVylozenie; lock (Constants.Queue2Lock) { naVylozenie = MyAgent.AutaStavbaQueue.First.Value; MyAgent.AutaStavbaQueue.RemoveFirst(); } MyMessage msg = MyAgent.MessageStavbaQueue.First.Value; MyAgent.MessageStavbaQueue.RemoveFirst(); msg.Addressee = MyAgent.FindAssistant(SimId.ProcesVykladacB); msg.Code = Mc.VylozAuto; //msg.Addressee = MySim.FindAgent(SimId.AgentStavby); //Request(msg); // ukoncenie cakania naVylozenie.CasCakaniaNaStavbe = (MySim.CurrentTime - naVylozenie.ZaciatokCakania); // pridanie casu cakania na skladke do statistik MyAgent.WaitingTimePerCar.AddSample(naVylozenie.CasCakaniaNaStavbe); naVylozenie.ToUnload = LoadCarWith(naVylozenie.RealVolume); msg.Car = naVylozenie; MyAgent.VykladacBIsOccupied = true; StartContinualAssistant(msg); } } else { // je volna kapacita? if (MyAgent.VykladacBIsWorking() && MyAgent.MaterialNaStavbe < Constants.MaxMaterialAtBuilding) { ((MyMessage)message).Car.ToUnload = LoadCarWith(auto.RealVolume); message.Code = Mc.VylozAuto; message.Addressee = MyAgent.FindAssistant(SimId.ProcesVykladacB); MyAgent.VykladacBIsOccupied = true; StartContinualAssistant(message); } else { MyAgent.AutaStavbaQueue.AddFirst(((MyMessage)message).Car); MyAgent.MessageStavbaQueue.AddFirst((MyMessage)message); MyAgent.VykladacBIsOccupied = false; } } }
//meta! sender="AgentDopravy", id="37", type="Request" public void ProcessVylozAuto(MessageForm message) { Vehicle naVylozenie = ((MyMessage)message).Car; // zaciatok cakania v rade // to do - podmienka aby sa cakalo iba do konca pracovnej doby Vykladaca a potom sa prirataval cas od zaciatku pracovnej doby naVylozenie.ZaciatokCakania = MySim.CurrentTime; // ak A nepracuje alebo naklada a B nepracuje alebo naklada alebo je zakazany if ((!(!MyAgent.VykladacBIsOccupied && !MyAgent.VykladacBIsDisabled && MyAgent.VykladacBIsWorking()) && !(!MyAgent.VykladacAIsOccupied && MyAgent.VykladacAIsWorking())) || MyAgent.MaterialNaStavbe == Constants.MaxMaterialAtBuilding) { MyAgent.AutaStavbaQueue.AddLast(naVylozenie); MyAgent.MessageStavbaQueue.AddLast((MyMessage)message); naVylozenie.Activity = "Waiting"; naVylozenie.Position = "Queue at unloader"; } else { // ak B pracuje, nie je zakazany a nenaklada if (!MyAgent.VykladacBIsOccupied && !MyAgent.VykladacBIsDisabled && MyAgent.VykladacBIsWorking()) { message.Addressee = MyAgent.FindAssistant(SimId.ProcesVykladacB); MyAgent.VykladacBIsOccupied = true; naVylozenie.Activity = "Being unloaded"; naVylozenie.Position = "Unloader B"; // koniec cakania naVylozenie.CasCakaniaNaStavbe = (MySim.CurrentTime - naVylozenie.ZaciatokCakania); // pridanie do statistik naVylozenie.ToUnload = LoadCarWith(naVylozenie.RealVolume); MyAgent.WaitingTimePerCar.AddSample(naVylozenie.CasCakaniaNaStavbe); StartContinualAssistant(message); } // ak A pracuje a nenaklada else if (!MyAgent.VykladacAIsOccupied && MyAgent.VykladacAIsWorking()) { message.Addressee = MyAgent.FindAssistant(SimId.ProcesVykladacA); MyAgent.VykladacAIsOccupied = true; naVylozenie.Activity = "Being unloaded"; naVylozenie.Position = "Unloader A"; // koniec cakania naVylozenie.CasCakaniaNaStavbe = (MySim.CurrentTime - naVylozenie.ZaciatokCakania); // pridanie do statistik naVylozenie.ToUnload = LoadCarWith(naVylozenie.RealVolume); MyAgent.WaitingTimePerCar.AddSample(naVylozenie.CasCakaniaNaStavbe); StartContinualAssistant(message); } } }
public void NejakaMetoda(MyMessage message) { Vehicle naNalozenie = null; // ak B ma pracovnu dobu a nenaklada nikoho if (!MyAgent.VykladacBIsOccupied && !MyAgent.AutaStavbaQueue.IsEmpty() && MyAgent.VykladacBIsWorking() && MyAgent.MaterialNaStavbe < Constants.MaxMaterialAtBuilding && !MyAgent.VykladacBIsDisabled) { MyMessage sprava = MyAgent.MessageStavbaQueue.First.Value; MyAgent.MessageStavbaQueue.RemoveFirst(); naNalozenie = MyAgent.AutaStavbaQueue.First.Value; MyAgent.AutaStavbaQueue.RemoveFirst(); sprava.Addressee = MyAgent.FindAssistant(SimId.ProcesVykladacB); MyAgent.VykladacBIsOccupied = true; // koniec cakania naNalozenie.CasCakaniaNaSkladke = (MySim.CurrentTime - naNalozenie.ZaciatokCakania); // nalozime mnozstvo ktore je aktualne na skladke naNalozenie.ToUnload = (int)LoadCarWith(naNalozenie.RealVolume); // pridanie casu cakania na skladke do statistik sprava.Car = naNalozenie; MyAgent.WaitingTimePerCar.AddSample(naNalozenie.CasCakaniaNaSkladke); StartContinualAssistant(sprava); } else if (!MyAgent.VykladacAIsOccupied && !MyAgent.AutaStavbaQueue.IsEmpty() && MyAgent.VykladacAIsWorking() && MyAgent.MaterialNaStavbe < Constants.MaxMaterialAtBuilding) { MyMessage sprava = MyAgent.MessageStavbaQueue.First.Value; MyAgent.MessageStavbaQueue.RemoveFirst(); naNalozenie = MyAgent.AutaStavbaQueue.First.Value; MyAgent.AutaStavbaQueue.RemoveFirst(); sprava.Addressee = MyAgent.FindAssistant(SimId.ProcesVykladacA); MyAgent.VykladacAIsOccupied = true; // koniec cakania naNalozenie.CasCakaniaNaSkladke = (MySim.CurrentTime - naNalozenie.ZaciatokCakania); // nalozime mnozstvo ktore je aktualne na skladke naNalozenie.ToUnload = (int)LoadCarWith(naNalozenie.RealVolume); // pridanie casu cakania na skladke do statistik sprava.Car = naNalozenie; MyAgent.WaitingTimePerCar.AddSample(naNalozenie.CasCakaniaNaSkladke); StartContinualAssistant(sprava); } }