|
@@ -3,17 +3,16 @@ package cn.org.bjca.trust.java.imserver.im;
|
|
|
|
|
|
import cn.org.bjca.trust.java.imserver.common.SpringUtilsAuTo;
|
|
|
import cn.org.bjca.trust.java.imserver.common.json.GsonImplHelp;
|
|
|
+import cn.org.bjca.trust.java.imserver.entitys.Conversation;
|
|
|
import cn.org.bjca.trust.java.imserver.entitys.GroupEntity;
|
|
|
+import cn.org.bjca.trust.java.imserver.entitys.UserInfo;
|
|
|
import cn.org.bjca.trust.java.imserver.enums.PacketType;
|
|
|
import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage;
|
|
|
import cn.org.bjca.trust.java.imserver.im.msg.ConnectMessage;
|
|
|
import cn.org.bjca.trust.java.imserver.im.msg.ConnectedMessage;
|
|
|
import cn.org.bjca.trust.java.imserver.im.msg.msg.SZYXMessage;
|
|
|
import cn.org.bjca.trust.java.imserver.im.msg.msg.SendAckMessage;
|
|
|
-import cn.org.bjca.trust.java.imserver.repository.ConnectRepository;
|
|
|
-import cn.org.bjca.trust.java.imserver.repository.GroupRepository;
|
|
|
-import cn.org.bjca.trust.java.imserver.repository.MessageRepository;
|
|
|
-import cn.org.bjca.trust.java.imserver.repository.UserRepository;
|
|
|
+import cn.org.bjca.trust.java.imserver.repository.*;
|
|
|
import cn.org.bjca.trust.java.imserver.request.RequestManager;
|
|
|
import org.eclipse.paho.client.mqttv3.*;
|
|
|
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
|
|
@@ -24,6 +23,7 @@ public class ImManager {
|
|
|
|
|
|
private final UserRepository userRepository = SpringUtilsAuTo.getBean(UserRepository.class);
|
|
|
private final MessageRepository messageRepository = SpringUtilsAuTo.getBean(MessageRepository.class);
|
|
|
+ private final ConversationRepository conversationRepository = SpringUtilsAuTo.getBean(ConversationRepository.class);
|
|
|
private final GroupRepository groupRepository = SpringUtilsAuTo.getBean(GroupRepository.class);
|
|
|
private final ConnectRepository connectRepository = SpringUtilsAuTo.getBean(ConnectRepository.class);
|
|
|
|
|
@@ -80,34 +80,21 @@ public class ImManager {
|
|
|
SZYXMessage szyxMessage = GsonImplHelp.get().toObject(msg, SZYXMessage.class);
|
|
|
szyxMessage.setStatus(0);
|
|
|
szyxMessage.setFromClientId(szyxMessage.getFromClient().getUserId());
|
|
|
- try {
|
|
|
- messageRepository.save(szyxMessage.copy());
|
|
|
- } catch (Exception e) {
|
|
|
- System.out.println("--------------" + e.getMessage());
|
|
|
- }
|
|
|
+ saveConversation(szyxMessage);
|
|
|
|
|
|
SZYXMessage message1 = szyxMessage.copy();
|
|
|
message1.setArrive(true);
|
|
|
message1.setStatus(1);
|
|
|
if (szyxMessage.isGroup()) {
|
|
|
for (GroupEntity groupEntity : groupRepository.findAllByAppIdAndGroupIdAndUserIdNot(message1.getAppId(), message1.getGroupID(), message1.getFromClientId())) {
|
|
|
-
|
|
|
SZYXMessage message2 = message1.copy();
|
|
|
message2.setUserName(groupEntity.getUserId());
|
|
|
- try {
|
|
|
- messageRepository.save(message2);
|
|
|
- } catch (Exception e) {
|
|
|
- System.out.println("--------------" + e.getMessage());
|
|
|
- }
|
|
|
+ saveConversation(message2);
|
|
|
sendPacketMessage(szyxMessage.getPacketType(), message2);
|
|
|
}
|
|
|
} else {
|
|
|
message1.setUserName(message1.getToClientId());
|
|
|
- try {
|
|
|
- messageRepository.save(message1);
|
|
|
- } catch (Exception e) {
|
|
|
- System.out.println("--------------" + e.getMessage());
|
|
|
- }
|
|
|
+ saveConversation(message1);
|
|
|
sendPacketMessage(szyxMessage.getPacketType(), message1);
|
|
|
}
|
|
|
// TODO: 这里应该有计时器,判断转发消息是否送达,如果没送达则ack返回失败状态
|
|
@@ -131,6 +118,30 @@ public class ImManager {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private void saveConversation(SZYXMessage szyxMessage) {
|
|
|
+ try {
|
|
|
+ Conversation conversation = new Conversation();
|
|
|
+ conversation.setGroup(szyxMessage.isGroup());
|
|
|
+ conversation.setSender(!szyxMessage.isArrive());
|
|
|
+ conversation.setMessage(szyxMessage);
|
|
|
+ if (szyxMessage.isGroup()) {
|
|
|
+ conversation.setGroupEntity(groupRepository.findFirstByAppIdAndGroupId(szyxMessage.getAppId(), szyxMessage.getGroupID()));
|
|
|
+ } else {
|
|
|
+ UserInfo userInfo;
|
|
|
+ if (szyxMessage.isArrive()) {
|
|
|
+ userInfo = userRepository.findFirstByUserIdAndOsTypeAndAppId(szyxMessage.getFromClientId(), szyxMessage.getOsType(), szyxMessage.getAppId());
|
|
|
+ } else {
|
|
|
+ userInfo = userRepository.findFirstByUserIdAndOsTypeAndAppId(szyxMessage.getToClientId(), szyxMessage.getOsType(), szyxMessage.getAppId());
|
|
|
+ }
|
|
|
+ conversation.setUserInfo(userInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ conversationRepository.save(conversation);
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("--------------" + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void connect() {
|
|
|
new Thread(() -> {
|
|
|
try {
|