fix:增加通话数据未收到时定时器判断

This commit is contained in:
liyi 2024-12-06 13:38:34 +08:00
parent 422c230dfc
commit 6736760d3b
7 changed files with 76 additions and 52 deletions

View File

@ -242,27 +242,6 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
ToPeerId: '3phX8Ng2cZHz5NtP8xAf6nYy2z1BYytoejgjoHrWMGhH');
},
),
SubmitBtn(
btnName: '发送网关初始化消息',
onClick: () {
StartChartManage().sendGatewayResetMessage(
ToPeerId: '3phX8Ng2cZHz5NtP8xAf6nYy2z1BYytoejgjoHrWMGhH',
gatewayId: 1000000000,
);
},
),
SubmitBtn(
btnName: '播放铃声',
onClick: () {
UdpTalkPingHandler().playRingtone();
},
),
SubmitBtn(
btnName: '停止播放铃声',
onClick: () {
UdpTalkPingHandler().stopRingtone();
},
),
SizedBox(height: 50.w),
Row(
mainAxisAlignment: MainAxisAlignment.center,

View File

@ -5,6 +5,7 @@ import 'package:flutter_voice_processor/flutter_voice_processor.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/talk/call/callTalk.dart';
import 'package:star_lock/talk/startChart/start_chart_manage.dart';
import 'package:star_lock/talk/udp/udp_talkClass.dart';
import '../../../../app_settings/app_settings.dart';
@ -24,6 +25,7 @@ class LockMonitoringLogic extends BaseGetXController {
/// UDP发送的状态
StreamSubscription? _getUDPStatusRefreshUIEvent;
void _getUDPStatusRefreshUIAction() {
_getUDPStatusRefreshUIEvent =
eventBus.on<GetUDPStatusRefreshUI>().listen((event) async {
@ -74,6 +76,9 @@ class LockMonitoringLogic extends BaseGetXController {
UDPTalkClass().callNoAnswer(1);
}
});
//
StartChartManage().sendTalkAcceptMessage();
}
///
@ -104,6 +109,9 @@ class LockMonitoringLogic extends BaseGetXController {
UDPTalkClass().callNoAnswer(2);
}
});
//
StartChartManage().sendTalkRejectMessage();
}
///

View File

