支持群主或管理员修改成员昵称
This commit is contained in:
@@ -21,7 +21,7 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS;
|
|||||||
public class ModifyGroupAliasHandler extends GroupHandler<WFCMessage.ModifyGroupMemberAlias> {
|
public class ModifyGroupAliasHandler extends GroupHandler<WFCMessage.ModifyGroupMemberAlias> {
|
||||||
@Override
|
@Override
|
||||||
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyGroupMemberAlias request, Qos1PublishHandler.IMCallback callback) {
|
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyGroupMemberAlias request, Qos1PublishHandler.IMCallback callback) {
|
||||||
ErrorCode errorCode = m_messagesStore.modifyGroupAlias(fromUser, request.getGroupId(), request.getAlias());
|
ErrorCode errorCode = m_messagesStore.modifyGroupAlias(fromUser, request.getGroupId(), request.getAlias(), null, isAdmin);
|
||||||
if (errorCode == ERROR_CODE_SUCCESS && request.hasNotifyContent()) {
|
if (errorCode == ERROR_CODE_SUCCESS && request.hasNotifyContent()) {
|
||||||
if (request.hasNotifyContent()&& request.getNotifyContent().getType() > 0) {
|
if (request.hasNotifyContent()&& request.getNotifyContent().getType() > 0) {
|
||||||
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent());
|
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent());
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <[email protected]>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.moquette.imhandler;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
|
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
|
||||||
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
|
import io.moquette.spi.impl.Qos1PublishHandler;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import win.liyufan.im.IMTopic;
|
||||||
|
|
||||||
|
import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS;
|
||||||
|
|
||||||
|
@Handler(IMTopic.ModifyGroupMemberAliasTopic)
|
||||||
|
public class ModifyGroupMemberAliasHandler extends GroupHandler<WFCMessage.ModifyGroupMemberAlias> {
|
||||||
|
@Override
|
||||||
|
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyGroupMemberAlias request, Qos1PublishHandler.IMCallback callback) {
|
||||||
|
ErrorCode errorCode = m_messagesStore.modifyGroupAlias(fromUser, request.getGroupId(), request.getAlias(), request.getMemberId(), isAdmin);
|
||||||
|
if (errorCode == ERROR_CODE_SUCCESS && request.hasNotifyContent()) {
|
||||||
|
if (request.hasNotifyContent()&& request.getNotifyContent().getType() > 0) {
|
||||||
|
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent());
|
||||||
|
} else {
|
||||||
|
WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, request.getAlias(), request.getMemberId()).getModifyGroupMemberAliasNotifyContent();
|
||||||
|
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errorCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1172,7 +1172,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ErrorCode modifyGroupAlias(String operator, String groupId, String alias) {
|
public ErrorCode modifyGroupAlias(String operator, String groupId, String alias, String memberId, boolean isAdmin) {
|
||||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||||
|
|
||||||
IMap<String, WFCMessage.GroupInfo> mIMap = hzInstance.getMap(GROUPS_MAP);
|
IMap<String, WFCMessage.GroupInfo> mIMap = hzInstance.getMap(GROUPS_MAP);
|
||||||
@@ -1186,25 +1186,72 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
long updateDt = System.currentTimeMillis();
|
|
||||||
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
|
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
|
||||||
Collection<WFCMessage.GroupMember> members = groupMembers.get(groupId);
|
Collection<WFCMessage.GroupMember> members = groupMembers.get(groupId);
|
||||||
if (members == null || members.size() == 0) {
|
if (members == null || members.size() == 0) {
|
||||||
members = loadGroupMemberFromDB(hzInstance, groupId);
|
members = loadGroupMemberFromDB(hzInstance, groupId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (StringUtil.isNullOrEmpty(memberId)) {
|
||||||
|
memberId = operator;
|
||||||
|
} else {
|
||||||
|
if (!isAdmin && !operator.equals(groupInfo.getOwner())) {
|
||||||
|
WFCMessage.GroupMember operatorMember = null;
|
||||||
|
WFCMessage.GroupMember targetMember = null;
|
||||||
|
for (WFCMessage.GroupMember member : members) {
|
||||||
|
if (member.getMemberId().equals(operator)) {
|
||||||
|
operatorMember = member;
|
||||||
|
if (targetMember != null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((member.getMemberId().equals(memberId))) {
|
||||||
|
targetMember = member;
|
||||||
|
if (operatorMember != null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (operatorMember == null) {
|
||||||
|
LOG.error("Modify group member alias error, the operator {} is not in group", operator);
|
||||||
|
return ErrorCode.ERROR_CODE_NOT_IN_GROUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetMember == null) {
|
||||||
|
LOG.error("Modify group member alias error, the member {} is not in group", memberId);
|
||||||
|
return ErrorCode.ERROR_CODE_NOT_IN_GROUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (operatorMember.getType() == GroupMemberType_Manager && targetMember.getType() != GroupMemberType_Manager) {
|
||||||
|
LOG.error("Modify group member alias error, the operator {} type is {} and the member {} type is {}", operator, operatorMember.getType(), memberId, targetMember.getType());
|
||||||
|
return ErrorCode.ERROR_CODE_NOT_RIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
long updateDt = System.currentTimeMillis();
|
||||||
|
|
||||||
|
boolean inGroup = false;
|
||||||
for (WFCMessage.GroupMember member : members) {
|
for (WFCMessage.GroupMember member : members) {
|
||||||
if (member.getMemberId().equals(operator)) {
|
if (member.getMemberId().equals(memberId)) {
|
||||||
groupMembers.remove(groupId, member);
|
groupMembers.remove(groupId, member);
|
||||||
member = member.toBuilder().setAlias(alias).setUpdateDt(updateDt).build();
|
member = member.toBuilder().setAlias(alias).setUpdateDt(updateDt).build();
|
||||||
databaseStore.persistGroupMember(groupId, Arrays.asList(member));
|
databaseStore.persistGroupMember(groupId, Arrays.asList(member));
|
||||||
databaseStore.updateGroupMemberCountDt(groupId, -1, updateDt);
|
databaseStore.updateGroupMemberCountDt(groupId, -1, updateDt);
|
||||||
groupMembers.put(groupId, member);
|
groupMembers.put(groupId, member);
|
||||||
|
|
||||||
mIMap.put(groupId, groupInfo.toBuilder().setUpdateDt(updateDt).setMemberUpdateDt(updateDt).build());
|
mIMap.set(groupId, groupInfo.toBuilder().setUpdateDt(updateDt).setMemberUpdateDt(updateDt).build());
|
||||||
|
inGroup = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!inGroup) {
|
||||||
|
LOG.error("Modify group member alias error, the member {} is not in group", memberId);
|
||||||
|
return ErrorCode.ERROR_CODE_NOT_IN_GROUP;
|
||||||
|
}
|
||||||
|
|
||||||
return ErrorCode.ERROR_CODE_SUCCESS;
|
return ErrorCode.ERROR_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ public interface IMessagesStore {
|
|||||||
void clearUserGroups(String userId);
|
void clearUserGroups(String userId);
|
||||||
ErrorCode dismissGroup(String operator, String groupId, boolean isAdmin);
|
ErrorCode dismissGroup(String operator, String groupId, boolean isAdmin);
|
||||||
ErrorCode modifyGroupInfo(String operator, String groupId, int modifyType, String value, boolean isAdmin);
|
ErrorCode modifyGroupInfo(String operator, String groupId, int modifyType, String value, boolean isAdmin);
|
||||||
ErrorCode modifyGroupAlias(String operator, String groupId, String alias);
|
ErrorCode modifyGroupAlias(String operator, String groupId, String alias, String memberId, boolean isAdmin);
|
||||||
List<WFCMessage.GroupInfo> getGroupInfos(List<WFCMessage.UserRequest> requests);
|
List<WFCMessage.GroupInfo> getGroupInfos(List<WFCMessage.UserRequest> requests);
|
||||||
WFCMessage.GroupInfo getGroupInfo(String groupId);
|
WFCMessage.GroupInfo getGroupInfo(String groupId);
|
||||||
Set<String> getUserGroupIds(String userId);
|
Set<String> getUserGroupIds(String userId);
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public interface IMTopic {
|
|||||||
String DismissGroupTopic = "GD";
|
String DismissGroupTopic = "GD";
|
||||||
String ModifyGroupInfoTopic = "GMI";
|
String ModifyGroupInfoTopic = "GMI";
|
||||||
String ModifyGroupAliasTopic = "GMA";
|
String ModifyGroupAliasTopic = "GMA";
|
||||||
|
String ModifyGroupMemberAliasTopic = "GMMA";
|
||||||
String GetGroupInfoTopic = "GPGI";
|
String GetGroupInfoTopic = "GPGI";
|
||||||
String GetGroupMemberTopic = "GPGM";
|
String GetGroupMemberTopic = "GPGM";
|
||||||
String TransferGroupTopic = "GTG";
|
String TransferGroupTopic = "GTG";
|
||||||
|
|||||||
Reference in New Issue
Block a user