|
@@ -1,19 +1,32 @@
|
|
package shop.alien.store.config;
|
|
package shop.alien.store.config;
|
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import io.swagger.models.auth.In;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.ObjectUtils;
|
|
import org.springframework.util.ObjectUtils;
|
|
|
|
+import shop.alien.entity.store.LifeBlacklist;
|
|
import shop.alien.entity.store.LifeMessage;
|
|
import shop.alien.entity.store.LifeMessage;
|
|
|
|
+import shop.alien.entity.store.LifeUser;
|
|
|
|
+import shop.alien.entity.store.StoreUser;
|
|
import shop.alien.entity.store.vo.WebsocketVo;
|
|
import shop.alien.entity.store.vo.WebsocketVo;
|
|
|
|
+import shop.alien.mapper.LifeBlacklistMapper;
|
|
import shop.alien.mapper.LifeMessageMapper;
|
|
import shop.alien.mapper.LifeMessageMapper;
|
|
|
|
+import shop.alien.mapper.LifeUserMapper;
|
|
|
|
+import shop.alien.mapper.StoreUserMapper;
|
|
|
|
+import shop.alien.util.common.JwtUtil;
|
|
|
|
|
|
import javax.websocket.*;
|
|
import javax.websocket.*;
|
|
import javax.websocket.server.PathParam;
|
|
import javax.websocket.server.PathParam;
|
|
import javax.websocket.server.ServerEndpoint;
|
|
import javax.websocket.server.ServerEndpoint;
|
|
|
|
+import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @author ssk
|
|
* @author ssk
|
|
@@ -26,8 +39,8 @@ import java.util.concurrent.ConcurrentHashMap;
|
|
public class WebSocketProcess {
|
|
public class WebSocketProcess {
|
|
|
|
|
|
private final LifeMessageMapper lifeMessageMapper = SpringContext.getBean(LifeMessageMapper.class);
|
|
private final LifeMessageMapper lifeMessageMapper = SpringContext.getBean(LifeMessageMapper.class);
|
|
-
|
|
|
|
private final BaseRedisService baseRedisService = SpringContext.getBean(BaseRedisService.class);
|
|
private final BaseRedisService baseRedisService = SpringContext.getBean(BaseRedisService.class);
|
|
|
|
+ private final LifeBlacklistMapper lifeBlacklistMapper = SpringContext.getBean(LifeBlacklistMapper.class);
|
|
|
|
|
|
/*
|
|
/*
|
|
* 持有每个webSocket对象,以key-value存储到线程安全ConcurrentHashMap,
|
|
* 持有每个webSocket对象,以key-value存储到线程安全ConcurrentHashMap,
|
|
@@ -48,8 +61,16 @@ public class WebSocketProcess {
|
|
this.session = session;
|
|
this.session = session;
|
|
concurrentHashMap.put(id, this);
|
|
concurrentHashMap.put(id, this);
|
|
log.info("WebSocketProcess.onOpen() Open a websocket. id={}", id);
|
|
log.info("WebSocketProcess.onOpen() Open a websocket. id={}", id);
|
|
|
|
+
|
|
|
|
+ // 获取拉黑自己的用户信息
|
|
|
|
+ LambdaQueryWrapper<LifeBlacklist> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ wrapper.eq(LifeBlacklist::getBlockedPhoneId, id);
|
|
|
|
+ List<String> blackList = lifeBlacklistMapper.selectList(wrapper).stream().map(LifeBlacklist::getBlockerPhoneId).collect(Collectors.toList());
|
|
|
|
+ if (CollectionUtil.isNotEmpty(blackList)) baseRedisService.setSaveOrOverwriteScriptList("blackList_" + id, blackList);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 客户端连接关闭时触发
|
|
* 客户端连接关闭时触发
|
|
**/
|
|
**/
|
|
@@ -58,6 +79,7 @@ public class WebSocketProcess {
|
|
//客户端连接关闭时,移除map中存储的键值对
|
|
//客户端连接关闭时,移除map中存储的键值对
|
|
concurrentHashMap.remove(id);
|
|
concurrentHashMap.remove(id);
|
|
log.info("WebSocketProcess.onClose() close a websocket, concurrentHashMap remove sessionId= {}", id);
|
|
log.info("WebSocketProcess.onClose() close a websocket, concurrentHashMap remove sessionId= {}", id);
|
|
|
|
+ baseRedisService.delete("blackList_" + id);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -90,7 +112,17 @@ public class WebSocketProcess {
|
|
lifeMessage.setReceiverId(websocketVo.getReceiverId());
|
|
lifeMessage.setReceiverId(websocketVo.getReceiverId());
|
|
lifeMessage.setContent(websocketVo.getText());
|
|
lifeMessage.setContent(websocketVo.getText());
|
|
lifeMessage.setType(websocketVo.getType());
|
|
lifeMessage.setType(websocketVo.getType());
|
|
- lifeMessageMapper.insert(lifeMessage);
|
|
|
|
|
|
+ // 查询自己是否在对方的黑名单中
|
|
|
|
+ if (baseRedisService.hasKey("blackList_" + websocketVo.getSenderId())) {
|
|
|
|
+ List<String> blackList = baseRedisService.getList("blackList_" + websocketVo.getSenderId());
|
|
|
|
+ if (blackList.contains(websocketVo.getReceiverId())) {
|
|
|
|
+ lifeMessage.setDeletePhoneId(websocketVo.getReceiverId());
|
|
|
|
+ lifeMessageMapper.insert(lifeMessage);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ lifeMessageMapper.insert(lifeMessage);
|
|
|
|
+ }
|
|
|
|
|
|
// 发送消息
|
|
// 发送消息
|
|
websocketVo.setMessageId(lifeMessage.getId());
|
|
websocketVo.setMessageId(lifeMessage.getId());
|