Merge branch 'develop_liyi' of http://code.star-lock.cn/StarlockTeam/app-starlock into develop_liyi

# Conflicts:
#	lib/login/login/starLock_login_page.dart
This commit is contained in:
“DaisyWu” 2024-12-12 10:32:59 +08:00
commit 6cda1953ba
24 changed files with 2885 additions and 88 deletions

BIN
assets/demo.h264 Normal file

Binary file not shown.

2684
assets/html/h264.html Normal file

File diff suppressed because it is too large Load Diff

BIN
assets/talk.h264 Normal file

Binary file not shown.

View File

@ -2,6 +2,7 @@ import 'package:get/get.dart';
import 'package:star_lock/common/safetyVerification/safetyVerification_binding.dart';
import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/forgetPassword/starLock_forgetPassword_xhj_page.dart';
import 'package:star_lock/login/login/JMuxerApp.dart';
import 'package:star_lock/login/login/starLock_login_xhj_page.dart';
import 'package:star_lock/login/register/starLock_register_binding.dart';
import 'package:star_lock/login/register/starLock_register_xhj_page.dart';
@ -397,6 +398,7 @@ abstract class Routers {
static const String ownedKeyListPage = '/ownedKeyListPage'; //
static const String starLockLoginPage = '/StarLockLoginPage'; //
static const String LocalHtmlPage = '/LocalHtmlPage'; // LocalHtmlPage
static const String starLockRegisterPage = '/StarLockRegisterPage'; //
static const String starLockForgetPasswordPage =
'/StarLockForgetPasswordPage'; //
@ -638,6 +640,9 @@ abstract class AppRouters {
page: () => F.sw(
skyCall: () => const StarLockLoginPage(),
xhjCall: () => const StarLockLoginXHJPage()),
),GetPage<dynamic>(
name: Routers.LocalHtmlPage,
page: () => LocalHtmlPage(),
),
GetPage<dynamic>(
name: Routers.starLockRegisterPage,

View File

@ -0,0 +1,137 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show ByteData, Uint8List, rootBundle;
import 'package:webview_flutter/webview_flutter.dart';
class LocalHtmlPage extends StatefulWidget {
@override
_LocalHtmlPageState createState() => _LocalHtmlPageState();
}
class _LocalHtmlPageState extends State<LocalHtmlPage> {
late final WebViewController _controller;
@override
void initState() {
super.initState();
_controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..enableZoom(false)
..addJavaScriptChannel(
'Flutter',
onMessageReceived: (message) {
print("来自 HTML 的消息: ${message.message}");
},
);
// HTML
_loadLocalHtml();
_sendFramesToHtml();
}
void _sendFramesToHtml() async {
// assets/demo.h264
final ByteData data = await rootBundle.load('assets/talk.h264');
final List<int> byteData = data.buffer.asUint8List();
int offset = 0;
int frameSize = 0;
// H.264
while (offset < byteData.length) {
//
frameSize = getFrameSize(byteData, offset);
if (frameSize == 0) {
print("No more frames or error in frame size calculation.");
break; // 退
}
//
List<int> frameData = byteData.sublist(offset, offset + frameSize);
// WebView feedDataFromFlutter
String jsCode = "feedDataFromFlutter(${frameData});";
await _controller.runJavaScript(jsCode);
//
offset += frameSize;
// 22
await Future.delayed(Duration(milliseconds: (1000 / 22).toInt()));
}
}
int getFrameSize(List<int> data, int offset) {
// Start Code (0x000001 0x00000001)
const List<int> startCode1 = [0, 0, 0, 1]; // Start Code: 0x000001
const List<int> startCode2 = [
0,
0,
1
]; // Start Code: 0x000001 (0x00000001 version)
// Start Code
int startCodeStart = -1;
int startCodeEnd = -1;
for (int i = offset; i < data.length - 3; i++) {
// Start Code (0x000001 0x00000001)
if (_matchesStartCode(data, i, startCode1)) {
startCodeStart = i;
startCodeEnd = i + startCode1.length;
break;
} else if (_matchesStartCode(data, i, startCode2)) {
startCodeStart = i;
startCodeEnd = i + startCode2.length;
break;
}
}
// Start Code 0
if (startCodeStart == -1) return 0;
// Start Code
int nextStartCodeStart = -1;
for (int i = startCodeEnd; i < data.length - 3; i++) {
if (_matchesStartCode(data, i, startCode1) ||
_matchesStartCode(data, i, startCode2)) {
nextStartCodeStart = i;
break;
}
}
// Start Code NAL
if (nextStartCodeStart == -1) {
return data.length - startCodeStart;
}
// NAL
return nextStartCodeStart - startCodeStart;
}
// Start Code
bool _matchesStartCode(List<int> data, int index, List<int> startCode) {
for (int i = 0; i < startCode.length; i++) {
if (data[index + i] != startCode[i]) {
return false;
}
}
return true;
}
Future<void> _loadLocalHtml() async {
final String fileHtmlContent =
await rootBundle.loadString('assets/html/h264.html');
_controller.loadHtmlString(fileHtmlContent);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("加载本地 HTML"),
),
body: WebViewWidget(controller: _controller),
);
}
}

