xsx 2 lat temu
rodzic
commit
fbe3363bbc

+ 50 - 39
README.md

@@ -8,7 +8,7 @@
 
 
 #### 近期更新
-即将发布2.0版本,本次更新主要是加入了uniapp版本,支持移动端和web端同时在线
+发布2.0版本,本次更新主要是加入了uniapp版本,支持移动端和web端同时在线
 
 感兴趣的小伙伴,可在下方扫码抢先体验微信小程序
 
@@ -65,18 +65,24 @@ java -jar ./im-platform/target/im-platform.jar
 java -jar ./im-server/target/im-server.jar
 ```
 
-3.启动前端ui
+3.启动前端web
 ```
 cd im-ui
 npm install
 npm run serve
 ```
+访问 http://localhost:8080
+
+
+4.启动uniapp-h5
+将im-uniapp目录导入HBuilder X,点击菜单"运行"->"开发环境-h5"
+访问 http://localhost:5173
+
 
-4.访问localhost:8080
 #### 快速接入
 消息推送的请求代码已经封装在im-client包中,对于需要接入im-server的小伙伴,可以按照下面的教程快速的将IM功能集成到自己的项目中。
 
-注意服务器端和网页端都需要接入,服务器端发送消息,网页端接收消息。
+注意服务器端和前端都需要接入,服务器端发送消息,前端接收消息。
 
 4.1 服务器端接入
 
@@ -85,7 +91,7 @@ npm run serve
 <dependency>
     <groupId>com.bx</groupId>
     <artifactId>im-client</artifactId>
-    <version>1.1.0</version>
+    <version>2.0.0</version>
 </dependency>
 ```
 内容使用了redis进行通信,所以要配置redis地址:
@@ -104,20 +110,16 @@ public class IMClient {
     /**
      * 发送私聊消息
      *
-     * @param recvId 接收用户id
-     * @param messageInfo 消息体,将转成json发送到客户端
+     * @param message 私有消息
      */
-    void sendPrivateMessage(Long recvId, PrivateMessageInfo... messageInfo);
-     
+    public<T> void sendPrivateMessage(IMPrivateMessage<T> message);
 
     /**
-     * 发送群聊消息
+     * 发送群聊消息(发送结果通过MessageListener接收)
      *
-     * @param recvIds 群聊用户id列表
-     * @param messageInfo 消息体,将转成json发送到客户端
+     * @param message 群聊消息
      */
-    void sendGroupMessage(List<Long> recvIds, GroupMessageInfo... messageInfo);
-      
+    public<T> void sendGroupMessage(IMGroupMessage<T> message);    
 }
 ```
 
@@ -127,38 +129,43 @@ public class IMClient {
  private IMClient imClient;
 
  public void sendMessage(){
-    PrivateMessageInfo messageInfo = new PrivateMessageInfo();
-    Long recvId = 1L;
-    messageInfo.setId(123L);
-    messageInfo.setContent("你好呀");
-    messageInfo.setType(MessageType.TEXT.getCode());
-    messageInfo.setSendId(userId);
-    messageInfo.setRecvId(recvId);
-    messageInfo.setSendTime(new Date());
-    imClient.sendPrivateMessage(recvId,messageInfo);
+        IMPrivateMessage<PrivateMessageVO> sendMessage = new IMPrivateMessage<>();
+        // 发送方的id和终端类型
+        sendMessage.setSender(new IMUserInfo(1L, IMTerminalType.APP.code()));
+        // 对方的id
+        sendMessage.setRecvId(2L);
+        // 推送给对方所有终端
+        sendMessage.setRecvTerminals(IMTerminalType.codes());
+        // 同时推送给自己的其他类型终端
+        sendMessage.setSendToSelf(true);
+        // 需要回推发送结果,将在IMListener接收发送结果
+        sendMessage.setSendResult(true);
+        // 推送的内容
+        sendMessage.setData(msgInfo);
+        // 推送消息
+        imClient.sendPrivateMessage(sendMessage);
 }
 
 ```
