fix: live

This commit is contained in:
bggRGjQaUbCoE
2024-11-03 21:59:32 +08:00
parent 39e335549c
commit 4fec26c1ba
2 changed files with 44 additions and 38 deletions

View File

@@ -47,9 +47,10 @@ class PackageHeader {
return bytes.buffer.asUint8List();
}
static PackageHeader fromBytesData(Uint8List data) {
static PackageHeader? fromBytesData(Uint8List data) {
if (data.length < 10) {
throw Exception("数据不足以解析PackageHeader");
getLogger().i('数据不足以解析PackageHeader');
return null;
}
final byteData = ByteData.sublistView(data);
@@ -191,30 +192,32 @@ class LiveMessageStream {
socket.add(authPackage.marshal());
logger.d('$logTag ===> 发送认证包');
await for (var data in socket) {
PackageHeader header = PackageHeader.fromBytesData(data);
List<int> decompressedData = [];
//心跳包回复不用处理
if (header.operationCode == 3) continue;
if (header.operationCode == 8) {
_heartBeat();
}
try {
switch (header.protocolVer) {
case 0:
case 1:
_processingData(data);
continue;
case 2:
decompressedData = ZLibDecoder().convert(data.sublist(0x10));
break;
case 3:
decompressedData =
const BrotliDecoder().convert(data.sublist(0x10));
//print('Body: ${utf8.decode()}');
PackageHeader? header = PackageHeader.fromBytesData(data);
if (header != null) {
List<int> decompressedData = [];
//心跳包回复不用处理
if (header.operationCode == 3) continue;
if (header.operationCode == 8) {
_heartBeat();
}
try {
switch (header.protocolVer) {
case 0:
case 1:
_processingData(data);
continue;
case 2:
decompressedData = ZLibDecoder().convert(data.sublist(0x10));
break;
case 3:
decompressedData =
const BrotliDecoder().convert(data.sublist(0x10));
//print('Body: ${utf8.decode()}');
}
_processingData(decompressedData);
} catch (e) {
logger.w(e);
}
_processingData(decompressedData);
} catch (e) {
logger.w(e);
}
}
socket.close();
@@ -225,14 +228,17 @@ class LiveMessageStream {
void _processingData(List<int> data) {
try {
var subHeader = PackageHeader.fromBytesData(Uint8List.fromList(data));
var msgBody =
utf8.decode(data.sublist(subHeader.headerSize, subHeader.totalSize));
for (var f in eventListeners) {
f(jsonDecode(msgBody));
}
if (subHeader.totalSize < data.length) {
_processingData(data.sublist(subHeader.totalSize));
PackageHeader? subHeader =
PackageHeader.fromBytesData(Uint8List.fromList(data));
if (subHeader != null) {
var msgBody = utf8
.decode(data.sublist(subHeader.headerSize, subHeader.totalSize));
for (var f in eventListeners) {
f(jsonDecode(msgBody));
}
if (subHeader.totalSize < data.length) {
_processingData(data.sublist(subHeader.totalSize));
}
}
} catch (e) {
logger.e('ParseHeader错误: $e');