оптимизация: слегоньца набурмалдил

This commit is contained in:
Jganenok
2026-06-03 13:55:14 +07:00
parent 4bdb0e70cf
commit db9de4d8a2
9 changed files with 229 additions and 123 deletions
+21 -15
View File
@@ -92,25 +92,31 @@ const int _compressionThreshold = 32;
/// `0` — без сжатия, иначе `(rawLen ~/ compLen) + 1` (множитель размера, по
/// которому получатель выделяет буфер под распаковку).
Uint8List packPacket(int opcode, Map<dynamic, dynamic> payload, {int seq = 0}) {
final header = ByteData(headerSize);
final Uint8List raw = msgpack.serialize(payload);
final List<int> body;
final int flag;
if (raw.length < _compressionThreshold) {
body = raw;
flag = 0;
} else {
body = lz4Compress(raw);
flag = (raw.length ~/ body.length) + 1;
}
final out = Uint8List(headerSize + body.length);
final header = ByteData.view(out.buffer, out.offsetInBytes, headerSize);
header.setUint8(0, 10);
header.setUint8(1, CmdType.request);
header.setUint16(2, seq, Endian.big);
header.setUint16(4, opcode, Endian.big);
final raw = Uint8List.fromList(msgpack.serialize(payload));
if (raw.length < _compressionThreshold) {
header.setUint32(6, raw.length & 0xFFFFFF, Endian.big);
return Uint8List.fromList(header.buffer.asUint8List() + raw);
}
final compressed = lz4Compress(raw);
final compLen = compressed.length;
final flag = (raw.length ~/ compLen) + 1;
header.setUint32(6, ((flag & 0xFF) << 24) | (compLen & 0xFFFFFF), Endian.big);
return Uint8List.fromList(header.buffer.asUint8List() + compressed);
header.setUint32(
6,
((flag & 0xFF) << 24) | (body.length & 0xFFFFFF),
Endian.big,
);
out.setRange(headerSize, out.length, body);
return out;
}
/// Распаковка пакета от сервера