View File

@ -250,6 +250,13 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
// );
// },
// ),
SubmitBtn(
btnName: '跳转至html',
onClick: () {
Get.toNamed(Routers.LocalHtmlPage);
},
),
SizedBox(height: 50.w),
Row(
mainAxisAlignment: MainAxisAlignment.center,

View File

@ -10,9 +10,8 @@ import 'package:star_lock/talk/startChart/proto/generic.pb.dart';
import '../../start_chart_manage.dart';
class UdpBlePassThroughHandler extends ScpMessageBaseHandle implements ScpMessageHandler {
class UdpBlePassThroughHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handleReq(ScpMessage scpMessage) {
final BleResp bleResp = scpMessage.Payload;
@ -25,12 +24,8 @@ class UdpBlePassThroughHandler extends ScpMessageBaseHandle implements ScpMessag
}
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
void handleInvalidReq(ScpMessage scpMessage) {}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
void handleRealTimeData(ScpMessage scpMessage) {}
}

View File

@ -6,9 +6,8 @@ import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart';
import '../../start_chart_manage.dart';
class UdpEchoTestHandler extends ScpMessageBaseHandle implements ScpMessageHandler {
class UdpEchoTestHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handleReq(ScpMessage scpMessage) {
// TODO:
@ -21,12 +20,8 @@ class UdpEchoTestHandler extends ScpMessageBaseHandle implements ScpMessageHandl
}
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
void handleInvalidReq(ScpMessage scpMessage) {}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
void handleRealTimeData(ScpMessage scpMessage) {}
}

View File

@ -27,11 +27,11 @@ class UdpGateWayResetHandler extends ScpMessageBaseHandle implements ScpMessageH
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
}

View File

@ -10,8 +10,6 @@ import '../../start_chart_manage.dart';
class UdpGateWayTransferHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handleReq(ScpMessage scpMessage) {
// TODO:
@ -27,12 +25,8 @@ class UdpGateWayTransferHandler extends ScpMessageBaseHandle
}
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
void handleInvalidReq(ScpMessage scpMessage) {}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
void handleRealTimeData(ScpMessage scpMessage) {}
}

View File

@ -31,12 +31,8 @@ class UdpGoOnlineHandler extends ScpMessageBaseHandle
}
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
void handleInvalidReq(ScpMessage scpMessage) {}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
void handleRealTimeData(ScpMessage scpMessage) {}
}

View File

@ -7,9 +7,8 @@ import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart';
import '../../start_chart_manage.dart';
class UdpHeartBeatHandler extends ScpMessageBaseHandle implements ScpMessageHandler {
class UdpHeartBeatHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handleReq(ScpMessage scpMessage) {
// TODO:
@ -32,12 +31,8 @@ class UdpHeartBeatHandler extends ScpMessageBaseHandle implements ScpMessageHand
}
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
void handleInvalidReq(ScpMessage scpMessage) {}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
void handleRealTimeData(ScpMessage scpMessage) {}
}

View File

@ -25,11 +25,11 @@ class UdpRemoteUnLockHandler extends ScpMessageBaseHandle implements ScpMessageH
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
}

View File

@ -36,18 +36,17 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle
stopRingtone();
//
talkStatus.setDuringCall();
stopRingtone();
}
}
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
//
@ -63,6 +62,7 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle
startChartManage.stopTalkPingMessageTimer();
startChartManage.stopTalkExpectMessageTimer();
talkStatus.setNotTalkPing();
talkStatus.setEnd();
});
}
@ -76,6 +76,7 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle
startChartManage.stopTalkPingMessageTimer();
startChartManage.stopTalkExpectMessageTimer();
talkStatus.setNotTalkData();
talkStatus.setEnd();
});
}

View File

@ -29,11 +29,11 @@ class UdpTalkExpectHandler extends ScpMessageBaseHandle
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
}

View File

@ -38,11 +38,11 @@ class UdpTalkHangUpHandler extends ScpMessageBaseHandle
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
}

View File

