//called when data for any output pin is requested public void Evaluate(int SpreadMax) { if (!_pgready) { return; } if (_typeChanged || _firstFrame || _input.Spread.IsChanged) { Success.SliceCount = _input.Spread.SliceCount; Output.Resize(_input.Spread.SliceCount, i => new MemoryStream(), stream => stream?.Dispose()); _output.ResizeAndDismiss(_input.Spread.SliceCount, i => null); for (int i = 0; i < _input.Spread.SliceCount; i++) { Output[i] = Output[i] == null ? new MemoryStream() : Output[i]; var obj = _input[i]; var buf = _output[i]; if (obj == null) { Output[i].SetLength(0); continue; } Output[i].Position = 0; int length = 0; try { length = _ceras.Serialize(obj, ref buf); Success[i] = true; } catch { Success[i] = false; _ceras = CerasSerializerHelper.Serializer(); Output[i].SetLength(0); continue; } Output[i].SetLength(length); Output[i].Write(buf, 0, length); _output[i] = buf; } Output.Stream.IsChanged = true; } else { Output.Stream.IsChanged = false; } if (_firstFrame) { _firstFrame = false; } if (_typeChanged) { _typeChanged = false; } }
//called when data for any output pin is requested public void Evaluate(int SpreadMax) { if (!_pgready) { return; } if (_typeChanged || _firstFrame || Input.IsChanged) { Success.SliceCount = Input.SliceCount; _output.Spread.SliceCount = Input.SliceCount; _input.ResizeAndDismiss(Input.SliceCount, i => new byte[0]); for (int i = 0; i < Input.SliceCount; i++) { if (Input[i] != null && _input[i].Length < Input[i].Length) { _input[i] = new byte[Input[i].Length]; } if (Input[i] == null || Input[i].Read(_input[i], 0, (int)Input[i].Length) <= 0) { _output[i] = null; continue; } try { if (_output[i] == null) { _output[i] = _ceras.Deserialize <object>(_input[i]); } else { var obj = _output[i]; _ceras.Deserialize(ref obj, _input[i]); _output[i] = obj; } Success[i] = true; } catch { Success[i] = false; _ceras = CerasSerializerHelper.Serializer(); _output[i] = null; continue; } } _output.SetReflectedChanged(true); } else { _output.SetReflectedChanged(false); } if (_firstFrame) { _firstFrame = false; } if (_typeChanged) { _typeChanged = false; } }