mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
fix: live
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,30 +192,32 @@ 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);
|
||||||
List<int> decompressedData = [];
|
if (header != null) {
|
||||||
//心跳包回复不用处理
|
List<int> decompressedData = [];
|
||||||
if (header.operationCode == 3) continue;
|
//心跳包回复不用处理
|
||||||
if (header.operationCode == 8) {
|
if (header.operationCode == 3) continue;
|
||||||
_heartBeat();
|
if (header.operationCode == 8) {
|
||||||
}
|
_heartBeat();
|
||||||
try {
|
}
|
||||||
switch (header.protocolVer) {
|
try {
|
||||||
case 0:
|
switch (header.protocolVer) {
|
||||||
case 1:
|
case 0:
|
||||||
_processingData(data);
|
case 1:
|
||||||
continue;
|
_processingData(data);
|
||||||
case 2:
|
continue;
|
||||||
decompressedData = ZLibDecoder().convert(data.sublist(0x10));
|
case 2:
|
||||||
break;
|
decompressedData = ZLibDecoder().convert(data.sublist(0x10));
|
||||||
case 3:
|
break;
|
||||||
decompressedData =
|
case 3:
|
||||||
const BrotliDecoder().convert(data.sublist(0x10));
|
decompressedData =
|
||||||
//print('Body: ${utf8.decode()}');
|
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();
|
socket.close();
|
||||||
@@ -225,14 +228,17 @@ 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) {
|
||||||
for (var f in eventListeners) {
|
var msgBody = utf8
|
||||||
f(jsonDecode(msgBody));
|
.decode(data.sublist(subHeader.headerSize, subHeader.totalSize));
|
||||||
}
|
for (var f in eventListeners) {
|
||||||
if (subHeader.totalSize < data.length) {
|
f(jsonDecode(msgBody));
|
||||||
_processingData(data.sublist(subHeader.totalSize));
|
}
|
||||||
|
if (subHeader.totalSize < data.length) {
|
||||||
|
_processingData(data.sublist(subHeader.totalSize));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.e('ParseHeader错误: $e');
|
logger.e('ParseHeader错误: $e');
|
||||||
|
|||||||
Reference in New Issue
Block a user