@ -6,7 +6,6 @@ import 'package:star_lock/talk/startChart/proto/generic.pb.dart';
class UdpTalkPingHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handleReq(ScpMessage scpMessage) {
// TODO:
@ -19,17 +18,12 @@ class UdpTalkPingHandler extends ScpMessageBaseHandle
if (checkGenericRespSuccess(genericResp)) {
//
talkePingOverTimeTimerManager.receiveMessage();
}
}
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
void handleInvalidReq(ScpMessage scpMessage) {}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
void handleRealTimeData(ScpMessage scpMessage) {}
}

View File

@ -10,7 +10,6 @@ import '../../start_chart_manage.dart';
class UdpTalkPushHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handleReq(ScpMessage scpMessage) {
// TODO:
@ -24,13 +23,8 @@ class UdpTalkPushHandler extends ScpMessageBaseHandle
}
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
void handleInvalidReq(ScpMessage scpMessage) {}
@override
void handleRealTimeData(ScpMessage scpMessage
) {
// TODO: implement handleRealTimeData
}
void handleRealTimeData(ScpMessage scpMessage) {}
}

View File

@ -24,11 +24,11 @@ class UdpTalkReceiverTransferHandler extends ScpMessageBaseHandle
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
}

View File

@ -13,7 +13,6 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle
@override
void handleReq(ScpMessage scpMessage) {
//
print('收到接听拒绝请求');
startChartManage.sendGenericRespSuccessMessage(
ToPeerId: scpMessage.FromPeerId!,
FromPeerId: scpMessage.ToPeerId!,
@ -23,25 +22,26 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle
startChartManage.stopTalkExpectMessageTimer();
talkStatus.setRejected();
stopRingtone();
talkStatus.setEnd();
}
@override
void handleResp(ScpMessage scpMessage) {
print('收到接听拒绝回复');
//
talkStatus.setRejected();
startChartManage.stopTalkPingMessageTimer();
startChartManage.stopTalkExpectMessageTimer();
stopRingtone();
talkStatus.setEnd();
}
@override
void handleInvalidReq(ScpMessage scpMessage) {
// TODO: implement handleInvalidReq
}
@override
void handleRealTimeData(ScpMessage scpMessage) {
// TODO: implement handleRealTimeData
}
}

View File

@ -30,15 +30,6 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
//
_talkRequestEvent(talkObjectName: talkReq.callerName);
// Future.delayed(Duration(seconds: 1), () {
// startChartManage.sendTalkAcceptMessage();
// // startChartManage.sendTalkRejectMessage();
// });
//
// Future.delayed(Duration(seconds: 5), () {
// startChartManage.sendTalkHangupMessage();
// // startChartManage.sendTalkRejectMessage();
// });
}
@override
@ -46,7 +37,7 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
//
final GenericResp genericResp = scpMessage.Payload;
if (genericResp.code == 0) {
print('发送对讲成功');
print('发送对讲成功,已经收到对方的回复');
}
}

View File

@ -204,6 +204,7 @@ class StartChartManage {
// 线
Future<void> _sendOnlineMessage() async {
_log(text: '发送上线消息');
if (isOnlineStartChartServer) {
_log(text: '星图已上线,请勿重复发送上线消息');
return;
@ -218,6 +219,10 @@ class StartChartManage {
//
Future<void> sendCallRequestMessage({required String ToPeerId}) async {
if (talkStatus.status == TalkStatus.duringCall) {
_log(text: '已经在通话中,请勿重复发送对讲请求');
return;
}
// 线
final message = MessageCommand.talkRequestMessage(
FromPeerId: FromPeerId,
@ -248,12 +253,13 @@ class StartChartManage {
}
//
void sendEchoMessage({required String ToPeerId}) async {
void sendEchoMessage() async {
final message = MessageCommand.echoMessage(
ToPeerId: ToPeerId,
ToPeerId: echoPeerId,
FromPeerId: FromPeerId,
);
await _sendMessage(message: message);
_log(text: '发送回声测试消息');
}
//
@ -732,7 +738,6 @@ class StartChartManage {
seconds: talkPingIntervalTime,
),
(Timer timer) async {
// 线
await sendTalkPingMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,

View File

@ -4,6 +4,7 @@ import 'package:star_lock/talk/startChart/events/talk_status_change_event.dart';
enum TalkStatus {
waitingAnswer, //
waitingData, //
duringCall, //
rejected, //
uninitialized, //
@ -106,6 +107,6 @@ class StartChartTalkStatus {
///
void setEnd() {
_setStatus(TalkStatus.end);
// "error"
// "end"
}
}

View File

@ -298,6 +298,9 @@ flutter:
- images/mine/
- images/lockType/
- assets/
- assets/html/h264.html
- assets/demo.h264
- assets/talk.h264
- lan/
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware