|
|
@@ -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 { |
|
|
|