Example #1
0
        /// <summary>
        /// The CloneLaborer.
        /// </summary>
        /// <param name="laborer">The laborer<see cref="Laborer"/>.</param>
        /// <returns>The <see cref="Laborer"/>.</returns>
        private Laborer CloneLaborer(Laborer laborer)
        {
            Laborer _laborer = new Laborer(laborer.LaborerName, laborer.Work);

            _laborer.Input     = laborer.Input;
            _laborer.EvokersIn = laborer.EvokersIn;
            _laborer.Labor     = laborer.Labor;
            return(_laborer);
        }
        public Labor(Laborer laborer) : base(() => laborer.Work.Execute())
        {
            Name          = laborer.LaborerName;
            Laborer       = laborer;
            Laborer.Labor = this;
            Box           = new NoteBox(Laborer.LaborerName);
            Box.Labor     = this;

            SerialCode = new Ussn(laborer.Work.UniqueKey, 0, 0, 0, 0, DateTime.Now.ToBinary());
        }
        public Labor(string name, IDeputy method) : base(() => method.Execute())
        {
            Name          = name;
            Laborer       = new Laborer(name, method);
            Laborer.Labor = this;
            Box           = new NoteBox(Laborer.LaborerName);
            Box.Labor     = this;

            SerialCode = new Ussn(method.UniqueKey, 0, 0, 0, 0, DateTime.Now.ToBinary());
        }
Example #4
0
        /// <summary>
        /// The ActivateLaborer.
        /// </summary>
        private void ActivateLaborer()
        {
            while (true)
            {
                Laborer worker = null;
                object  input  = null;
                lock (holder)
                {
                    do
                    {
                        while (LaborersQueue.Count == 0)
                        {
                            Monitor.Wait(holder);
                        }
                    } while (!LaborersQueue.TryDequeue(out worker));


                    if (worker != null)
                    {
                        input = worker.Input;
                    }
                }

                if (worker == null)
                {
                    return;
                }

                object output = null;

                if (input != null)
                {
                    if (input is IList)
                    {
                        output = worker.Work.Execute((object[])input);
                    }
                    else
                    {
                        output = worker.Work.Execute(input);
                    }
                }
                else
                {
                    output = worker.Work.Execute();
                }

                lock (holderIO)
                    Outpost(worker, output);
            }
        }
Example #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QuickLabor"/> class.
        /// </summary>
        /// <param name="laborersCount">The laborersCount<see cref="int"/>.</param>
        /// <param name="safeClose">The safeClose<see cref="bool"/>.</param>
        /// <param name="classObject">The classObject<see cref="object"/>.</param>
        /// <param name="methodName">The methodName<see cref="string"/>.</param>
        /// <param name="input">The input<see cref="object[]"/>.</param>
        public QuickLabor(int laborersCount, bool safeClose, object classObject, string methodName, params object[] input)
        {
            IDeputy      am   = new Deputy(classObject, methodName);
            LaborMethods _ant = new LaborMethods();

            _ant.Put(am);
            Lab = new Laboratory(_ant);
            Lab.Scope["Primary"].LaborersCount = laborersCount;
            Lab.RunLaborators();
            Subject = Lab.Scope["Primary"];
            Visor   = Subject.Visor;
            Laborer = Subject.Labors.AsValues().ElementAt(0).Laborer;
            Lab.Elaborate(am.Info.Name, input);
            Subject.Visor.Close(safeClose);
        }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QuickLabor"/> class.
        /// </summary>
        /// <param name="laborersCount">The laborersCount<see cref="int"/>.</param>
        /// <param name="evokerCount">The evokerCount<see cref="int"/>.</param>
        /// <param name="safeClose">The safeClose<see cref="bool"/>.</param>
        /// <param name="method">The method<see cref="IDeputy"/>.</param>
        /// <param name="evoker">The evoker<see cref="IDeputy"/>.</param>
        public QuickLabor(int laborersCount, int evokerCount, bool safeClose, IDeputy method, IDeputy evoker)
        {
            LaborMethods _ant = new LaborMethods();

            _ant.Put(method);
            _ant.Put(evoker);
            Lab = new Laboratory(_ant);
            Lab.Scope["Primary"].LaborersCount = laborersCount;
            Lab.RunLaborators();
            Subject = Lab.Scope["Primary"];
            Visor   = Subject.Visor;
            Laborer = Subject.Labors.AsValues().ElementAt(0).Laborer;
            Laborer.AddEvoker(Subject.Labors.AsCards().Skip(1).First().Value);
            Lab.Elaborate(method.Info.Name, method.ParameterValues);
            Subject.Visor.Close(safeClose);
        }
Example #7
0
 /// <summary>
 /// The Elaborate.
 /// </summary>
 /// <param name="worker">The worker<see cref="Laborer"/>.</param>
 public void Elaborate(Laborer worker)
 {
     lock (holder)
     {
         if (worker != null)
         {
             Laborer Worker = CloneLaborer(worker);
             LaborersQueue.Enqueue(Worker);
             Monitor.Pulse(holder);
         }
         else
         {
             LaborersQueue.Enqueue(DateTime.Now.ToBinary(), worker);
             Monitor.Pulse(holder);
         }
     }
 }
Example #8
0
        /// <summary>
        /// The Outpost.
        /// </summary>
        /// <param name="worker">The worker<see cref="Laborer"/>.</param>
        /// <param name="output">The output<see cref="object"/>.</param>
        private void Outpost(Laborer worker, object output)
        {
            if (output != null)
            {
                worker.Output = output;

                if (worker.EvokersIn != null && worker.EvokersIn.AsValues().Any())
                {
                    List <Note> intios = new List <Note>();
                    foreach (NoteEvoker evoker in worker.EvokersIn.AsValues())
                    {
                        Note intio = new Note(worker.Labor, evoker.Recipient, evoker, null, output);
                        intio.SenderBox = worker.Labor.Box;
                        intios.Add(intio);
                    }

                    if (intios.Any())
                    {
                        Notes.Send(intios);
                    }
                }
            }
        }