feat: 新增对讲收发包调试信息

This commit is contained in:
“DaisyWu” 2025-01-21 15:12:13 +08:00
parent 87f315f79d
commit 0dad04d51c
5 changed files with 159 additions and 13 deletions

View File

@ -7,11 +7,13 @@ import 'package:flutter/services.dart';
import 'package:flutter_bugly/flutter_bugly.dart';
import 'package:get/get.dart';
import 'package:path/path.dart' as path;
import 'package:provider/provider.dart';
import 'package:star_lock/flavors.dart';
import 'package:star_lock/mine/about/debug/debug_tool.dart';
import 'package:star_lock/network/api_provider.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/network/start_chart_api.dart';
import 'package:star_lock/talk/startChart/handle/impl/debug_Info_model.dart';
import 'package:star_lock/talk/startChart/status/appLifecycle_observer.dart';
import 'package:star_lock/tools/bugly/bugly_tool.dart';
import 'package:star_lock/tools/device_info_service.dart';
@ -51,7 +53,10 @@ FutureOr<void> main() async {
DeBug.showFloatWidget();
}
});
runApp(MyApp(isLogin: isLogin));
runApp(MultiProvider(providers: [
ChangeNotifierProvider(create: (_) => DebugInfoModel()),
], child: MyApp(isLogin: isLogin)));
// runApp(MyApp(isLogin: isLogin));
});
if (AppPlatform.isAndroid) {

View File

@ -0,0 +1,22 @@
import 'package:flutter/foundation.dart';
class DebugInfoModel with ChangeNotifier {
int _recvDataRate = 0;
int _recvPacketCount = 0;
int _sendDataRate = 0;
int _sendPacketCount = 0;
int get recvDataRate => _recvDataRate;
int get recvPacketCount => _recvPacketCount;
int get sendDataRate => _sendDataRate;
int get sendPacketCount => _sendPacketCount;
void updateDebugInfo(int recvDataRate, int recvPacketCount, int sendDataRate,
int sendPacketCount) {
_recvDataRate = recvDataRate;
_recvPacketCount = recvPacketCount;
_sendDataRate = sendDataRate;
_sendPacketCount = sendPacketCount;
notifyListeners();
}
}

View File

@ -1,25 +1,71 @@
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:path_provider/path_provider.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/talk/call/g711.dart';
import 'package:star_lock/talk/startChart/constant/message_type_constant.dart';
import 'package:star_lock/talk/startChart/constant/talk_status.dart';
import 'package:star_lock/talk/startChart/entity/scp_message.dart';
import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart';
import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart';
import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart';
import 'package:star_lock/talk/startChart/proto/generic.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_data.pbserver.dart';
import 'package:star_lock/talk/startChart/proto/talk_data_h264_frame.pb.dart';
// class UdpTalkDataHandler extends ScpMessageBaseHandle
// implements ScpMessageHandler {
class UdpTalkDataHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
factory UdpTalkDataHandler() {
return _instance;
}
UdpTalkDataHandler._internal();
static final UdpTalkDataHandler _instance = UdpTalkDataHandler._internal();
int _recentRecvDataRate = 0;
int _recentRecvPacketCount = 0;
int _recentSendDataRate = 0;
int _recentSendPacketCount = 0;
int _lastRecvDataRate = 0;
int _lastRecvPacketCount = 0;
int _lastSendDataRate = 0;
int _lastSendPacketCount = 0;
void updateRecvDataRate(int dataSize) {
_recentRecvDataRate += dataSize;
_recentRecvPacketCount++;
}
void updateSendDataRate(int dataSize) {
_recentSendDataRate += dataSize;
_recentSendPacketCount++;
}
void resetDataRates() {
_lastRecvDataRate = _recentRecvDataRate;
_lastRecvPacketCount = _recentRecvPacketCount;
_lastSendDataRate = _recentSendDataRate;
_lastSendPacketCount = _recentSendPacketCount;
_recentRecvDataRate = 0;
_recentRecvPacketCount = 0;
_recentSendDataRate = 0;
_recentSendPacketCount = 0;
}
int getLastRecvDataRate() {
return _lastRecvDataRate;
}
int getLastRecvPacketCount() {
return _lastRecvPacketCount;
}
int getLastSendDataRate() {
return _lastSendDataRate;
}
int getLastSendPacketCount() {
return _lastSendPacketCount;
}
@override
void handleReq(ScpMessage scpMessage) {}
@ -33,6 +79,7 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle
void handleRealTimeData(ScpMessage scpMessage) {
//
talkDataOverTimeTimerManager.renew();
if (scpMessage.Payload != null) {
final TalkData talkData = scpMessage.Payload;
//

View File

@ -4,7 +4,9 @@ import 'dart:math';
import 'dart:typed_data';
import 'package:fixnum/fixnum.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/flavors.dart';
@ -24,6 +26,8 @@ import 'package:star_lock/talk/startChart/entity/report_information_data.dart';
import 'package:star_lock/talk/startChart/entity/scp_message.dart';
import 'package:star_lock/talk/startChart/entity/star_chart_register_node_entity.dart';
import 'package:star_lock/talk/startChart/exception/start_chart_message_exception.dart';
import 'package:star_lock/talk/startChart/handle/impl/debug_Info_model.dart';
import 'package:star_lock/talk/startChart/handle/impl/udp_talk_data_handler.dart';
import 'package:star_lock/talk/startChart/handle/other/do_sign.dart';
import 'package:star_lock/talk/startChart/handle/other/talke_data_over_time_timer_manager.dart';
import 'package:star_lock/talk/startChart/handle/other/talke_ping_over_time_timer_manager.dart';
@ -211,7 +215,20 @@ class StartChartManage {
_udpSocket!.broadcastEnabled = true;
///
_onReceiveData(_udpSocket!);
_onReceiveData(_udpSocket!, Get.context!);
//
Timer.periodic(Duration(seconds: 1), (Timer t) {
UdpTalkDataHandler().resetDataRates();
//
Provider.of<DebugInfoModel>(Get.context!, listen: false)
.updateDebugInfo(
UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // KB
UdpTalkDataHandler().getLastRecvPacketCount(),
UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // KB
UdpTalkDataHandler().getLastSendPacketCount(),
);
});
}).catchError((error) {
_log(text: 'Failed to bind UDP socket: $error');
});
@ -686,6 +703,15 @@ class StartChartManage {
'❌Udp send data error----> $result ${message.length}');
// _udpSocket = null;
}
UdpTalkDataHandler().updateSendDataRate(message.length);
//
Provider.of<DebugInfoModel>(Get.context!, listen: false).updateDebugInfo(
UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // KB
UdpTalkDataHandler().getLastRecvPacketCount(),
UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // KB
UdpTalkDataHandler().getLastSendPacketCount(),
);
}
//
@ -878,13 +904,23 @@ class StartChartManage {
}
//
void _onReceiveData(RawDatagramSocket socket) {
void _onReceiveData(RawDatagramSocket socket, BuildContext context) {
socket.listen((RawSocketEvent event) {
if (event == RawSocketEvent.read) {
Datagram? dg = socket.receive();
try {
if (dg?.data != null) {
final deserialize = ScpMessage.deserialize(dg!.data);
UdpTalkDataHandler().updateRecvDataRate(dg.data.length);
//
Provider.of<DebugInfoModel>(context, listen: false).updateDebugInfo(
UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // KB
UdpTalkDataHandler().getLastRecvPacketCount(),
UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // KB
UdpTalkDataHandler().getLastSendPacketCount(),
);
if (deserialize != null) {
//
_handleUdpResultData(deserialize);

View File

@ -11,9 +11,12 @@ import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
import 'package:star_lock/talk/call/callTalk.dart';
import 'package:star_lock/talk/startChart/constant/talk_status.dart';
import 'package:star_lock/talk/startChart/handle/impl/debug_Info_model.dart';
import 'package:star_lock/talk/startChart/handle/impl/udp_talk_data_handler.dart';
import 'package:star_lock/talk/startChart/views/talkView/talk_view_logic.dart';
import 'package:star_lock/talk/startChart/views/talkView/talk_view_state.dart';
@ -204,6 +207,38 @@ class _TalkViewPageState extends State<TalkViewPage>
),
)
: Container()),
Visibility(
visible: true,
child: Positioned(
top: 20, //
left: 20,
right: 20, //
child: Container(
height: 100, // 100
color: Colors.black.withOpacity(0.5), //
padding: const EdgeInsets.all(10), //
child: Consumer<DebugInfoModel>(
builder: (BuildContext context, DebugInfoModel debugInfo,
Widget? child) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'recv ${debugInfo.recvDataRate}KB/s [${debugInfo.recvPacketCount}]',
style: const TextStyle(
color: Colors.white), //
),
Text(
'send ${debugInfo.sendDataRate}KB/s [${debugInfo.sendPacketCount}]',
style: const TextStyle(
color: Colors.white), //
),
],
);
},
),
),
)),
],
),
),
@ -489,6 +524,7 @@ class _TalkViewPageState extends State<TalkViewPage>
state.videoBuffer.clear();
state.listData.value = Uint8List(0);
CallTalk().finishAVData();
UdpTalkDataHandler().resetDataRates();
super.dispose();
}
}