//meta! sender="AgentModelu", id="88", type="Call"
        public void ProcessInicializacia(MessageForm message)
        {
            // zaciatok planovania dovozu materialu
            message.Code              = Mc.NalozAuto;
            message.Addressee         = MyAgent.FindAssistant(SimId.PlanovacDovozMaterialu);
            ((MyMessage)message).Name = "A";
            StartContinualAssistant(message);

            MyMessage sprava2 = new MyMessage(MySim);

            sprava2.Code      = Mc.NalozAuto;
            sprava2.Addressee = MyAgent.FindAssistant(SimId.PlanovacDovozMaterialu);
            sprava2.Name      = "B";
            StartContinualAssistant(sprava2);

            MyMessage sprava3 = new MyMessage(MySim);

            sprava3.Code      = Mc.NalozAuto;
            sprava3.Addressee = MyAgent.FindAssistant(SimId.PlanovacDovozMaterialu);
            sprava3.Name      = "C";
            StartContinualAssistant(sprava3);

            MyMessage sprava4 = new MyMessage(MySim);

            sprava4.Code      = Mc.ExportZacaty;
            sprava4.Addressee = MyAgent.FindAssistant(SimId.PlanovacOdvozMaterialu);
            //StartContinualAssistant(sprava4);
            Notice(sprava4);
        }
Exemplo n.º 2
0
        public void ProcessStart(MessageForm message)
        {
            MyMessage zaciatokPracovnejDobyA = new MyMessage(MySim);

            zaciatokPracovnejDobyA.Addressee = MyAgent;
            zaciatokPracovnejDobyA.Code      = Mc.ZaciatokPracovnejDoby;
            zaciatokPracovnejDobyA.Name      = ((MyMessage)message).Name;
            Notice(zaciatokPracovnejDobyA);


            MyMessage sprava = new MyMessage(MySim);

            sprava.Name = ((MyMessage)message).Name;
            double delTime;

            if (sprava.Name == "A")
            {
                delTime = Timer.NewWorkDayStartsAt(MySim.CurrentTime, Settings.Constants.NakladacAStartsAt);
            }
            else
            {
                delTime = Timer.NewWorkDayStartsAt(MySim.CurrentTime, Settings.Constants.NakladacBStartsAt);
            }
            sprava.Code      = Mc.KoniecPracovnejDoby;
            sprava.Addressee = MyAgent.FindAssistant(SimId.PlanovacPracovnejDoby);
            Hold(delTime, sprava);
        }
        //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);
                }
            }
        }
Exemplo n.º 4
0
        //meta! sender="AgentVozidiel", id="30", type="Request"
        public void ProcessNastupenie(MessageForm message)
        {
            MyMessage ms       = (MyMessage)message.CreateCopy();
            var       vozidlo  = ms.Vozidlo;
            var       zastavka = vozidlo.Linka.Presuny[vozidlo.AktualnyPresun].ZastavkaStart;


            //Console.WriteLine("Prisiel na zastavku " + zastavka.Nazov + " "+ MySim.CurrentTime);
            if (zastavka.Nazov != "ST")
            {
                if (zastavka.PocetCestujucich == 0)
                {
                    OdchodAutobusu(ms);
                    return;
                }
                ms.Addressee = MyAgent.FindAssistant(SimId.ProcesNastupenie);
                StartContinualAssistant(ms);
            }
            else
            {
                //tuto
                ms.Addressee = MyAgent.FindAssistant(SimId.ProcesVystupenie);
                StartContinualAssistant(ms);
            }
        }
        private void ProcessEndWorkDay(MessageForm message)
        {
            MyMessage naplanujZaciatokPrace = new MyMessage(MySim);

            naplanujZaciatokPrace.Addressee = MyAgent.FindAssistant(SimId.PlanovacPracovnejDoby2);
            naplanujZaciatokPrace.Code      = Mc.Start;
            StartContinualAssistant(naplanujZaciatokPrace);
        }
Exemplo n.º 6
0
        //meta! sender="AgentVozidiel", id="10", type="Request"
        public void ProcessPresun(MessageForm message)
        {
            //mam zacati presun jedneho auta
            MyMessage ms = (MyMessage)message.CreateCopy();

            ms.Addressee = MyAgent.FindAssistant(SimId.ProcesPresun);
            StartContinualAssistant(ms);
        }