-
-如果需要对消息发送的结果进行监听的话,实现MessageListener,并加上@IMListener即可
+监听发送结果:
+1.编写消息监听类,实现MessageListener,并加上@IMListener
+2.发送消息时指定sendResult为true
 ```
 @Slf4j
 @IMListener(type = IMListenerType.ALL)
 public class PrivateMessageListener implements MessageListener {
     
     @Override
-    public void process(SendResult result){
-        PrivateMessageInfo messageInfo = (PrivateMessageInfo) result.getMessageInfo();
-        if(result.getStatus().equals(IMSendStatus.SUCCESS)){
-            // 消息发送成功
-            log.info("消息已读,消息id:{},发送者:{},接收者:{}",messageInfo.getId(),messageInfo.getSendId(),messageInfo.getRecvId());
+    public void process(IMSendResult<PrivateMessageVO> result){
+        PrivateMessageVO messageInfo = result.getData();
+        if(result.getCode().equals(IMSendCode.SUCCESS.code())){
+            log.info("消息发送成功,消息id:{},发送者:{},接收者:{},终端:{}",messageInfo.getId(),result.getSender().getId(),result.getReceiver().getId(),result.getReceiver().getTerminal());
         }
     }
-
 }
 ```
 
-4.2 网页端接入
+4.2 端接入
 首先将im-ui/src/api/wssocket.js拷贝到自己的项目。
 
 接入代码如下:
@@ -167,23 +174,23 @@ import * as wsApi from './api/wssocket';
 
 let wsUrl = 'ws://localhost:8878/im'
 let userId = 1;
-wsApi.createWebSocket(wsUrl , userId);
+let token = "您的token";
+wsApi.createWebSocket(wsUrl , userId,token);
 wsApi.onopen(() => {
     // 连接打开
     console.log("连接成功");
 });
