diff --git a/lib/talk/startChart/command/message_command.dart b/lib/talk/startChart/command/message_command.dart index 96acdc9c..000097dc 100644 --- a/lib/talk/startChart/command/message_command.dart +++ b/lib/talk/startChart/command/message_command.dart @@ -7,6 +7,11 @@ import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart'; import 'package:star_lock/talk/startChart/constant/protocol_flag_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.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/talk_accept.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_ping.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart'; class MessageCommand { /// 客户端去中继上线命令 @@ -107,12 +112,13 @@ class MessageCommand { return _hexToBytes(serializedBytesString); } - // 通话保持消息 - static List talkPingMessage({ + // 同意接听消息 + static List talkAcceptMessage({ required String FromPeerId, required String ToPeerId, }) { - String payload = 'hello'; + final talkAcceptReq = TalkAcceptReq(); + final payload = talkAcceptReq.writeToBuffer(); ScpMessage message = ScpMessage( ProtocolFlag: ProtocolFlagConstant.scp01, MessageType: MessageTypeConstant.Req, @@ -122,7 +128,55 @@ class MessageCommand { FromPeerId: FromPeerId, ToPeerId: ToPeerId, Payload: payload, - PayloadCRC: calculationCrc(_stringToUint8List(payload)), + PayloadCRC: calculationCrc(payload), + PayloadLength: payload.length, + PayloadType: PayloadTypeConstant.talkAccept, + ); + String serializedBytesString = message.serialize(); + return _hexToBytes(serializedBytesString); + } + + // 拒绝接听消息 + static List talkRejectMessage({ + required String FromPeerId, + required String ToPeerId, + }) { + final talkReject = TalkReject(); + final payload = talkReject.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.talkReject, + ); + String serializedBytesString = message.serialize(); + return _hexToBytes(serializedBytesString); + } + + // 呼叫保持消息 + static List talkPingMessage({ + required String FromPeerId, + required String ToPeerId, + }) { + final talkPing = TalkPing(); + final payload = talkPing.writeToBuffer(); + ScpMessage message = ScpMessage( + ProtocolFlag: ProtocolFlagConstant.scp01, + MessageType: MessageTypeConstant.RealTimeData, + MessageId: 1, + SpTotal: 0, + SpIndex: 0, + FromPeerId: FromPeerId, + ToPeerId: ToPeerId, + Payload: payload, + PayloadCRC: calculationCrc(payload), PayloadLength: payload.length, PayloadType: PayloadTypeConstant.talkPing, ); @@ -130,6 +184,84 @@ class MessageCommand { return _hexToBytes(serializedBytesString); } + // 音视频数据 + static List talkDataMessage({ + required String FromPeerId, + required String ToPeerId, + required TalkData talkData, + }) { + final payload = talkData.writeToBuffer(); + ScpMessage message = ScpMessage( + ProtocolFlag: ProtocolFlagConstant.scp01, + MessageType: MessageTypeConstant.RealTimeData, + MessageId: 1, + SpTotal: 0, + SpIndex: 0, + FromPeerId: FromPeerId, + ToPeerId: ToPeerId, + Payload: payload, + PayloadCRC: calculationCrc(payload), + PayloadLength: payload.length, + PayloadType: PayloadTypeConstant.talkData, + ); + String serializedBytesString = message.serialize(); + return _hexToBytes(serializedBytesString); + } + + // GenericRespSuccess 消息 + static List genericRespSuccessMessage({ + required String FromPeerId, + required String ToPeerId, + required int PayloadType, + }) { + final genericResp = GenericResp(); + genericResp.message = 'ok'; + genericResp.code = 0; + final payload = genericResp.writeToBuffer(); + ScpMessage message = ScpMessage( + ProtocolFlag: ProtocolFlagConstant.scp01, + MessageType: MessageTypeConstant.Resp, + MessageId: 1, + SpTotal: 0, + SpIndex: 0, + FromPeerId: FromPeerId, + ToPeerId: ToPeerId, + Payload: payload, + PayloadCRC: calculationCrc(payload), + PayloadLength: payload.length, + PayloadType: PayloadType, + ); + String serializedBytesString = message.serialize(); + return _hexToBytes(serializedBytesString); + } + + // GenericRespError 消息 + static List genericRespErrorMessage({ + required String FromPeerId, + required String ToPeerId, + required int PayloadType, + }) { + final genericResp = GenericResp(); + genericResp.message = 'error'; + genericResp.code = -1; + final payload = genericResp.writeToBuffer(); + ScpMessage message = ScpMessage( + ProtocolFlag: ProtocolFlagConstant.scp01, + MessageType: MessageTypeConstant.Resp, + MessageId: 1, + SpTotal: 0, + SpIndex: 0, + FromPeerId: FromPeerId, + ToPeerId: ToPeerId, + Payload: payload, + PayloadCRC: calculationCrc(payload), + PayloadLength: payload.length, + PayloadType: PayloadType, + ); + String serializedBytesString = message.serialize(); + return _hexToBytes(serializedBytesString); + } + // 辅助方法:将16进制字符串转换为字节列表 static List _hexToBytes(String hex) { final bytes = [];