Exemplo n.º 7
0
        private void ProcessKoniecNastupu(MessageForm message)
        {
            var ms       = (MyMessage)message;
            var vozidlo  = ms.Vozidlo;
            var zastavka = vozidlo.Linka.Presuny[ms.Vozidlo.AktualnyPresun].ZastavkaStart;

            if (vozidlo.Typ == "A")
            {
                if (vozidlo.JePlny())
                {
                    vozidlo.Caka = false;
                    if (zastavka.CakajuceVozidlo == vozidlo)
                    {
                        zastavka.CakajuceVozidlo = null;
                    }
                    OdchodAutobusu(message);
                    return;
                }
                if (((MySimulation)MySim)._cakanie && zastavka.CakajuceVozidlo == null)
                {
                    var ms2 = new MyMessage(MySim);
                    ms2.Vozidlo              = ms.Vozidlo;
                    ms2.Addressee            = MyAgent.FindAssistant(SimId.ProcesCakania);
                    zastavka.CakajuceVozidlo = vozidlo;
                    vozidlo.Caka             = true;
                    //dorobit nastupovanie pocas cakania
                    StartContinualAssistant(ms2);
                }
                else
                {
                    if (zastavka.CakajuceVozidlo != vozidlo)
                    {
                        vozidlo.Caka = false;
                        OdchodAutobusu(message);
                    }
                    else
                    {
                        if (vozidlo.Odchod && vozidlo.PocetObsadenychDvery == 0)
                        {
                            vozidlo.Caka             = false;
                            zastavka.CakajuceVozidlo = null;
                            vozidlo.Odchod           = false;
                            OdchodAutobusu(message);
                        }
                        else
                        {
                            ;
                        }
                    }
                }
            }
            else
            {
                OdchodAutobusu(ms);
            }
        }
        //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;
                }
            }
        }
Exemplo n.º 9
0
        //meta! sender="AgentSkladky", id="36", type="Response"
        public void ProcessNalozAuto(MessageForm message)
        {
            // auto skoncilo nakladanie

            MyMessage sprava = new MyMessage(MySim);

            sprava.Volume    = ((MyMessage)message).Volume;
            sprava.Car       = ((MyMessage)message).Car;
            sprava.Addressee = MyAgent.FindAssistant(SimId.ProcessPresunNaStavbu);
            StartContinualAssistant(sprava);
        }
        //meta! sender="PlanovacDovozMaterialu", id="55", type="Finish"
        public void ProcessFinishPlanovacDovozMaterialu(MessageForm message)
        {
            message.Code      = Mc.DovozMaterialu;
            message.Addressee = MySim.FindAgent(SimId.AgentModelu);
            Notice(message);

            MyMessage sprava = new MyMessage(MySim);

            sprava.Name      = ((MyMessage)message).Name;
            sprava.Addressee = MyAgent.FindAssistant(SimId.PlanovacDovozMaterialu);
            StartContinualAssistant(sprava);
        }
        //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.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);
            }
        }
Exemplo n.º 13
0
        public override void PrepareReplication()
        {
            MyMessage sprava  = new MyMessage(MySim);
            double    delTime = Timer.NewWorkDayStartsAt(MySim.CurrentTime, Settings.Constants.NakladacAStartsAt);

            sprava.Name      = "A";
            sprava.Code      = Mc.KoniecPracovnejDoby;
            sprava.Addressee = MyAgent.FindAssistant(SimId.PlanovacPracovnejDoby);
            Hold(delTime, sprava);

            MyMessage sprava2  = new MyMessage(MySim);
            double    delTime2 = Timer.NewWorkDayStartsAt(MySim.CurrentTime, Settings.Constants.NakladacBStartsAt);

            sprava2.Name      = "B";
            sprava2.Code      = Mc.KoniecPracovnejDoby;
            sprava2.Addressee = MyAgent.FindAssistant(SimId.PlanovacPracovnejDoby);
            Hold(delTime2, sprava2);
        }
        //meta! sender="PlanovacOdvozMaterialu", id="125", type="Finish"
        public void ProcessFinishPlanovacOdvozMaterialu(MessageForm message)
        {
            // notice agentovi modelu -> dopravy -> Stavby

            MyMessage spravaDoprava = new MyMessage(MySim);

            spravaDoprava.Volume    = ((MyMessage)message).Volume;
            spravaDoprava.Code      = Mc.OdvozMaterialu;
            spravaDoprava.Addressee = MySim.FindAgent(SimId.AgentModelu);
            Notice(spravaDoprava);

            // naplanovat dalsi proces - ak je na stavbe dostatok materialu, TO-DO
            MyMessage novyOdvoz = new MyMessage(MySim);

            novyOdvoz.Code      = Mc.OdvozMaterialu;
            novyOdvoz.Addressee = MyAgent.FindAssistant(SimId.PlanovacOdvozMaterialu);
            StartContinualAssistant(novyOdvoz);
        }
