2 using System.Collections.Generic;
3 using System.Collections.Immutable;
9 private UInt16 nextFragmentedMessageId = 0;
10 private readonly List<MessageFragment> fragments =
new List<MessageFragment>();
14 UInt16 msgId = nextFragmentedMessageId;
15 nextFragmentedMessageId++;
17 int roundedByteCount = bytes.Length;
18 roundedByteCount += (MessageFragment.MaxSize - (roundedByteCount % MessageFragment.MaxSize)) % MessageFragment.MaxSize;
20 int fragmentCount = roundedByteCount / MessageFragment.MaxSize;
22 fragments.EnsureCapacity(fragmentCount);
23 for (
int i = 0; i < fragmentCount; i++)
25 var subset = bytes[(i * MessageFragment.MaxSize)..];
26 if (subset.Length > MessageFragment.MaxSize) { subset = subset[..MessageFragment.MaxSize]; }
28 fragments.Add(
new MessageFragment(
29 FragmentId:
new MessageFragment.Id(
30 FragmentIndex: (ushort)i,
31 FragmentCount: (ushort)fragmentCount,
33 Data: subset.ToArray().ToImmutableArray()));
36 return fragments.ToImmutableArray();
ImmutableArray< MessageFragment > FragmentMessage(ReadOnlySpan< byte > bytes)