撤回消息时带上被撤回消息的信息

This commit is contained in:
heavyrain.lee
2020-04-06 11:29:31 +08:00
parent e414fa4a0a
commit 2ba54a41db
4 changed files with 14 additions and 10 deletions
@@ -21,13 +21,12 @@ import java.util.Set;
public class RecallMessageHandler extends IMHandler<WFCMessage.INT64Buf> {
@Override
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.INT64Buf int64Buf, Qos1PublishHandler.IMCallback callback) {
ErrorCode errorCode = m_messagesStore.recallMessage(int64Buf.getId(), fromUser, isAdmin);
ErrorCode errorCode = m_messagesStore.recallMessage(int64Buf.getId(), fromUser, clientID, isAdmin);
if(errorCode != ErrorCode.ERROR_CODE_SUCCESS) {
return errorCode;
}
Set<String> notifyReceivers = new LinkedHashSet<>();
WFCMessage.Message message = m_messagesStore.getMessage(int64Buf.getId());
if (message == null) {
return ErrorCode.ERROR_CODE_NOT_EXIST;
@@ -35,11 +34,6 @@ public class RecallMessageHandler extends IMHandler<WFCMessage.INT64Buf> {
publish(fromUser, clientID, message);
//等待客户端实现根据撤回消息更新内容,之后可以删掉这段代码
m_messagesStore.getNotifyReceivers(fromUser, message.toBuilder(), notifyReceivers, false);
this.publisher.publishRecall2Receivers(int64Buf.getId(), fromUser, notifyReceivers, clientID);
return errorCode;
}
@@ -1370,7 +1370,7 @@ public class MemoryMessagesStore implements IMessagesStore {
}
@Override
public ErrorCode recallMessage(long messageUid, String operatorId, boolean isAdmin) {
public ErrorCode recallMessage(long messageUid, String operatorId, String clientId, boolean isAdmin) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
IMap<Long, MessageBundle> mIMap = hzInstance.getMap(MESSAGES_MAP);
@@ -1421,8 +1421,14 @@ public class MemoryMessagesStore implements IMessagesStore {
return ErrorCode.ERROR_CODE_NOT_RIGHT;
}
message = message.toBuilder().setContent(message.getContent().toBuilder().setContent(operatorId).setType(80).clearSearchableContent().setData(ByteString.copyFrom(new StringBuffer().append(messageUid).toString().getBytes())).build()).build();
String searchContent = message.getContent().getSearchableContent() == null ? "" : message.getContent().getSearchableContent();
String cont = message.getContent().getContent() == null ? "" : message.getContent().getContent();
String extra = message.getContent().getExtra() == null ? "" : message.getContent().getExtra();
String recalledContent = "{\"s\":\"" + message.getFromUser() + "\",\"ts\":" + message.getServerTimestamp() + ",\"t\":" + message.getContent().getType() + ",\"sc\":\"" + searchContent + "\",\"c\":\"" + cont + "\",\"e\":\"" + extra + "\"}";
message = message.toBuilder().setContent(message.getContent().toBuilder().setContent(operatorId).setType(80).clearSearchableContent().setData(ByteString.copyFrom(String.valueOf(messageUid).getBytes())).setExtra(recalledContent).build()).build();
messageBundle.setMessage(message);
messageBundle.setFromClientId(clientId);
databaseStore.deleteMessage(messageUid);
@@ -122,7 +122,7 @@ public interface IMessagesStore {
boolean isMemberInGroup(String member, String groupId);
ErrorCode canSendMessageInGroup(String member, String groupId);
ErrorCode recallMessage(long messageUid, String operatorId, boolean isAdmin);
ErrorCode recallMessage(long messageUid, String operatorId, String clientId, boolean isAdmin);
void clearUserMessages(String userId);
@@ -64,6 +64,10 @@ public class MessageBundle implements Serializable {
return message;
}
public void setFromClientId(String fromClientId) {
this.fromClientId = fromClientId;
}
public void setMessage(WFCMessage.Message message) {
this.fromUser = message.getFromUser();
this.type = message.getConversation().getType();