add get user group list and destroy user function

This commit is contained in:
fengyun
2019-11-30 11:46:52 +08:00
parent e72ae59e49
commit f5816e20dd
17 changed files with 593 additions and 5 deletions
@@ -788,6 +788,40 @@ public class DatabaseStore {
});
}
void clearUserMessage(final String userId) {
mScheduler.execute(()->{
String tableName = getUserMessageTable(userId);
Connection connection = null;
PreparedStatement statement = null;
try {
connection = DBUtil.getConnection();
String sql = "delete from " + tableName + " where _uid = ?";
statement = connection.prepareStatement(sql);
statement.setString(1, userId);
int count = statement.executeUpdate();
LOG.info("Update rows {}", count);
try {
if (statement!=null) {
statement.close();
}
statement = null;
} catch (SQLException e) {
e.printStackTrace();
Utility.printExecption(LOG, e);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Utility.printExecption(LOG, e);
} finally {
DBUtil.closeDB(connection, statement);
}
});
}
void removeFavGroup(final String groupId, final List<String> memberIds) {
Connection connection = null;
PreparedStatement statement = null;
@@ -863,6 +897,31 @@ public class DatabaseStore {
});
}
void clearUserSetting(final String userId) {
mScheduler.execute(()->{
Connection connection = null;
PreparedStatement statement = null;
try {
connection = DBUtil.getConnection();
String sql = "delete from t_user_setting where `_uid` = ?";
statement = connection.prepareStatement(sql);
int index = 1;
statement.setString(index++, userId);
int count = statement.executeUpdate();
LOG.info("Update rows {}", count);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Utility.printExecption(LOG, e);
} finally {
DBUtil.closeDB(connection, statement);
}
});
}
List<WFCMessage.UserSettingEntry> getPersistUserSetting(final String userId) {
Connection connection = null;
PreparedStatement statement = null;
@@ -1070,6 +1129,27 @@ public class DatabaseStore {
return result;
}
void clearUserSessions(String uid) {
Connection connection = null;
PreparedStatement statement = null;
try {
connection = DBUtil.getConnection();
String sql = "delete from t_user_session where `_uid`=?";
statement = connection.prepareStatement(sql);
int index = 1;
statement.setString(index++, uid);
int count = statement.executeUpdate();
LOG.info("Update rows {}", count);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Utility.printExecption(LOG, e);
} finally {
DBUtil.closeDB(connection, statement);
}
}
MemorySessionStore.Session getSession(String uid, String clientId, ClientSession clientSession) {
String sql = "select `_package_name`,`_token`,`_voip_token`,`_secret`,`_db_secret`,`_platform`,`_push_type`,`_device_name`,`_device_version`,`_phone_name`,`_language`,`_carrier_name`, `_dt`, `_deleted` from t_user_session where `_uid` = ? and `_cid` = ? limit 1";
Connection connection = null;
@@ -1422,6 +1502,35 @@ public class DatabaseStore {
return null;
}
Set<String> getUserGroupIds(String userId) {
Connection connection = null;
PreparedStatement statement = null;
ResultSet rs = null;
try {
connection = DBUtil.getConnection();
String sql = "select `_gid` from t_group_member where `_mid` = ? and `_type` <> ?";
statement = connection.prepareStatement(sql);
statement.setString(1, userId);
statement.setInt(2, ProtoConstants.GroupMemberType.GroupMemberType_Removed);
rs = statement.executeQuery();
Set<String> out = new HashSet<>();
while (rs.next()) {
String uid = rs.getString(1);
out.add(uid);
}
return out;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Utility.printExecption(LOG, e);
} finally {
DBUtil.closeDB(connection, statement, rs);
}
return null;
}
void updateGroupMemberCountDt(final String groupId, final int count, final long dt) {
mScheduler.execute(()->{
Connection connection = null;
@@ -2364,6 +2473,52 @@ public class DatabaseStore {
return null;
}
void removeUserFriend(String userId) {
Connection connection = null;
PreparedStatement statement = null;
try {
connection = DBUtil.getConnection();
String sql = "update t_friend set `_alias` = '', `_state` = 1, `_blacked` = 0, `_dt` = ? where `_uid` = ? or `_friend_uid` = ?";
statement = connection.prepareStatement(sql);
int index = 1;
statement.setLong(index++, System.currentTimeMillis());
statement.setString(index++, userId);
statement.setString(index++, userId);
int count = statement.executeUpdate();
LOG.info("Update rows {}", count);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Utility.printExecption(LOG, e);
} finally {
DBUtil.closeDB(connection, statement);
}
}
void removeUserFriendRequest(String userId) {
Connection connection = null;
PreparedStatement statement = null;
try {
connection = DBUtil.getConnection();
String sql = "delete from t_friend_request where _uid = ? or _friend_uid = ?";
statement = connection.prepareStatement(sql);
int index = 1;
statement.setString(index++, userId);
statement.setString(index++, userId);
int count = statement.executeUpdate();
LOG.info("Update rows {}", count);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Utility.printExecption(LOG, e);
} finally {
DBUtil.closeDB(connection, statement);
}
}
List<WFCMessage.FriendRequest> getPersistFriendRequests(String userId) {
Connection connection = null;
PreparedStatement statement = null;
@@ -772,7 +772,31 @@ public class MemoryMessagesStore implements IMessagesStore {
}
if (groupInfo.getType() != ProtoConstants.GroupType.GroupType_Free && groupInfo.getOwner() != null && groupInfo.getOwner().equals(operator)) {
return ErrorCode.ERROR_CODE_NOT_RIGHT;
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
Collection<WFCMessage.GroupMember> members = groupMembers.get(groupId);
if (members == null || members.size() == 0) {
members = loadGroupMemberFromDB(hzInstance, groupId);
}
WFCMessage.GroupMember newOwner = null;
for (WFCMessage.GroupMember member :members) {
if (!member.getMemberId().equals(operator) && member.getType() != GroupMemberType_Removed) {
newOwner = member;
break;
}
}
if (newOwner == null) {
return dismissGroup(operator, groupId, false);
}
transferGroup(operator, groupId, newOwner.getMemberId(), false);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
removeGroupMember(groupId, Arrays.asList(operator));
@@ -781,6 +805,18 @@ public class MemoryMessagesStore implements IMessagesStore {
return ErrorCode.ERROR_CODE_SUCCESS;
}
@Override
public void clearUserGroups(String userId) {
Set<String> groupIds = databaseStore.getUserGroupIds(userId);
int[] removedCount = new int[1];
for (String groupId : groupIds) {
removedCount[0] = 0;
ErrorCode errorCode = quitGroup(userId, groupId);
LOG.info("clear user {} group {} result {}", userId, groupId, errorCode);
}
}
private void removeGroupUserSettings(String groupId, List<String> users) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
MultiMap<String, WFCMessage.UserSettingEntry> userSettingMap = hzInstance.getMultiMap(USER_SETTING);
@@ -971,6 +1007,11 @@ public class MemoryMessagesStore implements IMessagesStore {
return groupInfo;
}
@Override
public Set<String> getUserGroupIds(String userId) {
return databaseStore.getUserGroupIds(userId);
}
@Override
public ErrorCode getGroupMembers(String groupId, long maxDt, List<WFCMessage.GroupMember> members) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
@@ -1230,6 +1271,18 @@ public class MemoryMessagesStore implements IMessagesStore {
}
}
@Override
public void clearUserMessages(String userId) {
mWriteLock.lock();
try {
userMessages.remove(userId);
} finally {
mWriteLock.unlock();
}
databaseStore.clearUserMessage(userId);
}
@Override
public WFCMessage.Robot getRobot(String robotId) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
@@ -1400,6 +1453,18 @@ public class MemoryMessagesStore implements IMessagesStore {
databaseStore.updateUserPassword(user.getUid(), password);
}
@Override
public void destoryUser(String userId) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
IMap<String, WFCMessage.User> mUserMap = hzInstance.getMap(USERS);
WFCMessage.User us = mUserMap.get(userId);
if (us != null) {
us = WFCMessage.User.newBuilder().setUid(userId).setUpdateDt(System.currentTimeMillis()).setDisplayName("已删除用户").setName(userId).build();
mUserMap.put(userId, us);
}
}
@Override
public WFCMessage.User getUserInfo(String userId) {
if (StringUtil.isNullOrEmpty(userId)) {
@@ -1689,6 +1754,31 @@ public class MemoryMessagesStore implements IMessagesStore {
return out;
}
@Override
public void clearUserFriend(String userId) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
Collection<FriendData> friendDatas = friendsMap.get(userId);
if (friendDatas == null || friendDatas.size() == 0) {
friendDatas = loadFriend(friendsMap, userId);
}
databaseStore.removeUserFriend(userId);
databaseStore.removeUserFriendRequest(userId);
MultiMap<String, WFCMessage.FriendRequest> requestMap = hzInstance.getMultiMap(USER_FRIENDS_REQUEST);
requestMap.remove(userId);
if (friendDatas != null) {
for (FriendData fd : friendDatas) {
friendsMap.remove(fd.getFriendUid());
}
friendsMap.remove(userId);
}
}
@Override
public List<WFCMessage.FriendRequest> getFriendRequestList(String userId, long version) {
List<WFCMessage.FriendRequest> out = new ArrayList<>();
@@ -2189,6 +2279,14 @@ public class MemoryMessagesStore implements IMessagesStore {
return updateDt;
}
@Override
public void clearUserSettings(String userId) {
databaseStore.clearUserSetting(userId);
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
MultiMap<String, WFCMessage.UserSettingEntry> userSettingMap = hzInstance.getMultiMap(USER_SETTING);
userSettingMap.remove(userId);
}
@Override
public boolean getUserGlobalSlient(String userId) {
Boolean slient = userGlobalSlientMap.get(userId);
@@ -2246,6 +2344,12 @@ public class MemoryMessagesStore implements IMessagesStore {
return ErrorCode.ERROR_CODE_SUCCESS;
}
@Override
public void clearUserChannels(String userId) {
}
@Override
public ErrorCode modifyChannelInfo(String operator, String channelId, int modifyType, String value) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
@@ -24,9 +24,8 @@ import io.moquette.BrokerConstants;
import io.moquette.server.Constants;
import io.moquette.server.Server;
import io.moquette.spi.ClientSession;
import io.moquette.spi.IMessagesStore.StoredMessage;
import io.moquette.spi.ISessionsStore;
import io.moquette.spi.IMessagesStore.StoredMessage;
import io.netty.handler.codec.mqtt.MqttVersion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -314,6 +313,20 @@ public class MemorySessionStore implements ISessionsStore {
databaseStore.updateSessionToken(session.getUsername(), session.getClientID(), voip ? session.getVoipDeviceToken() : session.getDeviceToken(), session.getPushType(), voip);
}
@Override
public void clearUserSession(String username) {
LOG.info("Fooooooooo <{}>", username);
databaseStore.clearUserSessions(username);
ConcurrentSkipListSet<String> sessionSet = getUserSessionSet(username);
for (String clientID : sessionSet) {
Session s = sessions.remove(clientID);
mServer.getProcessor().kickoffSession(s);
}
userSessions.remove(username);
}
@Override
public Session createUserSession(String username, String clientID, int platform) {
LOG.debug("createUserSession for client <{}>, user <{}>", clientID, username);
@@ -344,6 +357,10 @@ public class MemorySessionStore implements ISessionsStore {
String c = it.next();
if (!clientID.equals(c)) {
Session s = sessions.get(c);
if (s == null) {
it.remove();
continue;
}
boolean remove = false;
if (platform == ProtoConstants.Platform.Platform_Android || platform == ProtoConstants.Platform.Platform_iOS) {