-wsApi.onmessage((cmd,messageInfo) => {
+wsApi.onmessage((cmd,msgInfo) => {
     if (cmd == 2) {
     	// 异地登录,强制下线
     	console.log("您已在其他地方登陆,将被强制下线");
     } else if (cmd == 3) {
     	// 私聊消息
-    	console.log(messageInfo);
+    	console.log(msgInfo);
     } else if (cmd == 4) {
     	// 群聊消息
-    	console.log(messageInfo);
+    	console.log(msgInfo);
     }
-
 })
 ```
 
@@ -207,14 +214,18 @@ wsApi.onmessage((cmd,messageInfo) => {
 群聊列表:
 ![输入图片说明](%E6%88%AA%E5%9B%BE/%E7%BE%A4%E8%81%8A%E5%88%97%E8%A1%A8.jpg)
 
+小程序:
+![mp-群聊信息.jpg](%BD%D8%CD%BC%2Fmp-%C8%BA%C1%C4%D0%C5%CF%A2.jpg)
+
+
 
 #### QQ交流群
 
 ![输入图片说明](%E6%88%AA%E5%9B%BE/%E4%BA%A4%E6%B5%81%E7%BE%A4.png)
 
-有任何问题,欢迎star后加群交流~
+欢迎进群与小伙们一起交流,加群前记得要先star哦,加群时请备注您的gitee账号
 
 
 #### 点下star吧
-喜欢的朋友麻烦点个star,鼓励一下作者吧!
+如果项目对您有帮助,帮忙点亮star,支持一下作者吧!
 

+ 2 - 2
im-client/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>box-im</artifactId>
         <groupId>com.bx</groupId>
-        <version>1.1.0</version>
+        <version>2.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -15,7 +15,7 @@
         <dependency>
             <groupId>com.bx</groupId>
             <artifactId>im-commom</artifactId>
-            <version>1.1.0</version>
+            <version>2.0.0</version>
         </dependency>
         <!-- 引入redis -->
         <dependency>

+ 2 - 2
im-client/src/main/java/com/bx/imclient/IMClient.java

@@ -28,7 +28,7 @@ public class IMClient {
      *
      * @param message 私有消息
      */
-    public void sendPrivateMessage(IMPrivateMessage<?> message){
+    public<T> void sendPrivateMessage(IMPrivateMessage<T> message){
         imSender.sendPrivateMessage(message);
     }
 
@@ -37,7 +37,7 @@ public class IMClient {
      *
      * @param message 群聊消息
      */
-    public void sendGroupMessage(IMGroupMessage<?> message){
+    public<T> void sendGroupMessage(IMGroupMessage<T> message){
         imSender.sendGroupMessage(message);
     }
 

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

@@ -28,7 +28,7 @@ public class IMSender {
     @Autowired
     private MessageListenerMulticaster listenerMulticaster;
 
-    public void sendPrivateMessage(IMPrivateMessage<?> message) {
+    public<T> void sendPrivateMessage(IMPrivateMessage<T> message) {
         for (Integer terminal : message.getRecvTerminals()) {
             // 获取对方连接的channelId
             String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID, message.getRecvId().toString(), terminal.toString());
@@ -79,7 +79,7 @@ public class IMSender {
 
     }
 
-    public void sendGroupMessage(IMGroupMessage<?> message) {
+    public<T> void sendGroupMessage(IMGroupMessage<T> message) {
         // 根据群聊每个成员所连的IM-server,进行分组
         List<IMUserInfo> offLineUsers = Collections.synchronizedList(new LinkedList<>());
         // 格式:map<服务器id,list<接收方>>

+ 1 - 1
im-commom/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>box-im</artifactId>
         <groupId>com.bx</groupId>
-        <version>1.1.0</version>
+        <version>2.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>im-commom</artifactId>

+ 2 - 2
im-platform/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>box-im</artifactId>
         <groupId>com.bx</groupId>
-        <version>1.1.0</version>
+        <version>2.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -16,7 +16,7 @@
         <dependency>
             <groupId>com.bx</groupId>
             <artifactId>im-client</artifactId>
-            <version>1.1.0</version>
+            <version>2.0.0</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 16 - 2
im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.bx.imclient.IMClient;
 import com.bx.imcommon.contant.IMConstant;
+import com.bx.imcommon.enums.IMTerminalType;
 import com.bx.imcommon.model.IMPrivateMessage;
 import com.bx.imcommon.model.IMUserInfo;
 import com.bx.implatform.vo.PrivateMessageVO;
@@ -60,12 +61,25 @@ public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper,
         this.save(msg);
         // 推送消息
         PrivateMessageVO msgInfo = BeanUtils.copyProperties(msg, PrivateMessageVO.class);
+
+
+
         IMPrivateMessage<PrivateMessageVO> sendMessage = new IMPrivateMessage<>();
-        sendMessage.setSender(new IMUserInfo(session.getUserId(),session.getTerminal()));
-        sendMessage.setRecvId(msgInfo.getRecvId());
+        // 发送方的id和终端类型
+        sendMessage.setSender(new IMUserInfo(1L, IMTerminalType.APP.code()));
+        // 对方的id
+        sendMessage.setRecvId(2L);
+        // 推送给对方所有终端
+        sendMessage.setRecvTerminals(IMTerminalType.codes());
+        // 同时推送给自己的其他类型终端
         sendMessage.setSendToSelf(true);
+        // 需要回推发送结果,将在IMListener接收发送结果
+        sendMessage.setSendResult(true);
+        // 推送的消息体
         sendMessage.setData(msgInfo);
+        // 推送消息
         imClient.sendPrivateMessage(sendMessage);
+
         log.info("发送私聊消息,发送id:{},接收id:{},内容:{}", session.getUserId(), dto.getRecvId(), dto.getContent());
         return msg.getId();
     }

+ 2 - 2
im-server/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>box-im</artifactId>
         <groupId>com.bx</groupId>
-        <version>1.1.0</version>
+        <version>2.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -16,7 +16,7 @@
         <dependency>
             <groupId>com.bx</groupId>
             <artifactId>im-commom</artifactId>
-            <version>1.1.0</version>
+            <version>2.0.0</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 1 - 1
pom.xml

@@ -7,7 +7,7 @@
     <artifactId>box-im</artifactId>
     <groupId>com.bx</groupId>
     <packaging>pom</packaging>
-    <version>1.1.0</version>
+    <version>2.0.0</version>
 
     <modules>
         <module>im-platform</module>

BIN
截图/mp-好友列表.jpg


BIN
截图/mp-私聊.jpg


BIN
截图/mp-群聊.jpg


BIN
截图/mp-群聊信息.jpg


+ 0 - 21
打包/一键打包.bat

@@ -1,21 +0,0 @@
-rem 删除旧文件
-del /f /s /q  ".\im-platform.jar"
-del /f /s /q  ".\im-server.jar"
-del /f /s /q  ".\im-ui.zip"
-rd  /s /q  ".\im-ui"
-
-rem 编译java项目
-call mvn clean package -f ../pom.xml
-
-rem 拷贝jar包
-copy  "..\im-platform\target\im-platform.jar"   ".\"
-copy  "..\im-server\target\im-server.jar"   ".\"
-
-rem 打包前端资源
-call npm run build --prefix  ..\im-ui\
-md im-ui
-xcopy  "..\im-ui\dist"   ".\im-ui" /e /y 
-
-echo  打包完成..........
-pause
-