diff --git a/lib/talk/startChart/handle/impl/udp_ble_passthrough_handler.dart b/lib/talk/startChart/handle/impl/udp_ble_passthrough_handler.dart index 4bcad2a9..8bb2bad7 100644 --- a/lib/talk/startChart/handle/impl/udp_ble_passthrough_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_ble_passthrough_handler.dart @@ -11,9 +11,26 @@ import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; import '../../start_chart_manage.dart'; class UdpBlePassThroughHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + + @override - void handle(ScpMessage scpMessage) { + void handleReq(ScpMessage scpMessage) { final BleResp bleResp = scpMessage.Payload; - // 蓝牙透传 + //TODO 收到蓝牙透传请求指令 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到蓝牙透传指令回复 + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData } } diff --git a/lib/talk/startChart/handle/impl/udp_echo_test_handler.dart b/lib/talk/startChart/handle/impl/udp_echo_test_handler.dart index bb7f9a3b..4f13ead1 100644 --- a/lib/talk/startChart/handle/impl/udp_echo_test_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_echo_test_handler.dart @@ -7,8 +7,26 @@ import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import '../../start_chart_manage.dart'; class UdpEchoTestHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + + @override - void handle(ScpMessage scpMessage) { + void handleReq(ScpMessage scpMessage) { + // TODO: 收到回声测试请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到回声测试回复 EasyLoading.showToast(scpMessage.Payload, duration: 2000.milliseconds); } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData + } } diff --git a/lib/talk/startChart/handle/impl/udp_gateway_reset_handler.dart b/lib/talk/startChart/handle/impl/udp_gateway_reset_handler.dart index 730a0aab..d4bb0b37 100644 --- a/lib/talk/startChart/handle/impl/udp_gateway_reset_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_gateway_reset_handler.dart @@ -8,12 +8,30 @@ import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import '../../start_chart_manage.dart'; class UdpGateWayResetHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + + @override - void handle(ScpMessage scpMessage) { + void handleReq(ScpMessage scpMessage) { + // TODO: 收到网关初始化请求 final GatewayResetResp gatewayResetResp = scpMessage.Payload; final status = gatewayResetResp.status; if (status != null && status == GatewayResetResp_StatusE.OK) { - // TODO 网关初始化成功 + } } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到网关初始化回复 + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData + } } diff --git a/lib/talk/startChart/handle/impl/udp_gateway_transfer_handler.dart b/lib/talk/startChart/handle/impl/udp_gateway_transfer_handler.dart index a15da3f5..9e032ce1 100644 --- a/lib/talk/startChart/handle/impl/udp_gateway_transfer_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_gateway_transfer_handler.dart @@ -10,11 +10,29 @@ import '../../start_chart_manage.dart'; class UdpGateWayTransferHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + + @override - void handle(ScpMessage scpMessage) { + void handleReq(ScpMessage scpMessage) { + // TODO: 收到网关转移请求 final GenericResp genericResp = scpMessage.Payload; if (checkGenericRespSuccess(genericResp)) { // TODO 网关转移成功 } } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到网关转移回复 + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData + } } diff --git a/lib/talk/startChart/handle/impl/udp_go_online_handler.dart b/lib/talk/startChart/handle/impl/udp_go_online_handler.dart index 79b34e5e..74b75012 100644 --- a/lib/talk/startChart/handle/impl/udp_go_online_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_go_online_handler.dart @@ -9,7 +9,13 @@ import '../../start_chart_manage.dart'; class UdpGoOnlineHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override - void handle(ScpMessage scpMessage) { + void handleReq(ScpMessage scpMessage) { + // TODO: 收到上线消息请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // 收到上线消息回复 final LoginResponse loginResponse = scpMessage.Payload; final responseType = loginResponse.responseType; if (responseType != null && @@ -23,4 +29,14 @@ class UdpGoOnlineHandler extends ScpMessageBaseHandle startChartManage.reStartOnlineStartChartServer(); } } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData + } } diff --git a/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart b/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart index 9454ce96..abd7a434 100644 --- a/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart @@ -8,8 +8,16 @@ import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import '../../start_chart_manage.dart'; class UdpHeartBeatHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + + @override - void handle(ScpMessage scpMessage) { + void handleReq(ScpMessage scpMessage) { + // TODO: 收到心跳消息请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到心跳消息回复 final HeartbeatResponse heartbeatResponse = scpMessage.Payload; final statusCode = heartbeatResponse.statusCode; if (statusCode != null && @@ -22,4 +30,14 @@ class UdpHeartBeatHandler extends ScpMessageBaseHandle implements ScpMessageHand // 修改完间隔之后重新启动发送心跳 startChartManage.reStartHeartBeat(); } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData + } } diff --git a/lib/talk/startChart/handle/impl/udp_remote_un_lock_handler.dart b/lib/talk/startChart/handle/impl/udp_remote_un_lock_handler.dart index bd688b73..3e3f3729 100644 --- a/lib/talk/startChart/handle/impl/udp_remote_un_lock_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_remote_un_lock_handler.dart @@ -12,9 +12,24 @@ import 'package:star_lock/talk/startChart/proto/remote_unlock.pb.dart'; import '../../start_chart_manage.dart'; class UdpRemoteUnLockHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + @override - void handle(ScpMessage scpMessage) { - final RemoteUnlockReq remoteUnlockReq = scpMessage.Payload; - // 远程开锁 + void handleReq(ScpMessage scpMessage) { + // TODO: 收到远程开锁请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到远程开锁回复 + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart index b0cff969..81976361 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart @@ -10,8 +10,16 @@ import '../../start_chart_manage.dart'; class UdpTalkAcceptHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + + @override - void handle(ScpMessage scpMessage) { + void handleReq(ScpMessage scpMessage) { + // TODO: 收到同意接听请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到同意接听回复 final GenericResp genericResp = scpMessage.Payload; if (checkGenericRespSuccess(genericResp)) { // 同意接听 @@ -38,4 +46,15 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle }); } } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage + ) { + // TODO: implement handleRealTimeData + } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_data_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_data_handler.dart index ce4b185b..44f23ce4 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_data_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_data_handler.dart @@ -10,9 +10,26 @@ import '../../start_chart_manage.dart'; class UdpTalkDataHandler extends ScpMessageBaseHandle implements ScpMessageHandler { - @override - void handle(ScpMessage scpMessage) { - print('收到音视频数据'); + + @override + void handleReq(ScpMessage scpMessage) { + // TODO: 收到音视频数据请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到音视频数据回复 + print('收到音视频数据'); + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_expect_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_expect_handler.dart index 3bbaf334..8c7f2543 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_expect_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_expect_handler.dart @@ -10,9 +10,25 @@ import '../../start_chart_manage.dart'; class UdpTalkExpectHandler extends ScpMessageBaseHandle implements ScpMessageHandler { - @override - void handle(ScpMessage scpMessage) { - print('收到预期音视频数据请求'); + + @override + void handleReq(ScpMessage scpMessage) { + // TODO: 收到预期音视频数据请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到预期音视频数据回复 + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_hangup_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_hangup_handler.dart index 39268713..b576f81f 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_hangup_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_hangup_handler.dart @@ -10,11 +10,26 @@ import '../../start_chart_manage.dart'; class UdpTalkHangUpHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + + @override - void handle(ScpMessage scpMessage) { - final GenericResp genericResp = scpMessage.Payload; - if (checkGenericRespSuccess(genericResp)) { - // TODO 通话中挂断 - } + void handleReq(ScpMessage scpMessage) { + // TODO: 通话中挂断请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 通话中挂断回复 + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage + ) { + // TODO: implement handleRealTimeData } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart index 5c8c987c..f138c6bc 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart @@ -6,8 +6,15 @@ import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; class UdpTalkPingHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + @override - void handle(ScpMessage scpMessage) { + void handleReq(ScpMessage scpMessage) { + // TODO: 收到通话保持请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到通话保持回复 final GenericResp genericResp = scpMessage.Payload; if (checkGenericRespSuccess(genericResp)) { // 收到消息 @@ -17,4 +24,14 @@ class UdpTalkPingHandler extends ScpMessageBaseHandle } } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData + } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_push_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_push_handler.dart index 1475410f..fab49041 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_push_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_push_handler.dart @@ -10,11 +10,27 @@ import '../../start_chart_manage.dart'; class UdpTalkPushHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + @override - void handle(ScpMessage scpMessage) { + void handleReq(ScpMessage scpMessage) { + // TODO: 收到委托推送请求 final GenericResp genericResp = scpMessage.Payload; - if (checkGenericRespSuccess(genericResp)) { - // TODO 委托推送 - } + if (checkGenericRespSuccess(genericResp)) {} + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到委托推送回复 + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage + ) { + // TODO: implement handleRealTimeData } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_receiver_transfer_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_receiver_transfer_handler.dart index 2f1df0b2..5b17a295 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_receiver_transfer_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_receiver_transfer_handler.dart @@ -10,11 +10,25 @@ import '../../start_chart_manage.dart'; class UdpTalkReceiverTransferHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + + @override - void handle(ScpMessage scpMessage) { - final GenericResp genericResp = scpMessage.Payload; - if (checkGenericRespSuccess(genericResp)) { - // TODO 对讲接听者转移 - } + void handleReq(ScpMessage scpMessage) { + // TODO: 对讲接听者转移请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 对讲接听者转移回复 + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_reject_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_reject_handler.dart index 56fa7f96..58eb9faa 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_reject_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_reject_handler.dart @@ -14,4 +14,24 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle void handle(ScpMessage scpMessage) { print('收到接听拒绝'); } + + @override + void handleReq(ScpMessage scpMessage) { + // TODO: 收到接听拒绝请求 + } + + @override + void handleResp(ScpMessage scpMessage) { + // TODO: 收到接听拒绝回复 + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData + } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart index df8c2d50..dbb34da1 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart @@ -15,26 +15,7 @@ import '../../start_chart_manage.dart'; class UdpTalkRequestHandler extends ScpMessageBaseHandle implements ScpMessageHandler { - @override - void handle(ScpMessage scpMessage) { - 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('发送对讲成功'); - } - } - } + // 来电事件的处理 void _talkRequestEvent() { @@ -66,4 +47,38 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle '${'收到来自'.tr}($getLockName)${'锁的呼叫'.tr}。', platformChannelSpecifics, payload: 'item x'); } + + @override + void handleReq(ScpMessage scpMessage) { + // 收到对讲请求 + print('收到对讲请求:${scpMessage}'); + final TalkReq talkReq = scpMessage.Payload; + // 回复成功消息 + startChartManage.sendGenericRespSuccessMessage( + ToPeerId: scpMessage.FromPeerId!, + FromPeerId: scpMessage.ToPeerId!, + PayloadType: scpMessage.PayloadType!, + ); + // 处理收到接听请求后的事件 + _talkRequestEvent(); + } + + @override + void handleResp(ScpMessage scpMessage) { + // 收到对讲请求回复 + final GenericResp genericResp = scpMessage.Payload; + if (genericResp.code == 0) { + print('发送对讲成功'); + } + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + // TODO: implement handleInvalidReq + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { + // TODO: implement handleRealTimeData + } } diff --git a/lib/talk/startChart/handle/impl/unknow_payload_type_handler.dart b/lib/talk/startChart/handle/impl/unknow_payload_type_handler.dart index 74715bc9..62c99f35 100644 --- a/lib/talk/startChart/handle/impl/unknow_payload_type_handler.dart +++ b/lib/talk/startChart/handle/impl/unknow_payload_type_handler.dart @@ -3,9 +3,28 @@ 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'; -class UnKnowPayloadTypeHandler extends ScpMessageBaseHandle implements ScpMessageHandler { +class UnKnowPayloadTypeHandler extends ScpMessageBaseHandle + implements ScpMessageHandler { @override - void handle(ScpMessage scpMessage) { + void handle(ScpMessage scpMessage) {} + + @override + void handleReq(ScpMessage scpMessage) { + AppLog.log('❌未知的payloadType类型---》${scpMessage}'); + } + + @override + void handleResp(ScpMessage scpMessage) { + AppLog.log('❌未知的payloadType类型---》${scpMessage}'); + } + + @override + void handleInvalidReq(ScpMessage scpMessage) { + AppLog.log('❌未知的payloadType类型---》${scpMessage}'); + } + + @override + void handleRealTimeData(ScpMessage scpMessage) { AppLog.log('❌未知的payloadType类型---》${scpMessage}'); } } diff --git a/lib/talk/startChart/handle/scp_message_handle.dart b/lib/talk/startChart/handle/scp_message_handle.dart index e98c9fea..c7a32916 100644 --- a/lib/talk/startChart/handle/scp_message_handle.dart +++ b/lib/talk/startChart/handle/scp_message_handle.dart @@ -1,5 +1,15 @@ import 'package:star_lock/talk/startChart/entity/scp_message.dart'; abstract class ScpMessageHandler { - void handle(ScpMessage scpMessage); -} \ No newline at end of file + // 处理请求 + void handleReq(ScpMessage scpMessage); + + // 处理响应 + void handleResp(ScpMessage scpMessage); + + // 处理实时数据 + void handleRealTimeData(ScpMessage scpMessage); + + // 无效请求 + void handleInvalidReq(ScpMessage scpMessage); +} diff --git a/lib/talk/startChart/start_chart_manage.dart b/lib/talk/startChart/start_chart_manage.dart index cc1dece1..530483a9 100644 --- a/lib/talk/startChart/start_chart_manage.dart +++ b/lib/talk/startChart/start_chart_manage.dart @@ -12,6 +12,7 @@ import 'package:star_lock/network/start_chart_api.dart'; import 'package:star_lock/talk/startChart/command/message_command.dart'; import 'package:star_lock/talk/startChart/constant/ip_constant.dart'; import 'package:star_lock/talk/startChart/constant/listen_addr_type_constant.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/relay_info_entity.dart'; import 'package:star_lock/talk/startChart/entity/report_information_data.dart'; @@ -182,6 +183,7 @@ class StartChartManage { ); await _sendMessage(message: message); } + // 发送对讲请求消息 Future sendCallRequestMessage({required String ToPeerId}) async { // 组装上线消息 @@ -666,10 +668,19 @@ class StartChartManage { // 处理udp返回的数据 void _handleUdpResultData(ScpMessage scpMessage) { final int payloadType = scpMessage.PayloadType ?? 0; + final int messageType = scpMessage.MessageType ?? 0; try { final ScpMessageHandler handler = ScpMessageHandlerFactory.createHandler(payloadType); - handler.handle(scpMessage); + if (messageType == MessageTypeConstant.Req) { + handler.handleReq(scpMessage); + } else if (messageType == MessageTypeConstant.Resp) { + handler.handleResp(scpMessage); + } else if (messageType == MessageTypeConstant.RealTimeData) { + handler.handleRealTimeData(scpMessage); + } else { + handler.handleInvalidReq(scpMessage); + } } catch (e) { _log(text: '❌ 处理udp返回数据时遇到错误---> $e'); }