|
@@ -51,7 +51,6 @@ public class WebSocketProcess implements ApplicationContextAware {
|
|
|
@Override
|
|
@Override
|
|
|
public void setApplicationContext(ApplicationContext context) {
|
|
public void setApplicationContext(ApplicationContext context) {
|
|
|
WebSocketProcess.applicationContext = context;
|
|
WebSocketProcess.applicationContext = context;
|
|
|
- // 初始化Mapper
|
|
|
|
|
WebSocketProcess.lifeBlacklistMapper = context.getBean(LifeBlacklistMapper.class);
|
|
WebSocketProcess.lifeBlacklistMapper = context.getBean(LifeBlacklistMapper.class);
|
|
|
WebSocketProcess.lifeMessageMapper = context.getBean(LifeMessageMapper.class);
|
|
WebSocketProcess.lifeMessageMapper = context.getBean(LifeMessageMapper.class);
|
|
|
WebSocketProcess.baseRedisService = context.getBean(BaseRedisService.class);
|
|
WebSocketProcess.baseRedisService = context.getBean(BaseRedisService.class);
|
|
@@ -63,11 +62,108 @@ public class WebSocketProcess implements ApplicationContextAware {
|
|
|
**/
|
|
**/
|
|
|
private Session session;
|
|
private Session session;
|
|
|
|
|
|
|
|
- /*
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 接收到客户端消息时触发
|
|
|
|
|
+ */
|
|
|
|
|
+ @OnMessage
|
|
|
|
|
+ public void onMessage(@PathParam("sendId") String id, String message) throws Exception {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 解析消息
|
|
|
|
|
+ WebSocketVo webSocketVo = JSONObject.parseObject(message, WebSocketVo.class);
|
|
|
|
|
+
|
|
|
|
|
+ // 过滤心跳
|
|
|
|
|
+ if (null == webSocketVo || "heartbeat".equals(webSocketVo.getCategory())) return;
|
|
|
|
|
+
|
|
|
|
|
+ // 记录已读消息id
|
|
|
|
|
+ if ("receipt".equals(webSocketVo.getCategory())) {
|
|
|
|
|
+ baseRedisService.setListRight("readMessageIdKey", String.valueOf(webSocketVo.getMessageId()));
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检查消息合规性
|
|
|
|
|
+ if (!checkCompliance(webSocketVo)) {
|
|
|
|
|
+ webSocketVo.setType("7");
|
|
|
|
|
+ webSocketVo.setText("发送内容存在违规行为");
|
|
|
|
|
+ sendMessage(webSocketVo.getSenderId(), JSONObject.from(webSocketVo).toJSONString());
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ log.info("webSocketVo----------------{}", JSONObject.from(webSocketVo).toJSONString());
|
|
|
|
|
+ log.info("concurrentHashMap----------{}", concurrentHashMap.keySet());
|
|
|
|
|
+
|
|
|
|
|
+ // 保存消息记录
|
|
|
|
|
+ LifeMessage lifeMessage = new LifeMessage();
|
|
|
|
|
+ lifeMessage.setSenderId(webSocketVo.getSenderId());
|
|
|
|
|
+ lifeMessage.setReceiverId(webSocketVo.getReceiverId());
|
|
|
|
|
+ lifeMessage.setContent(webSocketVo.getText());
|
|
|
|
|
+ lifeMessage.setType(webSocketVo.getType());
|
|
|
|
|
+ // 查询自己是否在对方的黑名单中
|
|
|
|
|
+ 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);
|
|
|
|
|
+ // 发送消息
|
|
|
|
|
+ webSocketVo.setMessageId(lifeMessage.getId());
|
|
|
|
|
+ webSocketVo.setCategory("message");
|
|
|
|
|
+ webSocketVo.setCreatedTime(lifeMessage.getCreatedTime());
|
|
|
|
|
+ sendMessage(webSocketVo.getSenderId(), JSONObject.from(webSocketVo).toJSONString());
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ lifeMessageMapper.insert(lifeMessage);
|
|
|
|
|
+ // 发送消息
|
|
|
|
|
+ webSocketVo.setMessageId(lifeMessage.getId());
|
|
|
|
|
+ webSocketVo.setCategory("message");
|
|
|
|
|
+ webSocketVo.setCreatedTime(lifeMessage.getCreatedTime());
|
|
|
|
|
+ sendMessage(webSocketVo.getSenderId(), JSONObject.from(webSocketVo).toJSONString());
|
|
|
|
|
+ sendMessage(webSocketVo.getReceiverId(), JSONObject.from(webSocketVo).toJSONString());
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("WebSocketProcess.onMessage()----error----Msg={}", e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 发送消息到指定客户端
|
|
|
|
|
+ */
|
|
|
|
|
+ public void sendMessageBySession(String id, String message, Session session) throws Exception {
|
|
|
|
|
+ log.info("WebSocketProcess.sendMessage()--readySend--type8--id={},message={}", id, message);
|
|
|
|
|
+ // 根据id,从map中获取存储的webSocket对象
|
|
|
|
|
+ // 当客户端是Open状态时,才能发送消息
|
|
|
|
|
+ if (session.isOpen()) {
|
|
|
|
|
+ session.getBasicRemote().sendText(message);
|
|
|
|
|
+ log.info("WebSocketProcess.sendMessage()---sendSuccess--type8--id={},message={}", id, message);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ log.error("WebSocketProcess.sendMessage()---sendError--type8--websocket session:{} is closed ", id);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 发送消息到指定客户端
|
|
|
|
|
+ */
|
|
|
|
|
+ public void sendMessage(String id, String message) throws Exception {
|
|
|
|
|
+ log.info("WebSocketProcess.sendMessage()--readySend----id={},message={}", id, message);
|
|
|
|
|
+ // 根据id,从map中获取存储的webSocket对象
|
|
|
|
|
+ WebSocketProcess webSocketProcess = concurrentHashMap.get(id);
|
|
|
|
|
+ if (!ObjectUtils.isEmpty(webSocketProcess)) {
|
|
|
|
|
+ // 当客户端是Open状态时,才能发送消息
|
|
|
|
|
+ if (webSocketProcess.session.isOpen()) {
|
|
|
|
|
+ webSocketProcess.session.getBasicRemote().sendText(message);
|
|
|
|
|
+ log.info("WebSocketProcess.sendMessage()---sendSuccess---id={},message={}", id, message);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ log.error("WebSocketProcess.sendMessage()---sendError----websocket session:{} is closed ", id);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ log.error("WebSocketProcess.sendMessage()---sendError----websocket session:{} is not exit ", id);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
* 客户端创建连接时触发
|
|
* 客户端创建连接时触发
|
|
|
* */
|
|
* */
|
|
|
@OnOpen
|
|
@OnOpen
|
|
|
- public void onOpen(Session session, @PathParam("sendId") String id) {
|
|
|
|
|
|
|
+ public void onOpen(@PathParam("sendId") String id, Session session) {
|
|
|
//每新建立一个连接,就把当前客户id为key,this为value存储到map中
|
|
//每新建立一个连接,就把当前客户id为key,this为value存储到map中
|
|
|
this.session = session;
|
|
this.session = session;
|
|
|
concurrentHashMap.put(id, this);
|
|
concurrentHashMap.put(id, this);
|
|
@@ -97,71 +193,13 @@ public class WebSocketProcess implements ApplicationContextAware {
|
|
|
* 连接发生异常时候触发
|
|
* 连接发生异常时候触发
|
|
|
*/
|
|
*/
|
|
|
@OnError
|
|
@OnError
|
|
|
- public void onError(Session session, Throwable error) {
|
|
|
|
|
- log.error("WebSocketProcess.onError() Error Mgs=", error);
|
|
|
|
|
|
|
+ public void onError(@PathParam("sendId") String id, Throwable error) {
|
|
|
|
|
+ log.error("WebSocketProcess.onError() Error,id={}, Msg=", id, error);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 接收到客户端消息时触发
|
|
|
|
|
|
|
+ * 验证消息合规性
|
|
|
*/
|
|
*/
|
|
|
- @OnMessage
|
|
|
|
|
- public void onMessage(String message) throws Exception {
|
|
|
|
|
- try {
|
|
|
|
|
- // 过滤心跳
|
|
|
|
|
- WebSocketVo websocketVo = JSONObject.parseObject(message, WebSocketVo.class);
|
|
|
|
|
- if (null == websocketVo || "heartbeat".equals(websocketVo.getCategory())) return;
|
|
|
|
|
-
|
|
|
|
|
- // 记录已读消息id
|
|
|
|
|
- if ("receipt".equals(websocketVo.getCategory())) {
|
|
|
|
|
- baseRedisService.setListRight("readMessageIdKey", String.valueOf(websocketVo.getMessageId()));
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 检查消息合规性
|
|
|
|
|
- if (!checkCompliance(websocketVo)) {
|
|
|
|
|
- websocketVo.setType("7");
|
|
|
|
|
- websocketVo.setText("发送内容存在违规行为");
|
|
|
|
|
- sendMessage(websocketVo.getSenderId(), JSONObject.from(websocketVo).toJSONString());
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- log.info("websocketVo----------------{}",JSONObject.from(websocketVo).toJSONString());
|
|
|
|
|
- log.info("concurrentHashMap----------{}",concurrentHashMap.keySet());
|
|
|
|
|
-
|
|
|
|
|
- // 保存消息记录
|
|
|
|
|
- LifeMessage lifeMessage = new LifeMessage();
|
|
|
|
|
- lifeMessage.setSenderId(websocketVo.getSenderId());
|
|
|
|
|
- lifeMessage.setReceiverId(websocketVo.getReceiverId());
|
|
|
|
|
- lifeMessage.setContent(websocketVo.getText());
|
|
|
|
|
- lifeMessage.setType(websocketVo.getType());
|
|
|
|
|
- // 查询自己是否在对方的黑名单中
|
|
|
|
|
- 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);
|
|
|
|
|
- // 发送消息
|
|
|
|
|
- websocketVo.setMessageId(lifeMessage.getId());
|
|
|
|
|
- websocketVo.setCategory("message");
|
|
|
|
|
- websocketVo.setCreatedTime(lifeMessage.getCreatedTime());
|
|
|
|
|
- sendMessage(websocketVo.getSenderId(), JSONObject.from(websocketVo).toJSONString());
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- lifeMessageMapper.insert(lifeMessage);
|
|
|
|
|
- // 发送消息
|
|
|
|
|
- websocketVo.setMessageId(lifeMessage.getId());
|
|
|
|
|
- websocketVo.setCategory("message");
|
|
|
|
|
- websocketVo.setCreatedTime(lifeMessage.getCreatedTime());
|
|
|
|
|
- sendMessage(websocketVo.getSenderId(), JSONObject.from(websocketVo).toJSONString());
|
|
|
|
|
- sendMessage(websocketVo.getReceiverId(), JSONObject.from(websocketVo).toJSONString());
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("WebSocketProcess.onMessage()----error----Msg={}", e.getMessage());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
private boolean checkCompliance(WebSocketVo websocketVo) throws Exception {
|
|
private boolean checkCompliance(WebSocketVo websocketVo) throws Exception {
|
|
|
List<String> servicesList = Lists.newArrayList();
|
|
List<String> servicesList = Lists.newArrayList();
|
|
|
TextModerationResultVO textModerationResultVO = null;
|
|
TextModerationResultVO textModerationResultVO = null;
|
|
@@ -174,30 +212,7 @@ public class WebSocketProcess implements ApplicationContextAware {
|
|
|
servicesList.add(ImageReviewServiceEnum.TONALITY_IMPROVE.getService());
|
|
servicesList.add(ImageReviewServiceEnum.TONALITY_IMPROVE.getService());
|
|
|
textModerationResultVO = textModerationUtil.invokeFunction(websocketVo.getText(), servicesList);
|
|
textModerationResultVO = textModerationUtil.invokeFunction(websocketVo.getText(), servicesList);
|
|
|
}
|
|
}
|
|
|
- if (null != textModerationResultVO && "high".equals(textModerationResultVO.getRiskLevel())) {
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 发送消息到指定客户端
|
|
|
|
|
- */
|
|
|
|
|
- public void sendMessage(String id, String message) throws Exception {
|
|
|
|
|
- log.info("WebSocketProcess.sendMessage()--ready----id={},message={}", id, message);
|
|
|
|
|
- //根据id,从map中获取存储的webSocket对象
|
|
|
|
|
- WebSocketProcess webSocketProcess = concurrentHashMap.get(id);
|
|
|
|
|
- if (!ObjectUtils.isEmpty(webSocketProcess)) {
|
|
|
|
|
- //当客户端是Open状态时,才能发送消息
|
|
|
|
|
- if (webSocketProcess.session.isOpen()) {
|
|
|
|
|
- webSocketProcess.session.getBasicRemote().sendText(message);
|
|
|
|
|
- log.info("WebSocketProcess.sendMessage()---success---id={},message={}", id, message);
|
|
|
|
|
- } else {
|
|
|
|
|
- log.error("WebSocketProcess.sendMessage()---error----websocket session:{} is closed ", id);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- log.error("WebSocketProcess.sendMessage()---error----websocket session:{} is not exit ", id);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return !(null != textModerationResultVO && "high".equals(textModerationResultVO.getRiskLevel()));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|