Синхронизация сообщений для офлайн пользователей в группах
This commit is contained in:
@@ -7,6 +7,7 @@ import im.rosetta.client.ClientManager;
|
||||
import im.rosetta.client.tags.ECIAuthentificate;
|
||||
import im.rosetta.database.repository.BufferRepository;
|
||||
import im.rosetta.database.repository.GroupRepository;
|
||||
import im.rosetta.packet.Packet11Typeing;
|
||||
import im.rosetta.packet.base.PacketBaseDialog;
|
||||
import im.rosetta.service.services.BufferService;
|
||||
|
||||
@@ -19,7 +20,7 @@ import io.orprotocol.packet.PacketManager;
|
||||
* Такой диспетчер нужен для того, чтобы не загромождать логику обработчиков сообщений, а так же для того, чтобы
|
||||
* централизовать логику отправки сообщений и сохранения их в буфер
|
||||
* Например, при отправке группового сообщения, диспетчер сам достает участников группы и
|
||||
* отправляет сообщение каждому участнику, а так же сохраняет сообщение в буфер для каждого участника, который офлайн
|
||||
* отправляет сообщение каждому участнику
|
||||
*/
|
||||
public class MessageDispatcher {
|
||||
|
||||
@@ -38,6 +39,7 @@ public class MessageDispatcher {
|
||||
* @param packet пакет с групповым сообщением
|
||||
*/
|
||||
public void sendGroup(PacketBaseDialog packet, Client client, ECIAuthentificate eciAuthentificate) throws ProtocolException {
|
||||
String fromPublicKey = packet.getFromPublicKey();
|
||||
String toPublicKey = packet.getToPublicKey();
|
||||
List<String> groupMembersPublicKeys = this.groupRepository.findGroupMembers(toPublicKey.replace("#group:", ""));
|
||||
if(groupMembersPublicKeys.isEmpty()){
|
||||
@@ -67,7 +69,18 @@ public class MessageDispatcher {
|
||||
}
|
||||
this.clientManager.sendPacketToAuthorizedPK(groupMembersPublicKeys, packet);
|
||||
|
||||
//TODO: Сохранить сообщение в буфер для группы, чтобы группы тоже синхронизировались
|
||||
if(packet instanceof Packet11Typeing){
|
||||
/**
|
||||
* Если это пакет печати его не обязательно кэшировать, так как он нужен только
|
||||
* для отображения статуса печати в реальном времени
|
||||
*/
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Кладем пакет в буфер для будущей синхронизации и на случай если кто-то из участников оффлайн,
|
||||
* в toPublicKey при отправке в группу у нас находится #group:groupId
|
||||
*/
|
||||
this.bufferService.pushPacketToBuffer(fromPublicKey, toPublicKey.replace("#group:", ""), packet);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user