/// <summary> /// Procesa los datos /// </summary> /// <param name="data">Datos</param> /// <param name="caller">Item que lo llama</param> /// <param name="state">Estado de la enumeración</param> public void ProcessData(IData data, ITopologyItem caller, EEnumerableDataState state) { if (data == null) { return; } // Si tiene varios origenes de datos, se tiene que esperar a estan todos llenos IData jdata; if (_Data.Count > 1 && CallMethod != ECallMode.PeerCall) { // Esperamos a que el conjunto esperado esté disponible if (!_Data.SetData(data, caller) && CallMethod == ECallMode.WaitAll) { return; } if (_IsBusy) { return; } _IsBusy = true; // Los datos a devolver tienen que ser los del array jdata = new DataJoin(this, _Data.Items) { HandledDispose = true }; } else { if (_IsBusy) { return; } _IsBusy = true; jdata = data; } // Procesa los datos RaiseOnProcess(EProcessState.PreProcess); IData ret; try { ret = OnProcessData(jdata, state); } catch (Exception e) { OnError(e); ret = null; } RaiseOnProcess(EProcessState.PostProcess); // Siempre que no sea null se reenvia a otros nodos if (ret != null && !(ret is DataBreak)) { // Se los envia a otros procesadores Process.ProcessData(this, ret, UseParallel); // Liberación de recursos if (ret != data && !ret.HandledDispose) { ret.Dispose(); } } _IsBusy = false; }
public virtual IData ProcessData(IDataProcess sender, IData data, EEnumerableDataState state) { return(new DataBreak(sender)); }
/// <summary> /// Recibe una información /// </summary> /// <param name="data">Información</param> /// <param name="state">Estado de la enumeración</param> /// <returns>Devuelve una información</returns> protected virtual IData OnProcessData(IData data, EEnumerableDataState state) { return(data); }