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

@@ -18,7 +18,7 @@ class LiveRoomChat extends StatefulWidget {
class _LiveRoomChatState extends State<LiveRoomChat> { class _LiveRoomChatState extends State<LiveRoomChat> {
final List<Widget> _items = []; final List<Widget> _items = [];
late LiveMessageStream msgStream; LiveMessageStream? msgStream;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -47,11 +47,11 @@ class _LiveRoomChatState extends State<LiveRoomChat> {
msgStream = LiveMessageStream( msgStream = LiveMessageStream(
streamToken: info.data.token, streamToken: info.data.token,
roomId: widget.roomId, roomId: widget.roomId,
uid: GStorage.userInfo.get('userInfoCache').mid ?? 0, uid: GStorage.userInfo.get('userInfoCache')?.mid ?? 0,
host: info.data.hostList[0].host, host: info.data.hostList[0].host,
port: info.data.hostList[0].port, port: info.data.hostList[0].port,
); );
msgStream.addEventListener((obj) { msgStream?.addEventListener((obj) {
if (obj['cmd'] == 'DANMU_MSG') { if (obj['cmd'] == 'DANMU_MSG') {
// logger.i(' 原始弹幕消息 ======> ${jsonEncode(obj)}'); // logger.i(' 原始弹幕消息 ======> ${jsonEncode(obj)}');
setState(() { setState(() {
@@ -97,7 +97,7 @@ class _LiveRoomChatState extends State<LiveRoomChat> {
}); });
} }
}); });
msgStream.init(); msgStream?.init();
} }
}); });
super.initState(); super.initState();
@@ -105,7 +105,7 @@ class _LiveRoomChatState extends State<LiveRoomChat> {
@override @override
void dispose() { void dispose() {
msgStream.close(); msgStream?.close();
super.dispose(); super.dispose();
} }

View File

@@ -47,9 +47,10 @@ class PackageHeader {
return bytes.buffer.asUint8List(); return bytes.buffer.asUint8List();
} }
static PackageHeader fromBytesData(Uint8List data) { static PackageHeader? fromBytesData(Uint8List data) {
if (data.length < 10) { if (data.length < 10) {
throw Exception("数据不足以解析PackageHeader"); getLogger().i('数据不足以解析PackageHeader');
return null;
} }
final byteData = ByteData.sublistView(data); final byteData = ByteData.sublistView(data);
@@ -191,7 +192,8 @@ class LiveMessageStream {
socket.add(authPackage.marshal()); socket.add(authPackage.marshal());
logger.d('$logTag ===> 发送认证包'); logger.d('$logTag ===> 发送认证包');
await for (var data in socket) { await for (var data in socket) {
PackageHeader header = PackageHeader.fromBytesData(data); PackageHeader? header = PackageHeader.fromBytesData(data);
if (header != null) {
List<int> decompressedData = []; List<int> decompressedData = [];
//心跳包回复不用处理 //心跳包回复不用处理
if (header.operationCode == 3) continue; if (header.operationCode == 3) continue;
@@ -217,6 +219,7 @@ class LiveMessageStream {
logger.w(e); logger.w(e);
} }
} }
}
socket.close(); socket.close();
} catch (e) { } catch (e) {
logger.e('$logTag ===> TCP连接失败: $e'); logger.e('$logTag ===> TCP连接失败: $e');
@@ -225,15 +228,18 @@ class LiveMessageStream {
void _processingData(List<int> data) { void _processingData(List<int> data) {
try { try {
var subHeader = PackageHeader.fromBytesData(Uint8List.fromList(data)); PackageHeader? subHeader =
var msgBody = PackageHeader.fromBytesData(Uint8List.fromList(data));
utf8.decode(data.sublist(subHeader.headerSize, subHeader.totalSize)); if (subHeader != null) {
var msgBody = utf8
.decode(data.sublist(subHeader.headerSize, subHeader.totalSize));
for (var f in eventListeners) { for (var f in eventListeners) {
f(jsonDecode(msgBody)); f(jsonDecode(msgBody));
} }
if (subHeader.totalSize < data.length) { if (subHeader.totalSize < data.length) {
_processingData(data.sublist(subHeader.totalSize)); _processingData(data.sublist(subHeader.totalSize));
} }
}
} catch (e) { } catch (e) {
logger.e('ParseHeader错误: $e'); logger.e('ParseHeader错误: $e');
} }