fix:增加通话数据未收到时定时器判断
This commit is contained in:
parent
422c230dfc
commit
6736760d3b
@ -242,27 +242,6 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
|
|||||||
ToPeerId: '3phX8Ng2cZHz5NtP8xAf6nYy2z1BYytoejgjoHrWMGhH');
|
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),
|
SizedBox(height: 50.w),
|
||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import 'package:flutter_voice_processor/flutter_voice_processor.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart';
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import 'package:star_lock/talk/call/callTalk.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 'package:star_lock/talk/udp/udp_talkClass.dart';
|
||||||
|
|
||||||
import '../../../../app_settings/app_settings.dart';
|
import '../../../../app_settings/app_settings.dart';
|
||||||
@ -24,6 +25,7 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
|
|
||||||
/// 收到UDP发送的状态
|
/// 收到UDP发送的状态
|
||||||
StreamSubscription? _getUDPStatusRefreshUIEvent;
|
StreamSubscription? _getUDPStatusRefreshUIEvent;
|
||||||
|
|
||||||
void _getUDPStatusRefreshUIAction() {
|
void _getUDPStatusRefreshUIAction() {
|
||||||
_getUDPStatusRefreshUIEvent =
|
_getUDPStatusRefreshUIEvent =
|
||||||
eventBus.on<GetUDPStatusRefreshUI>().listen((event) async {
|
eventBus.on<GetUDPStatusRefreshUI>().listen((event) async {
|
||||||
@ -74,6 +76,9 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
UDPTalkClass().callNoAnswer(1);
|
UDPTalkClass().callNoAnswer(1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 发送同意接听消息
|
||||||
|
StartChartManage().sendTalkAcceptMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 接听
|
/// 接听
|
||||||
@ -104,6 +109,9 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
UDPTalkClass().callNoAnswer(2);
|
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/generic.pb.dart';
|
||||||
import 'package:star_lock/talk/startChart/proto/talk_accept.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_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_ping.pb.dart';
|
||||||
import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart';
|
import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart';
|
||||||
|
|
||||||
@ -208,6 +209,30 @@ class MessageCommand {
|
|||||||
return _hexToBytes(serializedBytesString);
|
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 消息
|
// GenericRespSuccess 消息
|
||||||
static List<int> genericRespSuccessMessage({
|
static List<int> genericRespSuccessMessage({
|
||||||
required String FromPeerId,
|
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/gateway_reset.pb.dart';
|
||||||
import 'package:star_lock/talk/startChart/proto/generic.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/remote_unlock.pb.dart';
|
||||||
|
import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart';
|
||||||
|
|
||||||
class ScpMessage {
|
class ScpMessage {
|
||||||
ScpMessage({
|
ScpMessage({
|
||||||
@ -302,8 +303,8 @@ class ScpMessage {
|
|||||||
GatewayResetResp.fromBuffer(byte);
|
GatewayResetResp.fromBuffer(byte);
|
||||||
return gatewayResetResp;
|
return gatewayResetResp;
|
||||||
case PayloadTypeConstant.callRequest:
|
case PayloadTypeConstant.callRequest:
|
||||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
final TalkReq talkReq = TalkReq.fromBuffer(byte);
|
||||||
return genericResp;
|
return talkReq;
|
||||||
case PayloadTypeConstant.talkAccept:
|
case PayloadTypeConstant.talkAccept:
|
||||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||||
return genericResp;
|
return genericResp;
|
||||||
|
|||||||
@ -10,7 +10,6 @@ class UdpGoOnlineHandler extends ScpMessageBaseHandle
|
|||||||
implements ScpMessageHandler {
|
implements ScpMessageHandler {
|
||||||
@override
|
@override
|
||||||
void handle(ScpMessage scpMessage) {
|
void handle(ScpMessage scpMessage) {
|
||||||
final startChartManage = StartChartManage();
|
|
||||||
final LoginResponse loginResponse = scpMessage.Payload;
|
final LoginResponse loginResponse = scpMessage.Payload;
|
||||||
final responseType = loginResponse.responseType;
|
final responseType = loginResponse.responseType;
|
||||||
if (responseType != null &&
|
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/handle/scp_message_handle.dart';
|
||||||
import 'package:star_lock/talk/startChart/proto/gateway_reset.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/generic.pb.dart';
|
||||||
|
import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart';
|
||||||
import 'package:star_lock/tools/storage.dart';
|
import 'package:star_lock/tools/storage.dart';
|
||||||
|
|
||||||
import '../../start_chart_manage.dart';
|
import '../../start_chart_manage.dart';
|
||||||
@ -15,17 +16,16 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
|
|||||||
implements ScpMessageHandler {
|
implements ScpMessageHandler {
|
||||||
@override
|
@override
|
||||||
void handle(ScpMessage scpMessage) {
|
void handle(ScpMessage scpMessage) {
|
||||||
final GenericResp genericResp = scpMessage.Payload;
|
print('收到对讲请求:${scpMessage}');
|
||||||
if (checkGenericRespSuccess(genericResp)) {
|
final TalkReq genericResp = scpMessage.Payload;
|
||||||
// 回复成功消息
|
// 回复成功消息
|
||||||
startChartManage.sendGenericRespSuccessMessage(
|
startChartManage.sendGenericRespSuccessMessage(
|
||||||
ToPeerId: scpMessage.FromPeerId!,
|
ToPeerId: scpMessage.FromPeerId!,
|
||||||
FromPeerId: scpMessage.ToPeerId!,
|
FromPeerId: scpMessage.ToPeerId!,
|
||||||
PayloadType: scpMessage.PayloadType!,
|
PayloadType: scpMessage.PayloadType!,
|
||||||
);
|
);
|
||||||
// 处理收到接听请求后的事件
|
// 处理收到接听请求后的事件
|
||||||
_talkRequestEvent();
|
_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/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_handle.dart';
|
||||||
import 'package:star_lock/talk/startChart/handle/scp_message_handler_factory.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/deviceInfo_utils.dart';
|
||||||
import 'package:star_lock/tools/storage.dart';
|
import 'package:star_lock/tools/storage.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
@ -85,13 +86,17 @@ class StartChartManage {
|
|||||||
|
|
||||||
/// 客户端注册
|
/// 客户端注册
|
||||||
Future<void> _clientRegister() async {
|
Future<void> _clientRegister() async {
|
||||||
_log(text: '开始注册客户端');
|
final StarChartRegisterNodeEntity? registerNodeEntity =
|
||||||
final StarChartRegisterNodeEntity requestStarChartRegisterNode =
|
await Storage.getStarChartRegisterNodeInfo();
|
||||||
await _requestStarChartRegisterNode();
|
if (registerNodeEntity != null) {
|
||||||
await _saveStarChartRegisterNodeToStorage(requestStarChartRegisterNode);
|
_log(text: '获取到星图注册节点信息:$registerNodeEntity');
|
||||||
_log(text: '获取到星图注册节点信息:$requestStarChartRegisterNode');
|
FromPeerId = registerNodeEntity.peer!.id ?? '';
|
||||||
FromPeerId = requestStarChartRegisterNode.peer!.id ?? '';
|
} else {
|
||||||
ToPeerId = echoPeerId;
|
_log(text: '开始注册客户端');
|
||||||
|
final StarChartRegisterNodeEntity requestStarChartRegisterNode =
|
||||||
|
await _requestStarChartRegisterNode();
|
||||||
|
await _saveStarChartRegisterNodeToStorage(requestStarChartRegisterNode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 中继查询
|
// 中继查询
|
||||||
@ -109,6 +114,7 @@ class StartChartManage {
|
|||||||
remoteHost = parseUdpUrl['host'] ?? '';
|
remoteHost = parseUdpUrl['host'] ?? '';
|
||||||
remotePort = parseUdpUrl['port'] ?? '';
|
remotePort = parseUdpUrl['port'] ?? '';
|
||||||
relayPeerId = data?.peerID ?? '';
|
relayPeerId = data?.peerID ?? '';
|
||||||
|
ToPeerId = relayPeerId;
|
||||||
}
|
}
|
||||||
_log(text: '中继信息----》${relayInfoEntity}');
|
_log(text: '中继信息----》${relayInfoEntity}');
|
||||||
}
|
}
|
||||||
@ -219,8 +225,7 @@ class StartChartManage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 发送同意接听消息
|
// 发送同意接听消息
|
||||||
void sendTalkAcceptMessage(
|
void sendTalkAcceptMessage() async {
|
||||||
{required String ToPeerId, required int gatewayId}) async {
|
|
||||||
final message = MessageCommand.talkAcceptMessage(
|
final message = MessageCommand.talkAcceptMessage(
|
||||||
ToPeerId: ToPeerId,
|
ToPeerId: ToPeerId,
|
||||||
FromPeerId: FromPeerId,
|
FromPeerId: FromPeerId,
|
||||||
@ -229,10 +234,7 @@ class StartChartManage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 发送拒绝接听消息
|
// 发送拒绝接听消息
|
||||||
void sendTalkRejectMessage({
|
void sendTalkRejectMessage() async {
|
||||||
required String ToPeerId,
|
|
||||||
required int gatewayId,
|
|
||||||
}) async {
|
|
||||||
final message = MessageCommand.talkRejectMessage(
|
final message = MessageCommand.talkRejectMessage(
|
||||||
ToPeerId: ToPeerId,
|
ToPeerId: ToPeerId,
|
||||||
FromPeerId: FromPeerId,
|
FromPeerId: FromPeerId,
|
||||||
@ -240,6 +242,19 @@ class StartChartManage {
|
|||||||
await _sendMessage(message: message);
|
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(
|
void sendGenericRespSuccessMessage(
|
||||||
{required String ToPeerId,
|
{required String ToPeerId,
|
||||||
@ -408,10 +423,7 @@ class StartChartManage {
|
|||||||
listenAddrDataList.add(
|
listenAddrDataList.add(
|
||||||
ListenAddrData(
|
ListenAddrData(
|
||||||
type: ListenAddrTypeConstant.relay,
|
type: ListenAddrTypeConstant.relay,
|
||||||
address: IpConstant.udpUrl +
|
address: relayInfoEntity.relay_list!.last!.listenAddr!,
|
||||||
relayInfoEntity.client_addr! +
|
|
||||||
':' +
|
|
||||||
localPort.toString(),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user