package client.service; import server.data.GroupData; import server.data.UserData; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; // 这个类用于存储本地的数据,便于之后的UI更新操作。 public class LocalData { private static final LocalData INSTANCE = new LocalData(); public static LocalData get() { return INSTANCE; } private String id; // 当前的所在的群聊id,辅助UI更新 private String currentChatId; // 使用 ConcurrentHashMap 替代 HashMap private ConcurrentMap userIdNameMap; private ConcurrentMap groupDataMap; private ConcurrentMap> groupChatMap; // 好友列表 private ConcurrentMap friendMap; // 存储所有用户的详细信息 private ConcurrentMap userDetailsMap; private LocalData() { userIdNameMap = new ConcurrentHashMap<>(); groupDataMap = new ConcurrentHashMap<>(); groupChatMap = new ConcurrentHashMap<>(); friendMap = new ConcurrentHashMap<>(); userDetailsMap = new ConcurrentHashMap<>(); id = ""; currentChatId = ""; } public Map getFriends() { return friendMap; } public void addFriend(String id, String name) { friendMap.put(id, name); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCurrentChatName() { return groupDataMap.get(currentChatId).getGroupName(); } public synchronized void setCurrentChatId(String id) { this.currentChatId = id; } public synchronized String getCurrentChatId() { return currentChatId; } public void addUserId_name(String id, String name) { userIdNameMap.put(id, name); } public String getGroupName(String groupId) { return groupDataMap.get(groupId).getGroupName(); } public void addChatMsg(String groupId, List messages) { // 覆盖模式:用于初始化加载历史消息,避免重复添加 groupChatMap.put(groupId, new ArrayList<>(messages)); } public void addChatMsg(String groupId, String message) { if (groupChatMap.containsKey(groupId)) { groupChatMap.get(groupId).add(message); } else { groupChatMap.put(groupId, new ArrayList<>()); groupChatMap.get(groupId).add(message); } } public List getChatMsg(String groupId) { if (groupChatMap.containsKey(groupId)) { return groupChatMap.get(groupId); } else { return new ArrayList<>(); } } public void setUserDetails(Map userDetails) { userDetailsMap.clear(); userDetailsMap.putAll(userDetails); // 同时更新 userIdNameMap,确保一致性 userDetails.forEach((id, userData) -> { userIdNameMap.put(id, userData.getNickname()); }); } public void updateUserDetails(UserData userData) { userDetailsMap.put(userData.getUserId(), userData); userIdNameMap.put(userData.getUserId(), userData.getNickname()); } public UserData getUserDetail(String userId) { return userDetailsMap.get(userId); } public void removeGroupChatMsg(String groupId) { if (groupChatMap.containsKey(groupId)) { groupChatMap.remove(groupId); } } public String getUserName(String userId) { if (userIdNameMap.containsKey(userId)) return userIdNameMap.get(userId); else return userId; } public void setUserName(String suerId, String name) { userIdNameMap.put(suerId, name); } public synchronized void addGroup(String groupId, GroupData groupData) { groupDataMap.put(groupId, groupData); // HashMap的put方法会自动替换已有的键值对 } public void setGroupName(String groupId, String name) { groupDataMap.get(groupId).setGroupName(name); } public GroupData getGroupData(String groupId) { return groupDataMap.get(groupId); } public List getAllGroups() { return new ArrayList<>(groupDataMap.values()); } }