/// <summary> /// Событие при завершении вычисления исполнителя. /// </summary> /// <param name="result"></param> private void OnReliseJob(Command result) { if (result.Function.GetType() != typeof(ControlFunction)) { _dataCellRepository.Add(new[] { result.OutputData }); //Console.WriteLine(string.Format("CommandManager.OnReliseJob _readyCommands.Count={0}, _commandHeaders.Count={1}", _readyCommands.Count, _commandHeaders.Count)); } if (_readyCommands.Count > 0) { Command command; if (_readyCommands.TryDequeue(out command)) { _jobManager.AddCommand(command); } } else if (_commandHeaders.Count > 0) { CommandHeader command_header; if (_commandHeaders.TryDequeue(out command_header)) { PrepareOrSendToWait(new[] { command_header }); } } }
/// <summary> /// Запрашивает данные у других узлов. /// </summary> /// <param name="data_cell_headers"></param> private void RequestDataCells(IEnumerable <DataCellHeader> data_cell_headers) { foreach (var data_cell_header in data_cell_headers) { DataCell data_cell = null; /*foreach (var owner in data_cell_header.Owners) * { * data_cell = GetDataCellRequest(data_cell_header, owner.IpAddress); * if (data_cell != null) * { * break; * } * }*/ if (data_cell != null) { _dataCellRepository.Add(new[] { data_cell }); break; } else { /*if (data_cell_header.Owners.Any()) * { * // TODO: Нужно что то делать если ни у кого из владельцев нет нужных данных. * throw new Exception("Нужно что то делать если ни у кого из владельцев нет нужных данных."); * }*/ } } }
private DataCell GetOutputData(DataCellHeader data_cell_header) { var output_data = _dataCellRepository.Get(new[] { data_cell_header }).FirstOrDefault(); if (output_data == null) { output_data = new DataCell() { Header = data_cell_header, HasValue = null, Data = null }; _dataCellRepository.Add(new[] { output_data }); } return(output_data); }
public override void Add(IEnumerable <Function> conteiners, bool send_subsctibers = true) { // AddRange(conteiners); //_itemHeaders.AddRange(conteiners.Select(x => (T_header)x.Header)); foreach (var conteiner in conteiners) { var key = string.Join("/", conteiner.Header.CallStack); if (conteiner is ControlFunction) { var control_function = (ControlFunction)conteiner; int i = 0; foreach (var constant in control_function.Constants) { var callstack = new List <string>(); callstack.Add(conteiner.GetHeader <FunctionHeader>().CallstackToString(".")); callstack.Add(string.Format("const_{0}", i)); _dataCellRepository.Add(new [] { new DataCell() { Header = new DataCellHeader() { CallStack = callstack.ToArray(), }, //HasValue = true, HasValue = true, Data = constant } }); i++; } } AddConteiner(conteiner); AddHeader((FunctionHeader)conteiner.Header); //if (send_subsctibers) //{ List <Action <FunctionHeader> > actions; _subscribes.TryRemove(key, out actions); if (actions != null) { Parallel.Invoke(actions.Select(x => new Action(() => { x.Invoke((FunctionHeader)conteiner.Header); })).ToArray()); } Parallel.Invoke(_unionSubscribe.Select(x => new Action(() => { x.Invoke((FunctionHeader)conteiner.Header); })).ToArray()); //} //Console.WriteLine(string.Format("ContainerRepositoryBase Add Callstack={0}", string.Join("/", conteiner.Header.CallStack))); } }
public virtual void AddDataCell(IEnumerable <DataCell> data_cells) { _dataCellRepository.Add(data_cells); }