fix:增加序列化时判断是请求体还是响应体
This commit is contained in:
parent
298862d153
commit
13fefa0495
@ -246,7 +246,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
|
||||
btnName: '发送对讲请求',
|
||||
onClick: () {
|
||||
StartChartManage().sendCallRequestMessage(
|
||||
ToPeerId: '59wtMp6DTpBwrEViT9FQpBMZWnc6MEnLxGuP9eYB4JKt',
|
||||
ToPeerId: 'GCvA1LeqU1P9bUvxGEEfW41zBqBAiev3enWWuG6k2ekM',
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
@ -3,17 +3,22 @@ import 'package:crc32_checksum/crc32_checksum.dart';
|
||||
import 'package:crypto/crypto.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
import 'package:star_lock/talk/startChart/constant/message_type_constant.dart';
|
||||
import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart';
|
||||
import 'package:star_lock/talk/startChart/entity/heartbeat_response.dart';
|
||||
import 'package:star_lock/talk/startChart/entity/login_response.dart';
|
||||
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_transfer.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_accept.pbserver.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_hangup.pb.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/talk_ping.pb.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/talk_push.pbserver.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/talk_receiver_transfer.pb.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart';
|
||||
|
||||
@ -255,6 +260,7 @@ class ScpMessage {
|
||||
offset += message.PayloadLength!;
|
||||
message.Payload = _handlePayLoad(
|
||||
payloadType: message.PayloadType ?? 0,
|
||||
messageType: message.MessageType ?? 0,
|
||||
byte: sublist,
|
||||
offset: offset,
|
||||
PayloadLength: message.PayloadLength,
|
||||
@ -283,6 +289,7 @@ class ScpMessage {
|
||||
// 根据不同payloadType序列化对应的payload结构体
|
||||
static dynamic _handlePayLoad({
|
||||
required int payloadType,
|
||||
required int messageType,
|
||||
required List<int> byte,
|
||||
int? offset,
|
||||
int? PayloadLength,
|
||||
@ -304,46 +311,145 @@ class ScpMessage {
|
||||
return payload;
|
||||
case PayloadTypeConstant.gatewayReset:
|
||||
// 初始化网关
|
||||
final GatewayResetResp gatewayResetResp =
|
||||
GatewayResetResp.fromBuffer(byte);
|
||||
return gatewayResetResp;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GatewayResetResp gatewayResetResp =
|
||||
GatewayResetResp.fromBuffer(byte);
|
||||
return gatewayResetResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final GatewayResetReq gatewayResetReq =
|
||||
GatewayResetReq.fromBuffer(byte);
|
||||
return gatewayResetReq;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.callRequest:
|
||||
final TalkReq talkReq = TalkReq.fromBuffer(byte);
|
||||
return talkReq;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final TalkReq talkReq = TalkReq.fromBuffer(byte);
|
||||
return talkReq;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.talkAccept:
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final TalkAcceptReq talkAccept = TalkAcceptReq.fromBuffer(byte);
|
||||
return talkAccept;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.gatewayTransfer:
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final GatewayTransferReq gatewayTransferReq =
|
||||
GatewayTransferReq.fromBuffer(byte);
|
||||
return gatewayTransferReq;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.blePassthrough:
|
||||
final BleResp bleResp = BleResp.fromBuffer(byte);
|
||||
return bleResp;
|
||||
case PayloadTypeConstant.remoteUnlock:
|
||||
final RemoteUnlockResp remoteUnlockResp =
|
||||
RemoteUnlockResp.fromBuffer(byte);
|
||||
return remoteUnlockResp;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final RemoteUnlockResp remoteUnlockResp =
|
||||
RemoteUnlockResp.fromBuffer(byte);
|
||||
return remoteUnlockResp;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.talkReceiverTransfer:
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final TalkReceiverTransfer talkReceiverTransfer =
|
||||
TalkReceiverTransfer.fromBuffer(byte);
|
||||
return talkReceiverTransfer;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.talkPush:
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final TalkPush talkPush = TalkPush.fromBuffer(byte);
|
||||
return talkPush;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.talkReject:
|
||||
final TalkReject talkReject = TalkReject.fromBuffer(byte);
|
||||
return talkReject;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final TalkReject talkReject = TalkReject.fromBuffer(byte);
|
||||
return talkReject;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.talkPing:
|
||||
final TalkPing talkPing = TalkPing.fromBuffer(byte);
|
||||
return talkPing;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final TalkPing talkPing = TalkPing.fromBuffer(byte);
|
||||
return talkPing;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.talkExpect:
|
||||
final TalkExpect talkExpect = TalkExpect.fromBuffer(byte);
|
||||
return talkExpect;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.Req) {
|
||||
final TalkExpect talkExpect = TalkExpect.fromBuffer(byte);
|
||||
return talkExpect;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.talkData:
|
||||
final TalkData talkData = TalkData.fromBuffer(byte);
|
||||
return talkData;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.RealTimeData) {
|
||||
final TalkData talkData = TalkData.fromBuffer(byte);
|
||||
return talkData;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
case PayloadTypeConstant.talkHangup:
|
||||
final TalkHangup talkHangup = TalkHangup.fromBuffer(byte);
|
||||
return talkHangup;
|
||||
if (messageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = GenericResp.fromBuffer(byte);
|
||||
return genericResp;
|
||||
} else if (messageType == MessageTypeConstant.RealTimeData) {
|
||||
final TalkHangup talkHangup = TalkHangup.fromBuffer(byte);
|
||||
return talkHangup;
|
||||
} else {
|
||||
String payload = utf8.decode(byte);
|
||||
return payload;
|
||||
}
|
||||
default:
|
||||
print('❌未知的payloadType类型,按照字符串解析');
|
||||
String payload = utf8.decode(byte);
|
||||
|
||||
@ -2,6 +2,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/talk/startChart/constant/message_type_constant.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';
|
||||
@ -16,16 +17,23 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
|
||||
implements ScpMessageHandler {
|
||||
@override
|
||||
void handle(ScpMessage scpMessage) {
|
||||
print('收到对讲请求:${scpMessage}');
|
||||
// final TalkReq genericResp = scpMessage.Payload;
|
||||
// // 回复成功消息
|
||||
// startChartManage.sendGenericRespSuccessMessage(
|
||||
// ToPeerId: scpMessage.FromPeerId!,
|
||||
// FromPeerId: scpMessage.ToPeerId!,
|
||||
// PayloadType: scpMessage.PayloadType!,
|
||||
// );
|
||||
// // 处理收到接听请求后的事件
|
||||
// _talkRequestEvent();
|
||||
if (scpMessage.MessageType == MessageTypeConstant.Req) {
|
||||
print('收到对讲请求:${scpMessage}');
|
||||
final TalkReq talkReq = scpMessage.Payload;
|
||||
// 回复成功消息
|
||||
startChartManage.sendGenericRespSuccessMessage(
|
||||
ToPeerId: scpMessage.FromPeerId!,
|
||||
FromPeerId: scpMessage.ToPeerId!,
|
||||
PayloadType: scpMessage.PayloadType!,
|
||||
);
|
||||
// 处理收到接听请求后的事件
|
||||
_talkRequestEvent();
|
||||
} else if (scpMessage.MessageType == MessageTypeConstant.Resp) {
|
||||
final GenericResp genericResp = scpMessage.Payload;
|
||||
if (genericResp.code == 0) {
|
||||
print('发送对讲成功');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 来电事件的处理
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user