//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="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);
            }
        }