예제 #1
0
        private void ProcessPrichodVoz(MessageForm message)
        {
            MyMessage ms = (MyMessage)message;

            ms.Addressee = MySim.FindAgent(SimId.AgentPresunu);
            ms.Code      = Mc.Presun;
            Request(ms);
        }
예제 #2
0
        private void ProcesKoniecPresunu(MessageForm message)
        {
            var ms = (MyMessage)message.CreateCopy();

            ms.Code      = Mc.Presun;
            ms.Addressee = MySim.FindAgent(SimId.AgentVozidiel);
            Response(ms);
        }
예제 #3
0
        //meta! sender="AgentModelu", id="40", type="Notice"
        public void ProcessPrichodCestuVozidlo(MessageForm message)
        {
            var ms = (MyMessage)message.CreateCopy();

            ms.Addressee = MySim.FindAgent(SimId.AgentZasrtavok);
            ms.Code      = Mc.PrichodCestuZastavka;
            Notice(ms);
        }
예제 #4
0
        //meta! sender="AgentOkolia", id="116", type="Notice"
        public void ProcessOdvozMaterialu(MessageForm message)
        {
            MyMessage spravaDoprava = new MyMessage(MySim);

            spravaDoprava.Volume    = ((MyMessage)message).Volume;
            spravaDoprava.Code      = Mc.OdvozMaterialu;
            spravaDoprava.Addressee = MySim.FindAgent(SimId.AgentDopravy);
            Notice(spravaDoprava);
        }
예제 #5
0
        private void OdchodAutobusu(MessageForm message)
        {
            var ms = (MyMessage)message.CreateCopy();

            ms.Addressee = MySim.FindAgent(SimId.AgentVozidiel);
            ms.Code      = Mc.Nastupenie;
            // ms.Vozidlo.Linka.Presuny[((MyMessage)message).Vozidlo.AktualnyPresun].ZastavkaStart.CakajuceVozidlo = null;
            Notice(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;
                }
            }
        }
예제 #7
0
        private void ProcessNovyCest(MessageForm message)
        {
            var ms = (MyMessage)message.CreateCopy();

            ms.Addressee = MySim.FindAgent(SimId.AgentModelu);
            ms.Code      = Mc.NovyCestujuci;
            Notice(ms);
            //ms = (MyMessage)message.CreateCopy();
            //ms.Addressee =MyAgent.FindAssistant(SimId.PlanovacPrichodov);
        }
예제 #8
0
        //meta! sender="AgentOkolia", id="8", type="Notice"
        public void ProcessNovyCestujuci(MessageForm message)
        {
            Cislo++;
            ((MySimulation)MySim).PocetVRepl++;
            var ms = (MyMessage)message.CreateCopy();

            ms.Addressee = MySim.FindAgent(SimId.AgentVozidiel);
            ms.Code      = Mc.PrichodCestuVozidlo;
            Notice(ms);
        }
예제 #9
0
 //meta! sender="ProcessPresunNaSkladku", id="106", type="Finish"
 public void ProcessFinishProcessPresunNaSkladku(MessageForm message)
 {
     foreach (Vehicle car in ((MyMessage)message).cars)
     {
         MyMessage sprava = new MyMessage(MySim);
         sprava.Code      = Mc.NalozAuto;
         sprava.Car       = car;
         sprava.Addressee = MySim.FindAgent(SimId.AgentSkladky);
         Request(sprava);
     }
 }
예제 #10
0
        //meta! sender="AgentPresunu", id="10", type="Response"
        public void ProcessPresun(MessageForm message)
        {
            MyMessage ms = (MyMessage)message.CreateCopy();

            ms.Addressee = MySim.FindAgent(SimId.AgentZasrtavok);
            var vozidlo  = ms.Vozidlo;
            var zastavka = vozidlo.Linka.Presuny[ms.Vozidlo.AktualnyPresun].ZastavkaStart;

            vozidlo.Cesta = zastavka.Nazov;
            ms.Code       = Mc.Nastupenie;
            Notice(ms);
        }
        //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);
        }
