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