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