Commit 6541e8d0 by Future

聊天室缓存

parent f6ff39ed
...@@ -3,6 +3,7 @@ package com.wecloud.im.chatroom.action; ...@@ -3,6 +3,7 @@ package com.wecloud.im.chatroom.action;
import com.wecloud.dispatch.annotation.ActionMapping; import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.dispatch.common.BaseRequest; import com.wecloud.dispatch.common.BaseRequest;
import com.wecloud.dispatch.extend.ActionRequest; import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.chatroom.cache.ChatRoomCacheManager;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImMessageOnlineSend; import com.wecloud.im.entity.ImMessageOnlineSend;
...@@ -11,9 +12,7 @@ import com.wecloud.im.param.ImConversationQueryVo; ...@@ -11,9 +12,7 @@ import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.MsgVo; import com.wecloud.im.param.MsgVo;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.thousandchat.cache.ThousandChatCacheManager;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
...@@ -53,7 +52,7 @@ public class ChatRoomAction { ...@@ -53,7 +52,7 @@ public class ChatRoomAction {
@Autowired @Autowired
private ChannelSender channelSender; private ChannelSender channelSender;
@Autowired @Autowired
private ThousandChatCacheManager thousandChatCacheManager; private ChatRoomCacheManager chatRoomCacheManager;
@ActionMapping("/chat/chatroom/send") @ActionMapping("/chat/chatroom/send")
@ApiOperation(value = "聊天室消息发送") @ApiOperation(value = "聊天室消息发送")
...@@ -94,7 +93,7 @@ public class ChatRoomAction { ...@@ -94,7 +93,7 @@ public class ChatRoomAction {
*/ */
private void sendMsgForOnline(ChatContentVo data, ImMessageOnlineSend imMessageOnlineSend) { private void sendMsgForOnline(ChatContentVo data, ImMessageOnlineSend imMessageOnlineSend) {
Map<String /** ip **/, List<String /** client的主键ID:platform **/>> onlineIpClientMap = Map<String /** ip **/, List<String /** client的主键ID:platform **/>> onlineIpClientMap =
thousandChatCacheManager.findOnlineHostsByThousandGroupId(data.getToConversation()); chatRoomCacheManager.findOnlineHostsByChatRoomId(data.getToConversation());
// 封装要推给接收方的消息 // 封装要推给接收方的消息
WsResponse<ImMessageOnlineSend> responseModel = new WsResponse<>(); WsResponse<ImMessageOnlineSend> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.ONLINE_MSG.getCmdCode()); responseModel.setCmd(WsResponseCmdEnum.ONLINE_MSG.getCmdCode());
......
package com.wecloud.im.chatroom.cache;
import com.wecloud.im.ws.utils.RedisUtils;
import com.wecloud.utils.GetIpUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* 聊天室的缓存(本地缓存待实现)
*
* @author lixiaozhong
* @date 2022年01月4日 17:00:00
*/
@Service
@Slf4j
public class ChatRoomCacheManager {
/**
* redis的群聊天室房间键 key
*/
public static final String CHAT_ROOM_KEY = "chat_room_";
@Autowired
private RedisUtils redisUtils;
/**
* 成员进入聊天室
*
* @param clientId
* @param chatRoomId
* @param platform
*/
public void intoRoom(Long clientId, Long chatRoomId, Integer platform) {
redisUtils.hashset(CHAT_ROOM_KEY + chatRoomId, clientId + RedisUtils.SPLIT + platform, GetIpUtils.getlanIp(),
2, TimeUnit.DAYS);
}
/**
* 成员离开聊天室
*
* @param clientId
* @param chatRoomId
* @param platform
*/
public void exitRoom(Long clientId, Long chatRoomId, Integer platform) {
redisUtils.hashdel(CHAT_ROOM_KEY + chatRoomId, clientId + RedisUtils.SPLIT + platform);
}
/**
* 根据群ID 获取 聊天室的 在线成员的key-val
*
* @param chatRoomId
* @return 在线成员的key-val,其中key是 client的主键id:platform, val是 ip
*/
public Map<String, String> findOnlineClientsByChatRoomId(Long chatRoomId) {
return redisUtils.hashgetll(CHAT_ROOM_KEY + chatRoomId);
}
/**
* 根据群ID 获取 聊天室的 在线成员的ip以及对应的成员信息,key-val
*
* @param chatRoomId
* @return 在线成员的key-val,其中key是 ip地址, val是 client的主键id:platform
*/
public Map<String, List<String>> findOnlineHostsByChatRoomId(Long chatRoomId) {
Map<String /** client的主键ID:platform **/, String /** ip **/> onlineClientIpMap = findOnlineClientsByChatRoomId(chatRoomId);
Map<String /** ip **/, List<String /** client的主键ID:platform **/>> onlineIpClientMap = new HashMap<>();
onlineClientIpMap.forEach((clientIdAndPlatforms, ip) -> {
onlineIpClientMap.putIfAbsent(ip, new ArrayList<>());
onlineIpClientMap.get(ip).add(clientIdAndPlatforms);
});
return onlineIpClientMap;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment