public void ReconstructMessagePage(BMSByte page, EndPoint sender) { Sender = sender; if (MessageReconstructed) { return; } if (page.Size == 0) { throw new ArgumentException($"The input page buffer had an invalid size of 0"); } var pageNumber = page.GetBasicType <int>(); var totalSize = page.GetBasicType <int>(); if (page.Size == 0) { throw new ArgumentException($"The input page buffer had an invalid size of 0"); } if (page.Size + page.StartPointer == totalSize) { MessageBuffer.Append(page); MessageReconstructed = true; } else { if (_pages == null) { double actualSize = page.StartPointer + page.Size; MessageBuffer.SetArraySize(totalSize); int count = (int)System.Math.Ceiling(totalSize / actualSize); _pages = new BMSByte[count]; } if (_pages[pageNumber] == null) { _pages[pageNumber] = _bufferPool.Get(page.Size); _pages[pageNumber].Clone(page); } if (IsDone()) { foreach (var p in _pages) { MessageBuffer.Append(p); _bufferPool.Release(p); } MessageReconstructed = true; } } }