From 70f3f96f7af5883088288b6ae0a13e7312b59765 Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Sat, 12 Apr 2025 09:57:10 +0800 Subject: [PATCH] =?UTF-8?q?server=20sdk=E6=B7=BB=E5=8A=A0=E6=92=A4?= =?UTF-8?q?=E5=9B=9E=E5=92=8C=E5=88=A0=E9=99=A4=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messagecontent/DeleteMessageContent.java | 47 +++++++ .../messagecontent/RecallMessageContent.java | 122 ++++++++++++++++++ 2 files changed, 169 insertions(+) create mode 100644 sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/DeleteMessageContent.java create mode 100644 sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RecallMessageContent.java diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/DeleteMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/DeleteMessageContent.java new file mode 100644 index 00000000..2e84f7b7 --- /dev/null +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/DeleteMessageContent.java @@ -0,0 +1,47 @@ +package cn.wildfirechat.sdk.messagecontent; + +import cn.wildfirechat.pojos.MessagePayload; +import cn.wildfirechat.proto.ProtoConstants; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +public class DeleteMessageContent extends MessageContent { + private long messageId; + private String operatorId; + + //必须有个空的构造函数 + public DeleteMessageContent() { + } + + public long getMessageId() { + return messageId; + } + + public String getOperatorId() { + return operatorId; + } + + + @Override + public int getContentType() { + return ProtoConstants.ContentType.Delete; + } + + @Override + public int getPersistFlag() { + return ProtoConstants.PersistFlag.Not_Persist; + } + + @Override + public MessagePayload encode() { + throw new RuntimeException("Delete message cannot encode"); + } + + @Override + public void decode(MessagePayload payload) { + super.decode(payload); + operatorId = payload.getContent(); + messageId = Long.parseLong(new String(Base64.getDecoder().decode(payload.getBase64edData()), StandardCharsets.UTF_8)); + } +} diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RecallMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RecallMessageContent.java new file mode 100644 index 00000000..710522ca --- /dev/null +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RecallMessageContent.java @@ -0,0 +1,122 @@ +package cn.wildfirechat.sdk.messagecontent; + +import cn.wildfirechat.pojos.MessagePayload; +import cn.wildfirechat.proto.ProtoConstants; +import org.apache.http.util.TextUtils; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +public class RecallMessageContent extends MessageContent { + private long messageId; + private String operatorId; + + + private String originalSender; + + private int originalContentType; + private String originalSearchableContent; + private String originalContent; + private String originalExtra; + private byte[] originalBinaryContent; + private int originalMediaType; + private String originalMediaUrl; + private long originalMessageTimestamp; + + //必须有个空的构造函数 + public RecallMessageContent() { + } + + public long getMessageId() { + return messageId; + } + + public String getOperatorId() { + return operatorId; + } + + public String getOriginalSender() { + return originalSender; + } + + public int getOriginalContentType() { + return originalContentType; + } + + public String getOriginalSearchableContent() { + return originalSearchableContent; + } + + public String getOriginalContent() { + return originalContent; + } + + public String getOriginalExtra() { + return originalExtra; + } + + public long getOriginalMessageTimestamp() { + return originalMessageTimestamp; + } + + public byte[] getOriginalBinaryContent() { + return originalBinaryContent; + } + + public int getOriginalMediaType() { + return originalMediaType; + } + + public String getOriginalMediaUrl() { + return originalMediaUrl; + } + + @Override + public int getContentType() { + return ProtoConstants.ContentType.Recall; + } + + @Override + public int getPersistFlag() { + return ProtoConstants.PersistFlag.Persist; + } + + @Override + public MessagePayload encode() { + throw new RuntimeException("Recall message cannot encode"); + } + + @Override + public void decode(MessagePayload payload) { + super.decode(payload); + operatorId = payload.getContent(); + messageId = Long.parseLong(new String(Base64.getDecoder().decode(payload.getBase64edData()), StandardCharsets.UTF_8)); + if(!TextUtils.isEmpty(payload.getExtra())) { + try { + JSONObject dictionary = (JSONObject) new JSONParser().parse(payload.getExtra()); + originalSender = (String) dictionary.get("s"); + if (dictionary.containsKey("t")) { + originalContentType = ((Number) dictionary.get("t")).intValue(); + } + originalSearchableContent = (String) dictionary.get("sc"); + originalContent = (String) dictionary.get("c"); + originalExtra = (String) dictionary.get("e"); + if (dictionary.containsKey("ts")) { + originalMessageTimestamp = ((Number) dictionary.get("ts")).longValue(); + } + if (dictionary.containsKey("mt")) { + originalMediaType = ((Number) dictionary.get("mt")).intValue(); + } + originalMediaUrl = (String) dictionary.get("mu"); + if (dictionary.containsKey("mb")) { + originalBinaryContent = Base64.getDecoder().decode((String) dictionary.get("mb")); + } + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + } +}