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