Exemplo n.º 15
0
        //meta! sender="AgentVozidiel", id="42", type="Notice"
        public void ProcessPrichodCestuZastavka(MessageForm message)
        {
            var ms       = (MyMessage)message;
            var zastavka = MyAgent.ZastavkaList.FirstOrDefault(x => ms.Cestujuci.Zastavka != null && x.Nazov == ms.Cestujuci.Zastavka);

            zastavka.Enqueue(ms.Cestujuci);
            ms.Cestujuci.ZaciatokCakania = MySim.CurrentTime;
            //if (zastavka.Nazov == "AB")
            //{
            //    Console.WriteLine("AB "+ MySim.CurrentTime);
            //}
            if (zastavka.CakajuceVozidlo != null)
            {
                ms.Addressee = MyAgent.FindAssistant(SimId.ProcesNastupenie);
                ms.Vozidlo   = zastavka.CakajuceVozidlo;
                StartContinualAssistant(ms);
            }
        }
        private void ProcessStartWorkDay(MessageForm message)
        {
            AddUsageStats(message);

            Vehicle naNalozenie;

            if (!MyAgent.AutaSkladkaQueue.IsEmpty())
            {
                lock (Constants.QueueLock)
                {
                    naNalozenie = MyAgent.AutaSkladkaQueue.First.Value;
                    MyAgent.AutaSkladkaQueue.RemoveFirst();
                }
                MyMessage zFrontu = MyAgent.MessageSkladkaQueue.First.Value;
                MyAgent.MessageSkladkaQueue.RemoveFirst();

                if (((MyMessage)message).Name == "A")
                {
                    zFrontu.Addressee = MyAgent.FindAssistant(SimId.ProcesNakladacA);
                }
                else
                {
                    zFrontu.Addressee = MyAgent.FindAssistant(SimId.ProcesNakladacB);
                }

                zFrontu.Code         = Mc.NalozAuto;
                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;
                StartContinualAssistant(zFrontu);
            }
        }
Exemplo n.º 17
0
 //meta! sender="AgentStavby", id="37", type="Response"
 public void ProcessVylozAuto(MessageForm message)
 {
     // vykladanie skoncilo, auto pojde na prejazd
     message.Addressee = MyAgent.FindAssistant(SimId.ProcessPresunNaPrejazd);
     StartContinualAssistant(message);
 }
        //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);
            }
        }
        //meta! sender="ProcesNakladacA", id="64", type="Finish"
        public void ProcessFinishProcesNakladacA(MessageForm message)
        {
            //ak je spusteny mod fullLoad
            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.NakladacAIsOccupied = false;

                return;
            }

            //ak je plny, na skladne nic nie je alebo je vypnuty, tak auto posle dalej
            if (((MyMessage)message).Car.RealVolume == ((MyMessage)message).Car.Volume ||
                MyAgent.MaterialNaSkladke == 0 || !MyAgent.NakladacAIsWorking())
            {
                MyAgent.NakladacAIsOccupied = false;

                message.Addressee = MySim.FindAgent(SimId.AgentDopravy);
                message.Code      = Mc.NalozAuto;
                Response(message);


                // ak v rade niekto dalsi caka, zacne sa znova nakladanie
                Vehicle naNalozenie;
                if (!MyAgent.AutaSkladkaQueue.IsEmpty() && MyAgent.NakladacAIsWorking() &&
                    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.ProcesNakladacA);
                    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.NakladacAIsOccupied = true;
                    AStartedWorking             = MySim.CurrentTime;

                    StartContinualAssistant(zFrontu);
                }
            }
            else
            {
                //auto odoslane naspat na doplnenie
                ((MyMessage)message).Car.ToUnload = LoadCarWith(((MyMessage)message).Car.Volume -
                                                                ((MyMessage)message).Car.RealVolume);

                MyAgent.NakladacAIsOccupied = true;
                AStartedWorking             = MySim.CurrentTime;

                message.Addressee = MyAgent.FindAssistant(SimId.ProcesNakladacA);
                message.Code      = Mc.NalozAuto;
                StartContinualAssistant(message);
            }
        }
Exemplo n.º 20
0
 //meta! sender="ProcessPresunNaPrejazd", id="110", type="Finish"
 public void ProcessFinishProcessPresunNaPrejazd(MessageForm message)
 {
     message.Addressee = MyAgent.FindAssistant(SimId.ProcessPresunNaSkladku);
     message.Code      = Mc.NalozAuto;
     StartContinualAssistant(message);
 }