Browse Source

im-client支持多个服务连接

master
blue 2 years ago
parent
commit
136b5567c8
  1. 1
      im-client/src/main/java/com/bx/imclient/IMAutoConfiguration.java
  2. 6
      im-client/src/main/java/com/bx/imclient/sender/IMSender.java
  3. 10
      im-client/src/main/java/com/bx/imclient/task/GroupMessageResultResultTask.java
  4. 11
      im-client/src/main/java/com/bx/imclient/task/PrivateMessageResultResultTask.java
  5. 4
      im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java
  6. 1
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java
  7. 2
      im-platform/src/main/resources/application.yml
  8. 3
      im-server/src/main/java/com/bx/imserver/netty/processor/GroupMessageProcessor.java
  9. 3
      im-server/src/main/java/com/bx/imserver/netty/processor/PrivateMessageProcessor.java
  10. 1
      im-ui/src/components/chat/ChatBox.vue

1
im-client/src/main/java/com/bx/imclient/IMAutoConfiguration.java

@ -9,4 +9,5 @@ import org.springframework.context.annotation.Configuration;
@Configuration @Configuration
@ComponentScan("com.bx.imclient") @ComponentScan("com.bx.imclient")
public class IMAutoConfiguration { public class IMAutoConfiguration {
} }

6
im-client/src/main/java/com/bx/imclient/sender/IMSender.java

