Пример #1
0
        /// <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 });
                }
            }
        }
Пример #2
0
        /// <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("Нужно что то делать если ни у кого из владельцев нет нужных данных.");
                     * }*/
                }
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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)));
            }
        }
Пример #5
0
 public virtual void AddDataCell(IEnumerable <DataCell> data_cells)
 {
     _dataCellRepository.Add(data_cells);
 }