import 'dart:typed_data'; 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/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'; import '../../start_chart_manage.dart'; class UdpHeartBeatHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override void handleReq(ScpMessage scpMessage) { // TODO: 收到心跳消息请求 } @override void handleResp(ScpMessage scpMessage) { final HeartbeatResponse heartbeatResponse = scpMessage.Payload; final statusCode = heartbeatResponse.statusCode; if (statusCode != null && statusCode != PayloadTypeConstant.heartHeatSuccessResponse) { // 心跳回复失败,停止发送心跳 startChartManage.stopHeartbeat(); // 心跳响应失败,重新上线 startChartManage.isOnlineStartChartServer = false; startChartManage.reStartOnlineStartChartServer(); } else { // 修改间隔为返回的心跳间隔 startChartManage.heartbeatIntervalTime = heartbeatResponse.nextPingTime ?? 1; // 修改完间隔之后重新启动发送心跳 startChartManage.reStartHeartBeat(); } } @override void handleInvalidReq(ScpMessage scpMessage) {} @override void handleRealTimeData(ScpMessage scpMessage) {} @override deserializePayload({required int payloadType, required int messageType, required Uint8List byte, int? offset, int? PayloadLength, int? spTotal, int? spIndex, int? messageId}) { // 心跳 HeartbeatResponse heartbeatResponse = HeartbeatResponse.fromBytes(byte); return heartbeatResponse; } }