@ -9,6 +9,7 @@ import com.bx.imcommon.enums.IMSendCode;
import com.bx.imcommon.enums.IMTerminalType; import com.bx.imcommon.enums.IMTerminalType;
import com.bx.imcommon.model.*; import com.bx.imcommon.model.*;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -22,6 +23,9 @@ public class IMSender {
@Resource(name="IMRedisTemplate") @Resource(name="IMRedisTemplate")
private RedisTemplate<String, Object> redisTemplate; private RedisTemplate<String, Object> redisTemplate;
@Value("${spring.application.name}")
private String appName;
private final MessageListenerMulticaster listenerMulticaster; private final MessageListenerMulticaster listenerMulticaster;
public<T> void sendPrivateMessage(IMPrivateMessage<T> message) { public<T> void sendPrivateMessage(IMPrivateMessage<T> message) {
@ -35,6 +39,7 @@ public class IMSender {
IMRecvInfo recvInfo = new IMRecvInfo(); IMRecvInfo recvInfo = new IMRecvInfo();
recvInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.code()); recvInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.code());
recvInfo.setSendResult(message.getSendResult()); recvInfo.setSendResult(message.getSendResult());
recvInfo.setServiceName(appName);
recvInfo.setSender(message.getSender()); recvInfo.setSender(message.getSender());
recvInfo.setReceivers(Collections.singletonList(new IMUserInfo(message.getRecvId(), terminal))); recvInfo.setReceivers(Collections.singletonList(new IMUserInfo(message.getRecvId(), terminal)));
recvInfo.setData(message.getData()); recvInfo.setData(message.getData());
@ -106,6 +111,7 @@ public class IMSender {
recvInfo.setCmd(IMCmdType.GROUP_MESSAGE.code()); recvInfo.setCmd(IMCmdType.GROUP_MESSAGE.code());
recvInfo.setReceivers(new LinkedList<>(entry.getValue())); recvInfo.setReceivers(new LinkedList<>(entry.getValue()));
recvInfo.setSender(message.getSender()); recvInfo.setSender(message.getSender());
recvInfo.setServiceName(appName);
recvInfo.setSendResult(message.getSendResult()); recvInfo.setSendResult(message.getSendResult());
recvInfo.setData(message.getData()); recvInfo.setData(message.getData());
// 推送至队列 // 推送至队列

10
im-client/src/main/java/com/bx/imclient/task/GroupMessageResultResultTask.java

@ -1,11 +1,14 @@
package com.bx.imclient.task; package com.bx.imclient.task;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.bx.imclient.listener.MessageListenerMulticaster; import com.bx.imclient.listener.MessageListenerMulticaster;
import com.bx.imcommon.contant.IMRedisKey; import com.bx.imcommon.contant.IMRedisKey;
import com.bx.imcommon.enums.IMListenerType; import com.bx.imcommon.enums.IMListenerType;
import com.bx.imcommon.model.IMSendResult; import com.bx.imcommon.model.IMSendResult;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -13,17 +16,20 @@ import javax.annotation.Resource;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@Component @Component
@AllArgsConstructor @RequiredArgsConstructor
public class GroupMessageResultResultTask extends AbstractMessageResultTask { public class GroupMessageResultResultTask extends AbstractMessageResultTask {
@Resource(name = "IMRedisTemplate") @Resource(name = "IMRedisTemplate")
private RedisTemplate<String,Object> redisTemplate; private RedisTemplate<String,Object> redisTemplate;
@Value("${spring.application.name}")
private String appName;
private final MessageListenerMulticaster listenerMulticaster; private final MessageListenerMulticaster listenerMulticaster;
@Override @Override
public void pullMessage() { public void pullMessage() {
String key = IMRedisKey.IM_RESULT_GROUP_QUEUE; String key = StrUtil.join(":",IMRedisKey.IM_RESULT_GROUP_QUEUE,appName);
JSONObject jsonObject = (JSONObject)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS); JSONObject jsonObject = (JSONObject)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS);
if(jsonObject != null) { if(jsonObject != null) {
IMSendResult result = jsonObject.toJavaObject(IMSendResult.class); IMSendResult result = jsonObject.toJavaObject(IMSendResult.class);

11
im-client/src/main/java/com/bx/imclient/task/PrivateMessageResultResultTask.java

@ -1,12 +1,15 @@
package com.bx.imclient.task; package com.bx.imclient.task;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.bx.imclient.listener.MessageListenerMulticaster; import com.bx.imclient.listener.MessageListenerMulticaster;
import com.bx.imcommon.contant.IMRedisKey; import com.bx.imcommon.contant.IMRedisKey;
import com.bx.imcommon.enums.IMListenerType; import com.bx.imcommon.enums.IMListenerType;
import com.bx.imcommon.model.IMSendResult; import com.bx.imcommon.model.IMSendResult;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -15,18 +18,20 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
@Component @Component
@AllArgsConstructor @RequiredArgsConstructor
public class PrivateMessageResultResultTask extends AbstractMessageResultTask { public class PrivateMessageResultResultTask extends AbstractMessageResultTask {
@Resource(name = "IMRedisTemplate") @Resource(name = "IMRedisTemplate")
private RedisTemplate<String,Object> redisTemplate; private RedisTemplate<String,Object> redisTemplate;
@Value("${spring.application.name}")
private String appName;
private final MessageListenerMulticaster listenerMulticaster; private final MessageListenerMulticaster listenerMulticaster;
@Override @Override
public void pullMessage() { public void pullMessage() {
String key = IMRedisKey.IM_RESULT_PRIVATE_QUEUE; String key = StrUtil.join(":",IMRedisKey.IM_RESULT_PRIVATE_QUEUE,appName);
JSONObject jsonObject = (JSONObject)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS); JSONObject jsonObject = (JSONObject)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS);
if(jsonObject != null) { if(jsonObject != null) {
IMSendResult result = jsonObject.toJavaObject(IMSendResult.class); IMSendResult result = jsonObject.toJavaObject(IMSendResult.class);

4
im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java

@ -27,6 +27,10 @@ public class IMRecvInfo {
*/ */
private Boolean sendResult; private Boolean sendResult;
/**
* 当前服务名回调发送结果使用
*/
private String serviceName;
/** /**
* 推送消息体 * 推送消息体
*/ */

1
im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java

@ -86,6 +86,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
IMGroupMessage<GroupMessageVO> sendMessage = new IMGroupMessage<>(); IMGroupMessage<GroupMessageVO> sendMessage = new IMGroupMessage<>();
sendMessage.setSender(new IMUserInfo(session.getUserId(), session.getTerminal())); sendMessage.setSender(new IMUserInfo(session.getUserId(), session.getTerminal()));
sendMessage.setRecvIds(userIds); sendMessage.setRecvIds(userIds);
sendMessage.setSendResult(false);
sendMessage.setData(msgInfo); sendMessage.setData(msgInfo);
imClient.sendGroupMessage(sendMessage); imClient.sendGroupMessage(sendMessage);
log.info("发送群聊消息,发送id:{},群聊id:{},内容:{}", session.getUserId(), dto.getGroupId(), dto.getContent()); log.info("发送群聊消息,发送id:{},群聊id:{},内容:{}", session.getUserId(), dto.getGroupId(), dto.getContent());

2
im-platform/src/main/resources/application.yml

@ -3,6 +3,8 @@ server:
port: 8888 port: 8888
#配置项目的数据源 #配置项目的数据源
spring: spring:
application:
name: im-platform
mvc: mvc:
pathmatch: pathmatch:
matching-strategy: ant_path_matcher matching-strategy: ant_path_matcher

3
im-server/src/main/java/com/bx/imserver/netty/processor/GroupMessageProcessor.java

@ -1,5 +1,6 @@
package com.bx.imserver.netty.processor; package com.bx.imserver.netty.processor;
import cn.hutool.core.util.StrUtil;
import com.bx.imcommon.contant.IMRedisKey; import com.bx.imcommon.contant.IMRedisKey;
import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMCmdType;
import com.bx.imcommon.enums.IMSendCode; import com.bx.imcommon.enums.IMSendCode;
@ -64,7 +65,7 @@ public class GroupMessageProcessor extends AbstractMessageProcessor<IMRecvInfo>
result.setCode(sendCode.code()); result.setCode(sendCode.code());
result.setData(recvInfo.getData()); result.setData(recvInfo.getData());
// 推送到结果队列 // 推送到结果队列
String key = IMRedisKey.IM_RESULT_GROUP_QUEUE; String key = StrUtil.join(":",IMRedisKey.IM_RESULT_GROUP_QUEUE,recvInfo.getServiceName());
redisTemplate.opsForList().rightPush(key, result); redisTemplate.opsForList().rightPush(key, result);
} }
} }

3
im-server/src/main/java/com/bx/imserver/netty/processor/PrivateMessageProcessor.java

@ -1,5 +1,6 @@
package com.bx.imserver.netty.processor; package com.bx.imserver.netty.processor;
import cn.hutool.core.util.StrUtil;
import com.bx.imcommon.contant.IMRedisKey; import com.bx.imcommon.contant.IMRedisKey;
import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMCmdType;
import com.bx.imcommon.enums.IMSendCode; import com.bx.imcommon.enums.IMSendCode;
@ -57,7 +58,7 @@ public class PrivateMessageProcessor extends AbstractMessageProcessor<IMRecvInfo
result.setCode(sendCode.code()); result.setCode(sendCode.code());
result.setData(recvInfo.getData()); result.setData(recvInfo.getData());
// 推送到结果队列 // 推送到结果队列
String key = IMRedisKey.IM_RESULT_PRIVATE_QUEUE; String key = StrUtil.join(":",IMRedisKey.IM_RESULT_PRIVATE_QUEUE,recvInfo.getServiceName());
redisTemplate.opsForList().rightPush(key, result); redisTemplate.opsForList().rightPush(key, result);
} }
} }

1
im-ui/src/components/chat/ChatBox.vue

@ -256,7 +256,6 @@
let textNode = document.createTextNode(txt); let textNode = document.createTextNode(txt);
range.insertNode(textNode) range.insertNode(textNode)
range.collapse(); range.collapse();
} }
let items = (event.clipboardData || window.clipboardData).items let items = (event.clipboardData || window.clipboardData).items
if (items.length) { if (items.length) {

Loading…
Cancel
Save