diff --git a/README.md b/README.md
index 91c3c15..605b18c 100644
--- a/README.md
+++ b/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
com.bx
im-client
- 1.1.0
+ 2.0.0
```
内容使用了redis进行通信,所以要配置redis地址:
@@ -104,20 +110,16 @@ public class IMClient {
/**
* 发送私聊消息
*
- * @param recvId 接收用户id
- * @param messageInfo 消息体,将转成json发送到客户端
+ * @param message 私有消息
*/
- void sendPrivateMessage(Long recvId, PrivateMessageInfo... messageInfo);
-
+ public void sendPrivateMessage(IMPrivateMessage message);
/**
- * 发送群聊消息
+ * 发送群聊消息(发送结果通过MessageListener接收)
*
- * @param recvIds 群聊用户id列表
- * @param messageInfo 消息体,将转成json发送到客户端
+ * @param message 群聊消息
*/
- void sendGroupMessage(List recvIds, GroupMessageInfo... messageInfo);
-
+ public void sendGroupMessage(IMGroupMessage 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 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 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) => {
群聊列表:

+小程序:
+
+
+
#### QQ交流群

-有任何问题,欢迎star后加群交流~
+欢迎进群与小伙们一起交流,加群前记得要先star哦,加群时请备注您的gitee账号
#### 点下star吧
-喜欢的朋友麻烦点个star,鼓励一下作者吧!
+如果项目对您有帮助,帮忙点亮star,支持一下作者吧!
diff --git a/im-client/pom.xml b/im-client/pom.xml
index 9ef288f..320a3cb 100644
--- a/im-client/pom.xml
+++ b/im-client/pom.xml
@@ -5,7 +5,7 @@
box-im
com.bx
- 1.1.0
+ 2.0.0
4.0.0
@@ -15,7 +15,7 @@
com.bx
im-commom
- 1.1.0
+ 2.0.0
diff --git a/im-client/src/main/java/com/bx/imclient/IMClient.java b/im-client/src/main/java/com/bx/imclient/IMClient.java
index d47b082..52e1e16 100644
--- a/im-client/src/main/java/com/bx/imclient/IMClient.java
+++ b/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 void sendPrivateMessage(IMPrivateMessage message){
imSender.sendPrivateMessage(message);
}
@@ -37,7 +37,7 @@ public class IMClient {
*
* @param message 群聊消息
*/
- public void sendGroupMessage(IMGroupMessage> message){
+ public void sendGroupMessage(IMGroupMessage message){
imSender.sendGroupMessage(message);
}
diff --git a/im-client/src/main/java/com/bx/imclient/sender/IMSender.java b/im-client/src/main/java/com/bx/imclient/sender/IMSender.java
index 035f936..eab412f 100644
--- a/im-client/src/main/java/com/bx/imclient/sender/IMSender.java
+++ b/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 void sendPrivateMessage(IMPrivateMessage 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 void sendGroupMessage(IMGroupMessage message) {
// 根据群聊每个成员所连的IM-server,进行分组
List offLineUsers = Collections.synchronizedList(new LinkedList<>());
// 格式:map<服务器id,list<接收方>>
diff --git a/im-commom/pom.xml b/im-commom/pom.xml
index d89f74e..23c997e 100644
--- a/im-commom/pom.xml
+++ b/im-commom/pom.xml
@@ -5,7 +5,7 @@
box-im
com.bx
- 1.1.0
+ 2.0.0
4.0.0
im-commom
diff --git a/im-platform/pom.xml b/im-platform/pom.xml
index 33c9446..c5ebbbf 100644
--- a/im-platform/pom.xml
+++ b/im-platform/pom.xml
@@ -5,7 +5,7 @@
box-im
com.bx
- 1.1.0
+ 2.0.0
4.0.0
@@ -16,7 +16,7 @@
com.bx
im-client
- 1.1.0
+ 2.0.0
org.springframework.boot
diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java
index 9fbbf6e..16b4368 100644
--- a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java
+++ b/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 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();
}
diff --git a/im-server/pom.xml b/im-server/pom.xml
index 18c3adf..f799b0c 100644
--- a/im-server/pom.xml
+++ b/im-server/pom.xml
@@ -5,7 +5,7 @@
box-im
com.bx
- 1.1.0
+ 2.0.0
4.0.0
@@ -16,7 +16,7 @@
com.bx
im-commom
- 1.1.0
+ 2.0.0
org.springframework.boot
diff --git a/pom.xml b/pom.xml
index 945d351..e369a1e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
box-im
com.bx
pom
- 1.1.0
+ 2.0.0
im-platform
diff --git a/截图/mp-好友列表.jpg b/截图/mp-好友列表.jpg
new file mode 100644
index 0000000..4a678ab
Binary files /dev/null and b/截图/mp-好友列表.jpg differ
diff --git a/截图/mp-私聊.jpg b/截图/mp-私聊.jpg
new file mode 100644
index 0000000..ace9475
Binary files /dev/null and b/截图/mp-私聊.jpg differ
diff --git a/截图/mp-群聊.jpg b/截图/mp-群聊.jpg
new file mode 100644
index 0000000..9cf1bf4
Binary files /dev/null and b/截图/mp-群聊.jpg differ
diff --git a/截图/mp-群聊信息.jpg b/截图/mp-群聊信息.jpg
new file mode 100644
index 0000000..89d65f2
Binary files /dev/null and b/截图/mp-群聊信息.jpg differ
diff --git a/打包/一键打包.bat b/打包/一键打包.bat
deleted file mode 100644
index 613756c..0000000
--- a/打包/一键打包.bat
+++ /dev/null
@@ -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
-