createInitialMessage static method
Creates an initial client message (NEG-OPEN query payload)
Implementation
static Uint8List createInitialMessage(
List<NegentropyItem> items, int idSize) {
items.sort((a, b) {
final tsCmp = a.timestamp.compareTo(b.timestamp);
if (tsCmp != 0) return tsCmp;
return _compareBytes(a.id, b.id);
});
final output = BytesBuilder();
output.addByte(protocolVersion);
// Single range covering all items with fingerprint
// Upper bound - use max timestamp + 1 if we have items, otherwise use a large value
final maxTs = items.isEmpty ? 0x7FFFFFFF : items.last.timestamp + 1;
output.add(encodeVarint(maxTs));
output.addByte(0); // prefix length
// Always send fingerprint mode (even for empty set)
output.addByte(modeFingerprint);
final ids = items.map((i) => i.id).toList();
output.add(calculateFingerprint(ids));
return output.toBytes();
}