@ -10,6 +10,7 @@ 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_accept.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_expect.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_ping.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart';
@ -208,6 +209,30 @@ class MessageCommand {
return _hexToBytes(serializedBytesString);
}
//
static List<int> talkExpectMessage({
required String FromPeerId,
required String ToPeerId,
required TalkExpect talkExpect,
}) {
final payload = talkExpect.writeToBuffer();
ScpMessage message = ScpMessage(
ProtocolFlag: ProtocolFlagConstant.scp01,
MessageType: MessageTypeConstant.Req,
MessageId: 1,
SpTotal: 0,
SpIndex: 0,
FromPeerId: FromPeerId,
ToPeerId: ToPeerId,
Payload: payload,
PayloadCRC: calculationCrc(payload),
PayloadLength: payload.length,
PayloadType: PayloadTypeConstant.talkExpect,
);
String serializedBytesString = message.serialize();
return _hexToBytes(serializedBytesString);
}
// GenericRespSuccess
static List<int> genericRespSuccessMessage({
required String FromPeerId,

View File

@ -10,6 +10,7 @@ import 'package:star_lock/talk/startChart/proto/ble_message.pb.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/remote_unlock.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart';
class ScpMessage {
ScpMessage({
@ -302,8 +303,8 @@ class ScpMessage {
GatewayResetResp.fromBuffer(byte);
return gatewayResetResp;
case PayloadTypeConstant.callRequest:
final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
final TalkReq talkReq = TalkReq.fromBuffer(byte);
return talkReq;
case PayloadTypeConstant.talkAccept:
final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;

View File

@ -10,7 +10,6 @@ class UdpGoOnlineHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handle(ScpMessage scpMessage) {
final startChartManage = StartChartManage();
final LoginResponse loginResponse = scpMessage.Payload;
final responseType = loginResponse.responseType;
if (responseType != null &&

View File

@ -7,6 +7,7 @@ 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_request.pb.dart';
import 'package:star_lock/tools/storage.dart';
import '../../start_chart_manage.dart';
@ -15,17 +16,16 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handle(ScpMessage scpMessage) {
final GenericResp genericResp = scpMessage.Payload;
if (checkGenericRespSuccess(genericResp)) {
//
startChartManage.sendGenericRespSuccessMessage(
ToPeerId: scpMessage.FromPeerId!,
FromPeerId: scpMessage.ToPeerId!,
PayloadType: scpMessage.PayloadType!,
);
//
_talkRequestEvent();
}
print('收到对讲请求:${scpMessage}');
final TalkReq genericResp = scpMessage.Payload;
//
startChartManage.sendGenericRespSuccessMessage(
ToPeerId: scpMessage.FromPeerId!,
FromPeerId: scpMessage.ToPeerId!,
PayloadType: scpMessage.PayloadType!,
);
//
_talkRequestEvent();
}
//

View File

@ -19,6 +19,7 @@ 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/handle/scp_message_handle.dart';
import 'package:star_lock/talk/startChart/handle/scp_message_handler_factory.dart';
import 'package:star_lock/talk/startChart/proto/talk_expect.pb.dart';
import 'package:star_lock/tools/deviceInfo_utils.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:uuid/uuid.dart';
@ -85,13 +86,17 @@ class StartChartManage {
///
Future<void> _clientRegister() async {
_log(text: '开始注册客户端');
final StarChartRegisterNodeEntity requestStarChartRegisterNode =
await _requestStarChartRegisterNode();
await _saveStarChartRegisterNodeToStorage(requestStarChartRegisterNode);
_log(text: '获取到星图注册节点信息:$requestStarChartRegisterNode');
FromPeerId = requestStarChartRegisterNode.peer!.id ?? '';
ToPeerId = echoPeerId;
final StarChartRegisterNodeEntity? registerNodeEntity =
await Storage.getStarChartRegisterNodeInfo();
if (registerNodeEntity != null) {
_log(text: '获取到星图注册节点信息:$registerNodeEntity');
FromPeerId = registerNodeEntity.peer!.id ?? '';
} else {
_log(text: '开始注册客户端');
final StarChartRegisterNodeEntity requestStarChartRegisterNode =
await _requestStarChartRegisterNode();
await _saveStarChartRegisterNodeToStorage(requestStarChartRegisterNode);
}
}
//
@ -109,6 +114,7 @@ class StartChartManage {
remoteHost = parseUdpUrl['host'] ?? '';
remotePort = parseUdpUrl['port'] ?? '';
relayPeerId = data?.peerID ?? '';
ToPeerId = relayPeerId;
}
_log(text: '中继信息----》${relayInfoEntity}');
}
@ -219,8 +225,7 @@ class StartChartManage {
}
//
void sendTalkAcceptMessage(
{required String ToPeerId, required int gatewayId}) async {
void sendTalkAcceptMessage() async {
final message = MessageCommand.talkAcceptMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,
@ -229,10 +234,7 @@ class StartChartManage {
}
//
void sendTalkRejectMessage({
required String ToPeerId,
required int gatewayId,
}) async {
void sendTalkRejectMessage() async {
final message = MessageCommand.talkRejectMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,
@ -240,6 +242,19 @@ class StartChartManage {
await _sendMessage(message: message);
}
//
void sendTalkExpectMessage() async {
final message = MessageCommand.talkExpectMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,
talkExpect: TalkExpect(
videoType: [TalkExpect_VideoTypeE.H264],
audioType: [TalkExpect_AudioTypeE.G711],
),
);
await _sendMessage(message: message);
}
//
void sendGenericRespSuccessMessage(
{required String ToPeerId,
@ -408,10 +423,7 @@ class StartChartManage {
listenAddrDataList.add(
ListenAddrData(
type: ListenAddrTypeConstant.relay,
address: IpConstant.udpUrl +
relayInfoEntity.client_addr! +
':' +
localPort.toString(),
address: relayInfoEntity.relay_list!.last!.listenAddr!,
),
);
}