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) => { 群聊列表: ![输入图片说明](%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,支持一下作者吧! 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 -