Files
LocalChatApp/src/client/service/LocalData.java
T
2026-02-08 23:58:00 +08:00

155 lines
4.4 KiB
Java

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<String, String> userIdNameMap;
private ConcurrentMap<String, GroupData> groupDataMap;
private ConcurrentMap<String, List<String>> groupChatMap;
// 好友列表
private ConcurrentMap<String, String> friendMap;
// 存储所有用户的详细信息
private ConcurrentMap<String, UserData> userDetailsMap;
private LocalData() {
userIdNameMap = new ConcurrentHashMap<>();
groupDataMap = new ConcurrentHashMap<>();
groupChatMap = new ConcurrentHashMap<>();
friendMap = new ConcurrentHashMap<>();
userDetailsMap = new ConcurrentHashMap<>();
id = "";
currentChatId = "";
}
public Map<String, String> 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<String> 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<String> getChatMsg(String groupId) {
if (groupChatMap.containsKey(groupId)) {
return groupChatMap.get(groupId);
} else {
return new ArrayList<>();
}
}
public void setUserDetails(Map<String, UserData> 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<GroupData> getAllGroups() {
return new ArrayList<>(groupDataMap.values());
}
}