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
@ComponentScan("com.bx.imclient")
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.model.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@ -22,6 +23,9 @@ public class IMSender {
@Resource(name="IMRedisTemplate")
private RedisTemplate<String, Object> redisTemplate;
@Value("${spring.application.name}")
private String appName;
private final MessageListenerMulticaster listenerMulticaster;
public<T> void sendPrivateMessage(IMPrivateMessage<T> message) {
@ -35,6 +39,7 @@ public class IMSender {
IMRecvInfo recvInfo = new IMRecvInfo();
recvInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.code());
recvInfo.setSendResult(message.getSendResult());
recvInfo.setServiceName(appName);
recvInfo.setSender(message.getSender());
recvInfo.setReceivers(Collections.singletonList(new IMUserInfo(message.getRecvId(), terminal)));
recvInfo.setData(message.getData());
@ -106,6 +111,7 @@ public class IMSender {
recvInfo.setCmd(IMCmdType.GROUP_MESSAGE.code());
recvInfo.setReceivers(new LinkedList<>(entry.getValue()));
recvInfo.setSender(message.getSender());
recvInfo.setServiceName(appName);
recvInfo.setSendResult(message.getSendResult());
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;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.bx.imclient.listener.MessageListenerMulticaster;
import com.bx.imcommon.contant.IMRedisKey;
import com.bx.imcommon.enums.IMListenerType;
import com.bx.imcommon.model.IMSendResult;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@ -13,17 +16,20 @@ import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
@Component
@AllArgsConstructor
@RequiredArgsConstructor
public class GroupMessageResultResultTask extends AbstractMessageResultTask {
@Resource(name = "IMRedisTemplate")
private RedisTemplate<String,Object> redisTemplate;
@Value("${spring.application.name}")
private String appName;
private final MessageListenerMulticaster listenerMulticaster;
@Override
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);
if(jsonObject != null) {
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;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.bx.imclient.listener.MessageListenerMulticaster;
import com.bx.imcommon.contant.IMRedisKey;
import com.bx.imcommon.enums.IMListenerType;
import com.bx.imcommon.model.IMSendResult;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@ -15,18 +18,20 @@ import java.util.concurrent.TimeUnit;
@Slf4j
@Component
@AllArgsConstructor
@RequiredArgsConstructor
public class PrivateMessageResultResultTask extends AbstractMessageResultTask {
@Resource(name = "IMRedisTemplate")
private RedisTemplate<String,Object> redisTemplate;
@Value("${spring.application.name}")
private String appName;
private final MessageListenerMulticaster listenerMulticaster;
@Override
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);
if(jsonObject != null) {
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 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<>();
sendMessage.setSender(new IMUserInfo(session.getUserId(), session.getTerminal()));
sendMessage.setRecvIds(userIds);
sendMessage.setSendResult(false);
sendMessage.setData(msgInfo);
imClient.sendGroupMessage(sendMessage);
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
#配置项目的数据源
spring:
application:
name: im-platform
mvc:
pathmatch:
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;
import cn.hutool.core.util.StrUtil;
import com.bx.imcommon.contant.IMRedisKey;
import com.bx.imcommon.enums.IMCmdType;
import com.bx.imcommon.enums.IMSendCode;
@ -64,7 +65,7 @@ public class GroupMessageProcessor extends AbstractMessageProcessor<IMRecvInfo>
result.setCode(sendCode.code());
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);
}
}

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

@ -1,5 +1,6 @@
package com.bx.imserver.netty.processor;
import cn.hutool.core.util.StrUtil;
import com.bx.imcommon.contant.IMRedisKey;
import com.bx.imcommon.enums.IMCmdType;
import com.bx.imcommon.enums.IMSendCode;
@ -57,7 +58,7 @@ public class PrivateMessageProcessor extends AbstractMessageProcessor<IMRecvInfo
result.setCode(sendCode.code());
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);
}
}

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

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

Loading…
Cancel
Save