예제 #12
0
        private void ProcessInicializacia(MessageForm message)
        {
            // vytvoria sa auta pre konkretny variant simulacie a poslu sa spravy na nakladanie auta agentovi skladky
            message.Addressee = MySim.FindAgent(SimId.AgentDopravy);
            Call(message);
            // v AgentOkolia sa nainicializuju generatory pre dovozcov materialu
            MyMessage sprava = new MyMessage(MySim);

            sprava.Code      = Mc.Inicializacia;
            sprava.Addressee = MySim.FindAgent(SimId.AgentOkolia);
            Call(sprava);
        }
예제 #13
0
        //meta! sender="AgentModelu", id="16", type="Notice"
        public void ProcessNoticeOdchodPacienta(MessageForm message)
        {
            var pacient = ((Sprava)message).Pacient;

            ++MyAgent.PocetPacientovOdidenych;
            MyAgent.OdideniPacienti.Set(pacient.IDPacienta, true);
            MyAgent.CelkovaDobaCakaniaPacientov.AddSample(pacient.CelkovaDobaCakania);
            if (!MyAgent.Generuj && MyAgent.PocetPacientovVojdenych == MyAgent.PocetPacientovOdidenych)
            {
                (MySim as VacCenterSimulation).UpdateStatistikPredUkoncenim();
                MySim.SetMaxSimSpeed();
            }
        }
예제 #14
0
        private void PreratajStat()
        {
            var ag = (AgentPresunu)MySim.FindAgent(SimId.AgentPresunu);

            foreach (var vozidlo in ag.ListVozideil)
            {
                vozidlo.Prerataj(MySim.CurrentTime);
            }

            var a = ((MySimulation)MySim).CasZapasu.TotalSeconds - 6786 + MySim.CurrentTime;

            ((MySimulation)MySim).AktualCas = TimeSpan.FromSeconds(a);
        }
예제 #15
0
        //meta! sender="AgentModelu", id="91", type="Call"
        public void ProcessInicializacia(MessageForm message)
        {
            MyMessage sprava = (MyMessage)message;

            InicializujAuta(sprava.SelectedCars);

            foreach (Vehicle i in MyAgent.EnabledCars)
            {
                sprava           = new MyMessage(MySim, i);
                sprava.Addressee = MySim.FindAgent(SimId.AgentSkladky);
                sprava.Code      = Mc.NalozAuto;
                Request(sprava);
            }

            //ProcessNaplanujZaciatok();
        }
예제 #16
0
        //meta! sender="ProcessPresunNaStavbu", id="108", type="Finish"
        public void ProcessFinishProcessPresunNaStavbu(MessageForm message)
        {
            foreach (Vehicle car in ((MyMessage)message).cars)
            {
                MyMessage sprava = new MyMessage(MySim);
                sprava.Code      = Mc.VylozAuto;
                sprava.Car       = car;
                sprava.Addressee = MySim.FindAgent(SimId.AgentStavby);
                Request(sprava);

                /*car.RealVolume = 0;
                 * message.Addressee = MyAgent.FindAssistant(SimId.ProcessPresunNaPrejazd);
                 * sprava.Car = car;
                 * StartContinualAssistant(sprava);*/
            }
        }
        //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);
        }
예제 #18
0
        //meta! userInfo="Removed from model"
        public void ProcessNastupenie(MessageForm message)
        {
            MyMessage ms = (MyMessage)message;

            if (ms.Vozidlo.AktualnyPresun != ms.Vozidlo.Linka.Presuny.Count - 1)
            {
                ms.Addressee = MySim.FindAgent(SimId.AgentPresunu);
                ms.Code      = Mc.Presun;
                Request(ms);
            }
            else
            {
                if (ms.Vozidlo.Linka.Presuny.Any(x => x.ZastavkaStart.PocetCestujucich != 0 || ((MySimulation)MySim).GenerujeSa))
                {
                    ms.Addressee = MySim.FindAgent(SimId.AgentPresunu);
                    ms.Code      = Mc.Presun;
                    Request(ms);
                }
                else
                {
                    ((MySimulation)MySim).PocetAut--;
                }
            }
        }
예제 #19
0
 private void ProcessDovozMaterialu(MessageForm message)
 {
     message.Addressee = MySim.FindAgent(SimId.AgentSkladky);
     Notice(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);
            }
        }
        //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);
            }
        }
예제 #22
0
 //meta! sender="AgentOkolia", id="35", type="Notice"
 public void ProcessDovozMaterialu(MessageForm message)
 {
     message.Addressee = MySim.FindAgent(SimId.AgentDopravy);
     Notice(message);
 }