public List <ElementValuesCollection> SplitForCorrectGrpcMessageSize() { if (DoubleValues.Count < MaxArrayLength && UintValues.Count < MaxArrayLength && ObjectValues.Length < MaxByteStringLength) { return(new List <ElementValuesCollection> { this }); } var result = new List <ElementValuesCollection>(); int doubleIndex = 0; int uintIndex = 0; int objectIndex = 0; int objectByteIndex = 0; ElementValuesCollection?prevElementValuesCollection = null; while (doubleIndex < DoubleAliases.Count || uintIndex < UintAliases.Count || objectIndex < ObjectAliases.Count || objectByteIndex < ObjectValues.Length) { var elementValuesCollection = new ElementValuesCollection(); if (prevElementValuesCollection is not null) { string guid = System.Guid.NewGuid().ToString(); prevElementValuesCollection.NextCollectionGuid = guid; elementValuesCollection.Guid = guid; } elementValuesCollection.DoubleAliases.AddRange(DoubleAliases.Skip(doubleIndex).Take(MaxArrayLength)); elementValuesCollection.DoubleValueStatusCodes.AddRange(DoubleValueStatusCodes.Skip(doubleIndex).Take(MaxArrayLength)); elementValuesCollection.DoubleTimestamps.AddRange(DoubleTimestamps.Skip(doubleIndex).Take(MaxArrayLength)); elementValuesCollection.DoubleValues.AddRange(DoubleValues.Skip(doubleIndex).Take(MaxArrayLength)); elementValuesCollection.UintAliases.AddRange(UintAliases.Skip(uintIndex).Take(MaxArrayLength)); elementValuesCollection.UintValueStatusCodes.AddRange(UintValueStatusCodes.Skip(uintIndex).Take(MaxArrayLength)); elementValuesCollection.UintTimestamps.AddRange(UintTimestamps.Skip(uintIndex).Take(MaxArrayLength)); elementValuesCollection.UintValues.AddRange(UintValues.Skip(uintIndex).Take(MaxArrayLength)); elementValuesCollection.ObjectAliases.AddRange(ObjectAliases.Skip(objectIndex).Take(MaxArrayLength)); elementValuesCollection.ObjectValueStatusCodes.AddRange(ObjectValueStatusCodes.Skip(objectIndex).Take(MaxArrayLength)); elementValuesCollection.ObjectTimestamps.AddRange(ObjectTimestamps.Skip(objectIndex).Take(MaxArrayLength)); elementValuesCollection.ObjectValues = Google.Protobuf.ByteString.CopyFrom( ObjectValues.Skip(objectByteIndex).Take(MaxByteStringLength).ToArray()); result.Add(elementValuesCollection); doubleIndex += MaxArrayLength; uintIndex += MaxArrayLength; objectIndex += MaxArrayLength; objectByteIndex += MaxByteStringLength; prevElementValuesCollection = elementValuesCollection; } return(result); }
public void CombineWith(ElementValuesCollection nextElementValuesCollection) { Guid = nextElementValuesCollection.Guid; NextCollectionGuid = nextElementValuesCollection.NextCollectionGuid; DoubleAliases.Add(nextElementValuesCollection.DoubleAliases); DoubleValueStatusCodes.Add(nextElementValuesCollection.DoubleValueStatusCodes); DoubleTimestamps.Add(nextElementValuesCollection.DoubleTimestamps); DoubleValues.Add(nextElementValuesCollection.DoubleValues); UintAliases.Add(nextElementValuesCollection.UintAliases); UintValueStatusCodes.Add(nextElementValuesCollection.UintValueStatusCodes); UintTimestamps.Add(nextElementValuesCollection.UintTimestamps); UintValues.Add(nextElementValuesCollection.UintValues); ObjectAliases.Add(nextElementValuesCollection.ObjectAliases); ObjectValueStatusCodes.Add(nextElementValuesCollection.ObjectValueStatusCodes); ObjectTimestamps.Add(nextElementValuesCollection.ObjectTimestamps); ObjectValues = Google.Protobuf.ByteString.CopyFrom( ObjectValues.Concat(nextElementValuesCollection.ObjectValues).ToArray() ); }