fix:增加通话数据未收到时定时器判断
This commit is contained in:
parent
422c230dfc
commit
6736760d3b
@ -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,
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
/// 挂断
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 &&
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
// 来电事件的处理
|
||||
|
||||
@ -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!,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user