Переделаны все Executors под новый протокол, переделаны все слушатели событий под новый протокол

This commit is contained in:
2026-04-19 01:00:07 +02:00
parent 33582e2730
commit 00ca218c06
26 changed files with 278 additions and 206 deletions

View File

@@ -21,8 +21,8 @@ import im.rosetta.executors.Executor25Sync;
import im.rosetta.executors.Executor26SignalPeer;
import im.rosetta.executors.Executor27WebRTC;
import im.rosetta.executors.Executor28IceServers;
import im.rosetta.executors.Executor3Search;
import im.rosetta.executors.Executor4OnlineState;
import im.rosetta.executors.ExecutorSearch;
import im.rosetta.executors.ExecutorOnlineState;
import im.rosetta.executors.Executor6Message;
import im.rosetta.executors.Executor7Read;
import im.rosetta.listeners.DeviceListListener;
@@ -158,8 +158,8 @@ public class Boot {
private void registerAllExecutors() {
this.packetManager.registerExecutor(0, new ExecutorHandshake(this.eventManager, this.clientManager, this.packetManager));
this.packetManager.registerExecutor(1, new ExecutorUserInfo());
this.packetManager.registerExecutor(3, new Executor3Search(this.clientManager));
this.packetManager.registerExecutor(4, new Executor4OnlineState(this.onlineManager, this.clientManager));
this.packetManager.registerExecutor(3, new ExecutorSearch(this.clientManager));
this.packetManager.registerExecutor(4, new ExecutorOnlineState(this.onlineManager, this.clientManager));
this.packetManager.registerExecutor(6, new Executor6Message(this.clientManager, this.packetManager));
this.packetManager.registerExecutor(7, new Executor7Read(this.clientManager, this.packetManager));
this.packetManager.registerExecutor(10, new Executor10RequestUpdate());

View File

@@ -1,7 +1,7 @@
package im.rosetta.database.entity;
import im.rosetta.database.CreateUpdateEntity;
import im.rosetta.packet.runtime.TokenType;
import im.rosetta.network.enums.TokenType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;

View File

@@ -1,28 +0,0 @@
package im.rosetta.executors;
import java.util.ArrayList;
import im.rosetta.packet.Packet28IceServers;
import im.rosetta.service.services.ForwardUnitService;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor28IceServers extends PacketExecutor<Packet28IceServers> {
private ForwardUnitService fus;
public Executor28IceServers(ForwardUnitService fus) {
this.fus = fus;
}
@Override
public void onPacketReceived(Packet28IceServers packet, Client client) throws Exception, ProtocolException {
/**
* Берем TURN сервера и отправляем их клиенту
*/
packet.setIceServers(new ArrayList<>(this.fus.getTurnServers()));
client.send(packet);
}
}

View File

@@ -11,10 +11,10 @@ import im.rosetta.database.repository.BufferRepository;
import im.rosetta.database.repository.DeviceRepository;
import im.rosetta.event.EventManager;
import im.rosetta.event.events.handshake.HandshakeCompletedEvent;
import im.rosetta.packet.Packet0Handshake;
import im.rosetta.packet.Packet24DeviceResolve;
import im.rosetta.packet.runtime.DeviceSolution;
import im.rosetta.packet.runtime.HandshakeStage;
import im.rosetta.network.enums.DeviceSolution;
import im.rosetta.network.enums.HandshakeStage;
import im.rosetta.network.packet.PacketDeviceResolve;
import im.rosetta.network.packet.PacketHandshake;
import im.rosetta.service.dispatch.DeviceDispatcher;
import im.rosetta.service.services.BufferService;
import io.orprotocol.ProtocolException;
@@ -22,7 +22,7 @@ import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
import io.orprotocol.packet.PacketManager;
public class Executor24DeviceResolve extends PacketExecutor<Packet24DeviceResolve> {
public class ExecutorDeviceResolve extends PacketExecutor<PacketDeviceResolve> {
private final ClientManager clientManager;
private final EventManager eventManager;
@@ -31,7 +31,7 @@ public class Executor24DeviceResolve extends PacketExecutor<Packet24DeviceResolv
private final BufferRepository bufferRepository = new BufferRepository();
private final BufferService bufferService;
public Executor24DeviceResolve(ClientManager clientManager, EventManager eventManager, PacketManager packetManager) {
public ExecutorDeviceResolve(ClientManager clientManager, EventManager eventManager, PacketManager packetManager) {
this.clientManager = clientManager;
this.eventManager = eventManager;
this.deviceDispatcher = new DeviceDispatcher(clientManager);
@@ -39,7 +39,7 @@ public class Executor24DeviceResolve extends PacketExecutor<Packet24DeviceResolv
}
@Override
public void onPacketReceived(Packet24DeviceResolve packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketDeviceResolve packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if (eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) {
/**
@@ -81,7 +81,7 @@ public class Executor24DeviceResolve extends PacketExecutor<Packet24DeviceResolv
* а так же исправить баг, когда при подключении первого устройства показывалось уведомление
* о новом входе.
*
* 9 ID пакета - Packet9DeviceNew
* 9 ID пакета - PacketDeviceNew
*/
this.bufferService.deletePacketsFromBuffer(eciAuthentificate.getPublicKey(), 9, 0);
@@ -95,7 +95,7 @@ public class Executor24DeviceResolve extends PacketExecutor<Packet24DeviceResolv
* Отправляем этому устройству пакет с успешным хэндшейком, чтобы клиент понял,
* что устройство разрешено и мог продолжать работу
*/
Packet0Handshake handshake = new Packet0Handshake();
PacketHandshake handshake = new PacketHandshake();
handshake.setHandshakeStage(HandshakeStage.COMPLETED);
handshake.setDeviceId("");
handshake.setDeviceName("");
@@ -131,7 +131,7 @@ public class Executor24DeviceResolve extends PacketExecutor<Packet24DeviceResolv
* а так же исправить баг, когда при подключении первого устройства показывалось уведомление
* о новом входе.
*
* 9 ID пакета - Packet9DeviceNew
* 9 ID пакета - PacketDeviceNew
*/
this.bufferService.deletePacketsFromBuffer(eciAuthentificate.getPublicKey(), 9, 0);
break;

View File

@@ -6,19 +6,18 @@ import im.rosetta.Failures;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.database.entity.Group;
import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet18GroupInfo;
import im.rosetta.packet.Packet22GroupBan;
import im.rosetta.network.packet.PacketGroupBan;
import im.rosetta.network.packet.PacketGroupInfo;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor22GroupBan extends PacketExecutor<Packet22GroupBan> {
public class ExecutorGroupBan extends PacketExecutor<PacketGroupBan> {
private final GroupRepository groupRepository = new GroupRepository();
@Override
public void onPacketReceived(Packet22GroupBan packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketGroupBan packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**
@@ -69,7 +68,7 @@ public class Executor22GroupBan extends PacketExecutor<Packet22GroupBan> {
* Отправляем клиенту новый Packet18GroupInfo, чтобы он обновил информацию о группе,
* например, удалил участника из списка участников
*/
Packet18GroupInfo groupInfoPacket = new Packet18GroupInfo();
PacketGroupInfo groupInfoPacket = new PacketGroupInfo();
groupInfoPacket.setGroupId(groupId);
groupInfoPacket.setMembersPKs(group.getMembersPublicKeys());
client.send(groupInfoPacket);

View File

@@ -3,19 +3,19 @@ package im.rosetta.executors;
import im.rosetta.Failures;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet17GroupCreate;
import im.rosetta.network.packet.PacketGroupCreate;
import im.rosetta.util.RandomUtil;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor17GroupCreate extends PacketExecutor<Packet17GroupCreate> {
public class ExecutorGroupCreate extends PacketExecutor<PacketGroupCreate> {
private final GroupRepository groupRepository = new GroupRepository();
@Override
public void onPacketReceived(Packet17GroupCreate packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketGroupCreate packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**

View File

@@ -6,18 +6,17 @@ import im.rosetta.Failures;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.database.entity.Group;
import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet18GroupInfo;
import im.rosetta.network.packet.PacketGroupInfo;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor18GroupInfo extends PacketExecutor<Packet18GroupInfo> {
public class ExecutorGroupInfo extends PacketExecutor<PacketGroupInfo> {
private final GroupRepository groupRepository = new GroupRepository();
@Override
public void onPacketReceived(Packet18GroupInfo packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketGroupInfo packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**

View File

@@ -4,19 +4,18 @@ import im.rosetta.Failures;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.database.entity.Group;
import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet19GroupInviteInfo;
import im.rosetta.packet.runtime.NetworkGroupStatus;
import im.rosetta.network.enums.GroupStatus;
import im.rosetta.network.packet.PacketGroupInviteInfo;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor19GroupInviteInfo extends PacketExecutor<Packet19GroupInviteInfo> {
public class ExecutorGroupInviteInfo extends PacketExecutor<PacketGroupInviteInfo> {
private final GroupRepository groupRepository = new GroupRepository();
@Override
public void onPacketReceived(Packet19GroupInviteInfo packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketGroupInviteInfo packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**
@@ -31,7 +30,7 @@ public class Executor19GroupInviteInfo extends PacketExecutor<Packet19GroupInvit
/**
* Группы не существует, возвращаем клиенту статус INVALID
*/
packet.setStatus(NetworkGroupStatus.INVALID);
packet.setStatus(GroupStatus.INVALID);
client.send(packet);
return;
}
@@ -39,7 +38,7 @@ public class Executor19GroupInviteInfo extends PacketExecutor<Packet19GroupInvit
/**
* Клиент забанен в группе, возвращаем клиенту статус BANNED
*/
packet.setStatus(NetworkGroupStatus.BANNED);
packet.setStatus(GroupStatus.BANNED);
client.send(packet);
return;
}
@@ -50,7 +49,7 @@ public class Executor19GroupInviteInfo extends PacketExecutor<Packet19GroupInvit
int membersCount = group.getMembersPublicKeys().size();
boolean isMember = group.getMembersPublicKeys().contains(eciAuthentificate.getPublicKey());
packet.setMembersCount(membersCount);
packet.setStatus(isMember ? NetworkGroupStatus.JOINED : NetworkGroupStatus.NOT_JOINED);
packet.setStatus(isMember ? GroupStatus.JOINED : GroupStatus.NOT_JOINED);
client.send(packet);
}

View File

@@ -5,26 +5,26 @@ import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.database.entity.Group;
import im.rosetta.database.repository.BufferRepository;
import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet20GroupJoin;
import im.rosetta.packet.runtime.NetworkGroupStatus;
import im.rosetta.network.enums.GroupStatus;
import im.rosetta.network.packet.PacketGroupJoin;
import im.rosetta.service.services.BufferService;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
import io.orprotocol.packet.PacketManager;
public class Executor20GroupJoin extends PacketExecutor<Packet20GroupJoin> {
public class ExecutorGroupJoin extends PacketExecutor<PacketGroupJoin> {
private final GroupRepository groupRepository = new GroupRepository();
private final BufferRepository bufferRepository = new BufferRepository();
private final BufferService bufferService;
public Executor20GroupJoin(PacketManager packetManager) {
public ExecutorGroupJoin(PacketManager packetManager) {
this.bufferService = new BufferService(bufferRepository, packetManager);
}
@Override
public void onPacketReceived(Packet20GroupJoin packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketGroupJoin packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**
@@ -39,7 +39,7 @@ public class Executor20GroupJoin extends PacketExecutor<Packet20GroupJoin> {
/**
* Группы не существует, возвращаем клиенту статус INVALID
*/
packet.setStatus(NetworkGroupStatus.INVALID);
packet.setStatus(GroupStatus.INVALID);
client.send(packet);
return;
}
@@ -48,7 +48,7 @@ public class Executor20GroupJoin extends PacketExecutor<Packet20GroupJoin> {
/**
* Клиент забанен в группе, возвращаем клиенту статус BANNED
*/
packet.setStatus(NetworkGroupStatus.BANNED);
packet.setStatus(GroupStatus.BANNED);
client.send(packet);
return;
}
@@ -57,14 +57,14 @@ public class Executor20GroupJoin extends PacketExecutor<Packet20GroupJoin> {
/**
* Клиент уже является участником группы, возвращаем клиенту статус JOINED
*/
packet.setStatus(NetworkGroupStatus.JOINED);
packet.setStatus(GroupStatus.JOINED);
client.send(packet);
return;
}
/**
* Все проверки пройдены, клиент может вступить в группу
*/
packet.setStatus(NetworkGroupStatus.JOINED);
packet.setStatus(GroupStatus.JOINED);
/**
* Кладем пакет в буфер для будущей синхронизации
*/

View File

@@ -4,7 +4,7 @@ import im.rosetta.Failures;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.database.entity.Group;
import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet21GroupLeave;
import im.rosetta.network.packet.PacketGroupLeave;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
@@ -16,12 +16,12 @@ import io.orprotocol.packet.PacketExecutor;
* чтобы клиентское приложение могло корректно обновить интерфейс, например, удалить группу из списка групп пользователя
* Если клиент является единственным участником группы, то при выходе группа удаляется целиком
*/
public class Executor21GroupLeave extends PacketExecutor<Packet21GroupLeave> {
public class ExecutorGroupLeave extends PacketExecutor<PacketGroupLeave> {
private final GroupRepository groupRepository = new GroupRepository();
@Override
public void onPacketReceived(Packet21GroupLeave packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketGroupLeave packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**

View File

@@ -0,0 +1,41 @@
package im.rosetta.executors;
import java.util.ArrayList;
import java.util.List;
import im.rosetta.network.packet.PacketIceServers;
import im.rosetta.service.services.ForwardUnitService;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class ExecutorIceServers extends PacketExecutor<PacketIceServers> {
private ForwardUnitService fus;
public ExecutorIceServers(ForwardUnitService fus) {
this.fus = fus;
}
@Override
public void onPacketReceived(PacketIceServers packet, Client client) throws Exception, ProtocolException {
/**
* Берем TURN сервера и отправляем их клиенту
* Такая сложная конвертация нужна потому что у нас есть тип RTCIceServer из g365sfu, который
* не совместим с типом RTCIceServer, который используется в пакете, хотя
* поля у них одинаковые нужна такая трансляция
*/
List<im.rosetta.network.types.RTCIceServer> convertedIceServers = new ArrayList<>();
for (io.g365sfu.webrtc.RTCIceServer server : this.fus.getTurnServers()) {
im.rosetta.network.types.RTCIceServer newServer = new im.rosetta.network.types.RTCIceServer();
newServer.setUrl(server.getUrl());
newServer.setUsername(server.getUsername());
newServer.setCredential(server.getCredential());
newServer.setTransport(server.getTransport());
convertedIceServers.add(newServer);
}
packet.setIceServers(convertedIceServers);
client.send(packet);
}
}

View File

@@ -5,9 +5,9 @@ import java.util.List;
import im.rosetta.Failures;
import im.rosetta.client.ClientManager;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.packet.Packet6Message;
import im.rosetta.packet.Packet8Delivery;
import im.rosetta.packet.runtime.Attachment;
import im.rosetta.network.packet.PacketDelivery;
import im.rosetta.network.packet.PacketMessage;
import im.rosetta.network.types.Attachment;
import im.rosetta.service.dispatch.MessageDispatcher;
import io.orprotocol.ProtocolException;
@@ -18,16 +18,16 @@ import io.orprotocol.packet.PacketManager;
/**
* Обработчик пакета сообщений
*/
public class Executor6Message extends PacketExecutor<Packet6Message> {
public class ExecutorMessage extends PacketExecutor<PacketMessage> {
private final MessageDispatcher messageDispatcher;
public Executor6Message(ClientManager clientManager, PacketManager packetManager) {
public ExecutorMessage(ClientManager clientManager, PacketManager packetManager) {
this.messageDispatcher = new MessageDispatcher(clientManager, packetManager);
}
@Override
public void onPacketReceived(Packet6Message packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketMessage packet, Client client) throws Exception, ProtocolException {
String fromPublicKey = packet.getFromPublicKey();
String toPublicKey = packet.getToPublicKey();
String messageId = packet.getMessageId();
@@ -117,7 +117,7 @@ public class Executor6Message extends PacketExecutor<Packet6Message> {
/**
* Сообщение успешно отправлено, отправялем клиенту пакет успешной доставки
*/
Packet8Delivery deliveryPacket = new Packet8Delivery();
PacketDelivery deliveryPacket = new PacketDelivery();
deliveryPacket.setMessageId(messageId);
deliveryPacket.setToPublicKey(toPublicKey);
client.send(deliveryPacket);

View File

@@ -7,27 +7,26 @@ import im.rosetta.Failures;
import im.rosetta.client.ClientManager;
import im.rosetta.client.OnlineManager;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.packet.Packet4OnlineSubscribe;
import im.rosetta.packet.Packet5OnlineState;
import im.rosetta.packet.runtime.NetworkStatus;
import im.rosetta.packet.runtime.PKNetworkStatus;
import im.rosetta.network.enums.NetworkStatus;
import im.rosetta.network.packet.PacketOnlineState;
import im.rosetta.network.packet.PacketOnlineSubscribe;
import im.rosetta.network.types.PKNetworkStatus;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor4OnlineState extends PacketExecutor<Packet4OnlineSubscribe> {
public class ExecutorOnlineState extends PacketExecutor<PacketOnlineSubscribe> {
private final OnlineManager onlineManager;
private final ClientManager clientManager;
public Executor4OnlineState(OnlineManager onlineManager, ClientManager clientManager) {
public ExecutorOnlineState(OnlineManager onlineManager, ClientManager clientManager) {
this.onlineManager = onlineManager;
this.clientManager = clientManager;
}
@Override
public void onPacketReceived(Packet4OnlineSubscribe packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketOnlineSubscribe packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) {
/**
@@ -60,14 +59,17 @@ public class Executor4OnlineState extends PacketExecutor<Packet4OnlineSubscribe>
* Сразу же формируем и отправляем клиенту онлайн статус для указанных публичных ключей, чтобы клиент не ждал обновления статуса,
* а получил его сразу после подписки
*/
Packet5OnlineState onlineStates = new Packet5OnlineState();
List<PKNetworkStatus> onlineStatuses = new ArrayList<>();
PacketOnlineState onlineStates = new PacketOnlineState();
List<PKNetworkStatus> onlineStatusList = new ArrayList<>();
for (String targetPublicKey : publicKeys) {
boolean isOnline = this.clientManager.isClientConnected(targetPublicKey);
PKNetworkStatus networkStatus = new PKNetworkStatus(targetPublicKey, NetworkStatus.fromBoolean(isOnline));
onlineStatuses.add(networkStatus);
NetworkStatus networkStatus = this.clientManager.isClientConnected(targetPublicKey) ?
NetworkStatus.ONLINE : NetworkStatus.OFFLINE;
PKNetworkStatus pkNetworkStatus = new PKNetworkStatus();
pkNetworkStatus.setPublicKey(targetPublicKey);
pkNetworkStatus.setNetworkStatus(networkStatus);
onlineStatusList.add(pkNetworkStatus);
}
onlineStates.setPkNetworkStatuses(onlineStatuses);
onlineStates.setPkNetworkStatuses(onlineStatusList);
client.send(onlineStates);
}

View File

@@ -8,22 +8,22 @@ import im.rosetta.database.entity.Device;
import im.rosetta.database.entity.PushToken;
import im.rosetta.database.repository.DeviceRepository;
import im.rosetta.database.repository.PushTokenRepository;
import im.rosetta.packet.Packet16PushNotification;
import im.rosetta.packet.runtime.NetworkNotificationAction;
import im.rosetta.network.enums.NotificationAction;
import im.rosetta.network.packet.PacketPushNotification;
import im.rosetta.service.services.DeviceService;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor16PushNotification extends PacketExecutor<Packet16PushNotification> {
public class ExecutorPushNotification extends PacketExecutor<PacketPushNotification> {
private final DeviceRepository deviceRepository = new DeviceRepository();
private final DeviceService deviceService = new DeviceService(deviceRepository);
private final PushTokenRepository pushTokenRepository = new PushTokenRepository();
@Override
public void onPacketReceived(Packet16PushNotification packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketPushNotification packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**
@@ -50,7 +50,7 @@ public class Executor16PushNotification extends PacketExecutor<Packet16PushNotif
}
PushToken pushToken = this.pushTokenRepository.findToken(device, notificationToken);
if(packet.getAction() == NetworkNotificationAction.SUBSCRIBE && pushToken == null){
if(packet.getAction() == NotificationAction.SUBSCRIBE && pushToken == null){
/**
* Подписка на токен только если токен еще не подписан
*/
@@ -60,7 +60,7 @@ public class Executor16PushNotification extends PacketExecutor<Packet16PushNotif
token.setType(packet.getTokenType());
this.pushTokenRepository.save(token);
}
if(packet.getAction() == NetworkNotificationAction.UNSUBSCRIBE && pushToken != null){
if(packet.getAction() == NotificationAction.UNSUBSCRIBE && pushToken != null){
/**
* Отписка от токена только если токен уже подписан
*/

View File

@@ -3,7 +3,7 @@ package im.rosetta.executors;
import im.rosetta.Failures;
import im.rosetta.client.ClientManager;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.packet.Packet7Read;
import im.rosetta.network.packet.PacketRead;
import im.rosetta.service.dispatch.MessageDispatcher;
import io.orprotocol.ProtocolException;
@@ -11,16 +11,16 @@ import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
import io.orprotocol.packet.PacketManager;
public class Executor7Read extends PacketExecutor<Packet7Read> {
public class ExecutorRead extends PacketExecutor<PacketRead> {
private final MessageDispatcher messageDispatcher;
public Executor7Read(ClientManager clientManager, PacketManager packetManager) {
public ExecutorRead(ClientManager clientManager, PacketManager packetManager) {
this.messageDispatcher = new MessageDispatcher(clientManager, packetManager);
}
@Override
public void onPacketReceived(Packet7Read packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketRead packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
String fromPublicKey = packet.getFromPublicKey();
String toPublicKey = packet.getToPublicKey();

View File

@@ -5,17 +5,17 @@ import java.util.List;
import im.rosetta.Failures;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.packet.Packet15RequestTransport;
import im.rosetta.network.packet.PacketRequestTransport;
import im.rosetta.util.RandomUtil;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor15RequestTransport extends PacketExecutor<Packet15RequestTransport> {
public class ExecutorRequestTransport extends PacketExecutor<PacketRequestTransport> {
@Override
public void onPacketReceived(Packet15RequestTransport packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketRequestTransport packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**

View File

@@ -3,7 +3,7 @@ package im.rosetta.executors;
import java.util.Arrays;
import java.util.List;
import im.rosetta.packet.Packet10RequestUpdate;
import im.rosetta.network.packet.PacketRequestUpdate;
import im.rosetta.util.RandomUtil;
import io.orprotocol.ProtocolException;
@@ -15,10 +15,10 @@ import io.orprotocol.packet.PacketExecutor;
* но код продублирован специально, чтобы не размазывать
* его например в Dispatcher. Так читать удобнее
*/
public class Executor10RequestUpdate extends PacketExecutor<Packet10RequestUpdate> {
public class ExecutorRequestUpdate extends PacketExecutor<PacketRequestUpdate> {
@Override
public void onPacketReceived(Packet10RequestUpdate packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketRequestUpdate packet, Client client) throws Exception, ProtocolException {
/**
* Обратите внимание этот пакет в отличии от Packet15RequestTransport
* не требует авторизации. Это сделано на те случаи когда приложение

View File

@@ -8,27 +8,27 @@ import im.rosetta.client.ClientManager;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.database.entity.User;
import im.rosetta.database.repository.UserRepository;
import im.rosetta.packet.Packet3Search;
import im.rosetta.packet.runtime.NetworkStatus;
import im.rosetta.packet.runtime.SearchInfo;
import im.rosetta.network.enums.NetworkStatus;
import im.rosetta.network.packet.PacketSearch;
import im.rosetta.network.types.SearchInfo;
import im.rosetta.service.services.UserService;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor3Search extends PacketExecutor<Packet3Search> {
public class ExecutorSearch extends PacketExecutor<PacketSearch> {
private final UserRepository userRepository = new UserRepository();
private final UserService userService = new UserService(userRepository);
private final ClientManager clientManager;
public Executor3Search(ClientManager clientManager) {
public ExecutorSearch(ClientManager clientManager) {
this.clientManager = clientManager;
}
@Override
public void onPacketReceived(Packet3Search packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketSearch packet, Client client) throws Exception, ProtocolException {
String search = packet.getSearch();
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
@@ -48,24 +48,25 @@ public class Executor3Search extends PacketExecutor<Packet3Search> {
}
List<User> usersFindedList = userService.searchUsers(search, 7);
Packet3Search response = new Packet3Search();
PacketSearch response = new PacketSearch();
response.setSearch("");
response.setPrivateKey("");
List<SearchInfo> searchInfos = new ArrayList<>();
List<SearchInfo> searchInfoList = new ArrayList<>();
for(User user : usersFindedList){
SearchInfo searchInfo = new SearchInfo(
user.getUsername(),
user.getTitle(),
user.getPublicKey(),
user.getVerified(),
NetworkStatus.fromBoolean(this.clientManager.isClientConnected(user.getPublicKey()))
);
searchInfos.add(searchInfo);
NetworkStatus networkStatus = this.clientManager.isClientConnected(user.getPublicKey()) ?
NetworkStatus.ONLINE : NetworkStatus.OFFLINE;
SearchInfo searchInfo = new SearchInfo();
searchInfo.setNetworkStatus(networkStatus);
searchInfo.setTitle(user.getTitle());
searchInfo.setUsername(user.getUsername());
searchInfo.setVerified(user.getVerified());
searchInfo.setPublicKey(user.getPublicKey());
searchInfoList.add(searchInfo);
}
response.setSearchInfos(searchInfos);
response.setSearchInfo(searchInfoList);
client.send(response);
}

View File

@@ -10,8 +10,8 @@ import im.rosetta.calls.CallManager;
import im.rosetta.calls.CallSession;
import im.rosetta.client.ClientManager;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.packet.Packet26SignalPeer;
import im.rosetta.packet.runtime.NetworkSignalType;
import im.rosetta.network.enums.SignalType;
import im.rosetta.network.packet.PacketSignalPeer;
import im.rosetta.service.dispatch.push.PushNotifyDispatcher;
import im.rosetta.service.dispatch.runtime.PushType;
import im.rosetta.service.services.ForwardUnitService;
@@ -23,7 +23,7 @@ import io.orprotocol.packet.PacketExecutor;
/**
* Используется в Peer To Peer звонках, в групповых звонках другой сигналинг
*/
public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
public class ExecutorSignalPeer extends PacketExecutor<PacketSignalPeer> {
private ClientManager clientManager;
private ForwardUnitService fus;
@@ -33,8 +33,8 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
* все сигналы, которые не входят в этот перечень, будут доступны для
* исполнения без авторизации.
*/
private Set<NetworkSignalType> authentificatedTypes = new HashSet<>(){{
add(NetworkSignalType.CALL);
private Set<SignalType> authentificatedTypes = new HashSet<>(){{
add(SignalType.CALL);
}};
/**
@@ -43,18 +43,18 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
*/
private CallManager callManager;
public Executor26SignalPeer(ClientManager clientManager, ForwardUnitService fus, CallManager callManager) {
public ExecutorSignalPeer(ClientManager clientManager, ForwardUnitService fus, CallManager callManager) {
this.clientManager = clientManager;
this.fus = fus;
this.callManager = callManager;
}
@Override
public void onPacketReceived(Packet26SignalPeer packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketSignalPeer packet, Client client) throws Exception, ProtocolException {
String src = packet.getSrc();
String dst = packet.getDst();
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
NetworkSignalType type = packet.getSignalType();
SignalType type = packet.getSignalType();
if ((eciAuthentificate == null || !eciAuthentificate.hasAuthorized())
&& this.authentificatedTypes.contains(type)) {
/**
@@ -72,7 +72,7 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
client.disconnect(Failures.DATA_MISSMATCH);
return;
}
if(type == NetworkSignalType.CALL) {
if(type == SignalType.CALL) {
/**
* Инициируется звонок от src к dst, проверяем, что dst не занят другим звонком, если занят, то отправляем сигнал END_CALL_BECAUSE_BUSY обратно src
*/
@@ -80,8 +80,8 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
/**
* Получатель сигнала уже находится в другой комнате, значит он занят другим звонком, отправляем сигнал END_CALL_BECAUSE_BUSY обратно src
*/
Packet26SignalPeer responsePacket = new Packet26SignalPeer();
responsePacket.setSignalType(NetworkSignalType.END_CALL_BECAUSE_BUSY);
PacketSignalPeer responsePacket = new PacketSignalPeer();
responsePacket.setSignalType(SignalType.END_CALL_BECAUSE_BUSY);
client.send(responsePacket);
return;
}
@@ -116,7 +116,7 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
this.clientManager.sendPacketToAuthorizedPK(dst, packet);
return;
}
if(type == NetworkSignalType.ACCEPT){
if(type == SignalType.ACCEPT){
String callId = packet.getCallId();
String joinToken = packet.getJoinToken();
CallSession session = this.callManager.getCallSession(callId, joinToken);
@@ -145,12 +145,12 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
* Сбрасываем вызов на всех остальных устройствах пользователя, который принимает звонок,
* чтобы он не смог принять или отклонить звонок с другого устройства
*/
Packet26SignalPeer endCallOtherDevices = new Packet26SignalPeer();
endCallOtherDevices.setSignalType(NetworkSignalType.END_CALL);
PacketSignalPeer endCallOtherDevices = new PacketSignalPeer();
endCallOtherDevices.setSignalType(SignalType.END_CALL);
this.clientManager.sendPacketToAuthorizedPK(src, endCallOtherDevices, client);
return;
}
if(type == NetworkSignalType.KEY_EXCHANGE){
if(type == SignalType.KEY_EXCHANGE){
/**
* Ретранслируем ключи в рамках сессии
*/
@@ -168,7 +168,7 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
session.sendPacket(packet, client);
return;
}
if(type == NetworkSignalType.END_CALL) {
if(type == SignalType.END_CALL) {
/**
* Ретранслируем сигнал окончания звонка всем участникам сессии, кроме отправителя, и удаляем сессию
*/
@@ -203,7 +203,8 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
this.callManager.removeSession(session);
return;
}
if(type == NetworkSignalType.ACTIVE) {
if(type == SignalType.ACTIVE) {
/**
* Клиент сообщил, что прошел стадию обмена ключами и звонок активен
*/

View File

@@ -3,8 +3,8 @@ package im.rosetta.executors;
import java.util.List;
import im.rosetta.database.repository.BufferRepository;
import im.rosetta.packet.Packet25Sync;
import im.rosetta.packet.runtime.NetworkSyncStatus;
import im.rosetta.network.enums.SyncStatus;
import im.rosetta.network.packet.PacketSync;
import im.rosetta.service.services.BufferService;
import im.rosetta.service.services.runtime.PacketBuffer;
import io.orprotocol.ProtocolException;
@@ -13,17 +13,17 @@ import io.orprotocol.packet.Packet;
import io.orprotocol.packet.PacketExecutor;
import io.orprotocol.packet.PacketManager;
public class Executor25Sync extends PacketExecutor<Packet25Sync> {
public class ExecutorSync extends PacketExecutor<PacketSync> {
private final BufferRepository bufferRepository = new BufferRepository();
private final BufferService bufferService;
public Executor25Sync(PacketManager packetManager) {
public ExecutorSync(PacketManager packetManager) {
this.bufferService = new BufferService(bufferRepository, packetManager);
}
@Override
public void onPacketReceived(Packet25Sync packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketSync packet, Client client) throws Exception, ProtocolException {
/**
* Начиная с какого времени клиент желает получить синхронизацию
*/
@@ -36,7 +36,7 @@ public class Executor25Sync extends PacketExecutor<Packet25Sync> {
/**
* Нет пакетов для синхронизации, сообщаем клиенту что он синхронизирован
*/
packet.setSyncStatus(NetworkSyncStatus.NOT_NEEDED);
packet.setSyncStatus(SyncStatus.NOT_NEEDED);
client.send(packet);
return;
}
@@ -44,7 +44,7 @@ public class Executor25Sync extends PacketExecutor<Packet25Sync> {
/**
* Отправляем клиенту информацию о том, что синхронизация началась
*/
packet.setSyncStatus(NetworkSyncStatus.BATCH_START);
packet.setSyncStatus(SyncStatus.BATCH_START);
client.send(packet);
/**
@@ -58,7 +58,7 @@ public class Executor25Sync extends PacketExecutor<Packet25Sync> {
/**
* Сообщаем клиенту, что синхронизация завершена
*/
packet.setSyncStatus(NetworkSyncStatus.BATCH_END);
packet.setSyncStatus(SyncStatus.BATCH_END);
packet.setTimestamp(packetBuffer.getLastPacketTimestamp());
client.send(packet);
}

View File

@@ -3,7 +3,7 @@ package im.rosetta.executors;
import im.rosetta.Failures;
import im.rosetta.client.ClientManager;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.packet.Packet11Typeing;
import im.rosetta.network.packet.PacketTypeing;
import im.rosetta.service.dispatch.MessageDispatcher;
import io.orprotocol.ProtocolException;
@@ -11,16 +11,16 @@ import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
import io.orprotocol.packet.PacketManager;
public class Executor11Typeing extends PacketExecutor<Packet11Typeing> {
public class ExecutorTypeing extends PacketExecutor<PacketTypeing> {
private final MessageDispatcher messageDispatcher;
public Executor11Typeing(ClientManager clientManager, PacketManager packetManager) {
public ExecutorTypeing(ClientManager clientManager, PacketManager packetManager) {
this.messageDispatcher = new MessageDispatcher(clientManager, packetManager);
}
@Override
public void onPacketReceived(Packet11Typeing packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketTypeing packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
String fromPublicKey = packet.getFromPublicKey();
String toPublicKey = packet.getToPublicKey();

View File

@@ -3,23 +3,23 @@ package im.rosetta.executors;
import im.rosetta.Failures;
import im.rosetta.calls.CallManager;
import im.rosetta.calls.CallSession;
import im.rosetta.packet.Packet27WebRTC;
import im.rosetta.packet.runtime.NetworkWebRTCType;
import im.rosetta.network.enums.WebRTCType;
import im.rosetta.network.packet.PacketWebRTC;
import io.g365sfu.Room;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor27WebRTC extends PacketExecutor<Packet27WebRTC> {
public class ExecutorWebRTC extends PacketExecutor<PacketWebRTC> {
private CallManager callManager;
public Executor27WebRTC(CallManager callManager) {
public ExecutorWebRTC(CallManager callManager) {
this.callManager = callManager;
}
@Override
public void onPacketReceived(Packet27WebRTC packet, Client client) throws Exception, ProtocolException {
public void onPacketReceived(PacketWebRTC packet, Client client) throws Exception, ProtocolException {
/**
* Получаем, в какой сессии находится этот сокет
*/
@@ -53,22 +53,22 @@ public class Executor27WebRTC extends PacketExecutor<Packet27WebRTC> {
return;
}
NetworkWebRTCType type = packet.getType();
if(type == NetworkWebRTCType.OFFER) {
WebRTCType type = packet.getType();
if(type == WebRTCType.OFFER) {
/**
* Если это OFFER, то отправляем OFFER на сервер SFU,
* который отвечает за эту комнату, чтобы он транслировал его всем участникам комнаты, кроме отправителя
*/
room.sdpOffer(publicKey, packet.getSdpOrCandidate());
}
if(type == NetworkWebRTCType.ICE_CANDIDATE) {
if(type == WebRTCType.ICE_CANDIDATE) {
/**
* Если это ICE кандидат, то отправляем его на сервер SFU,
* который отвечает за эту комнату, чтобы он транслировал его всем участникам комнаты, кроме отправителя
*/
room.iceCandidate(publicKey, packet.getSdpOrCandidate());
}
if(type == NetworkWebRTCType.ANSWER) {
if(type == WebRTCType.ANSWER) {
/**
* Если это ANSWER, то отправляем его на сервер SFU,
* который отвечает за эту комнату, чтобы он транслировал его всем участникам комнаты, кроме отправителя

View File

@@ -9,10 +9,9 @@ import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.event.EventHandler;
import im.rosetta.event.Listener;
import im.rosetta.event.events.DisconnectEvent;
import im.rosetta.packet.Packet5OnlineState;
import im.rosetta.packet.runtime.NetworkStatus;
import im.rosetta.packet.runtime.PKNetworkStatus;
import im.rosetta.network.enums.NetworkStatus;
import im.rosetta.network.packet.PacketOnlineState;
import im.rosetta.network.types.PKNetworkStatus;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
@@ -59,13 +58,13 @@ public class OnlineStatusDisconnectListener implements Listener {
* Уведомляем всех подписчиков на его онлайн статус, что он отключился (ушел в оффлайн)
*/
for (Client subscriber : subscribers) {
Packet5OnlineState packet = new Packet5OnlineState();
List<PKNetworkStatus> statuses = new ArrayList<>();
statuses.add(new PKNetworkStatus(
eciAuthentificate.getPublicKey(),
NetworkStatus.OFFLINE
));
packet.setPkNetworkStatuses(statuses);
PacketOnlineState packet = new PacketOnlineState();
List<PKNetworkStatus> statusList = new ArrayList<>();
PKNetworkStatus status = new PKNetworkStatus();
status.setPublicKey(eciAuthentificate.getPublicKey());
status.setNetworkStatus(NetworkStatus.OFFLINE);
statusList.add(status);
packet.setPkNetworkStatuses(statusList);
subscriber.send(packet);
}
/**

View File

@@ -8,10 +8,9 @@ import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.event.EventHandler;
import im.rosetta.event.Listener;
import im.rosetta.event.events.handshake.HandshakeCompletedEvent;
import im.rosetta.packet.Packet5OnlineState;
import im.rosetta.packet.runtime.NetworkStatus;
import im.rosetta.packet.runtime.PKNetworkStatus;
import im.rosetta.network.enums.NetworkStatus;
import im.rosetta.network.packet.PacketOnlineState;
import im.rosetta.network.types.PKNetworkStatus;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
@@ -45,14 +44,14 @@ public class OnlineStatusHandshakeCompleteListener implements Listener {
* Уведомляем всех подписчиков на его онлайн статус, что он подключился (стал онлайн)
*/
for (Client subscriber : subscribers) {
Packet5OnlineState packet = new Packet5OnlineState();
List<PKNetworkStatus> statuses = new ArrayList<>();
statuses.add(new PKNetworkStatus(
eciAuthentificate.getPublicKey(),
NetworkStatus.ONLINE
));
packet.setPkNetworkStatuses(statuses);
subscriber.send(packet);
PacketOnlineState packet = new PacketOnlineState();
List<PKNetworkStatus> statusList = new ArrayList<>();
PKNetworkStatus status = new PKNetworkStatus();
status.setPublicKey(eciAuthentificate.getPublicKey());
status.setNetworkStatus(NetworkStatus.ONLINE);
statusList.add(status);
packet.setPkNetworkStatuses(statusList);
subscriber.send(packet);
}
}

View File

@@ -9,15 +9,17 @@ import im.rosetta.database.entity.User;
import im.rosetta.database.repository.BufferRepository;
import im.rosetta.database.repository.GroupRepository;
import im.rosetta.database.repository.UserRepository;
import im.rosetta.packet.Packet11Typeing;
import im.rosetta.packet.Packet7Read;
import im.rosetta.packet.base.PacketBaseDialog;
import im.rosetta.network.packet.PacketMessage;
import im.rosetta.network.packet.PacketRead;
import im.rosetta.network.packet.PacketTypeing;
import im.rosetta.service.dispatch.push.PushNotifyDispatcher;
import im.rosetta.service.dispatch.runtime.BaseDialog;
import im.rosetta.service.dispatch.runtime.PushType;
import im.rosetta.service.services.BufferService;
import im.rosetta.service.services.UserService;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.Packet;
import io.orprotocol.packet.PacketManager;
/**
@@ -42,13 +44,29 @@ public class MessageDispatcher {
this.bufferService = new BufferService(bufferRepository, packetManager);
}
private BaseDialog constructBase(Packet packet) {
if(
!(packet instanceof PacketMessage) &&
!(packet instanceof PacketTypeing) &&
!(packet instanceof PacketRead)
) {
return null;
}
return (BaseDialog) packet;
}
/**
* Отправляет групповое сообщение всем участникам группы, кроме отправителя
* @param packet пакет с групповым сообщением
*/
public void sendGroup(PacketBaseDialog packet, Client client, ECIAuthentificate eciAuthentificate) throws ProtocolException {
String fromPublicKey = packet.getFromPublicKey();
String toPublicKey = packet.getToPublicKey();
public void sendGroup(Packet packet, Client client, ECIAuthentificate eciAuthentificate)
throws ProtocolException, IllegalArgumentException {
BaseDialog base = this.constructBase(packet);
if(base == null){
throw new IllegalArgumentException("Packet must be a dialog packets");
}
String fromPublicKey = base.getFromPublicKey();
String toPublicKey = base.getToPublicKey();
List<String> groupMembersPublicKeys = this.groupRepository.findGroupMembers(toPublicKey.replace("#group:", ""));
if(groupMembersPublicKeys.isEmpty()){
/**
@@ -68,7 +86,7 @@ public class MessageDispatcher {
* Ретранслируем сообщение ВСЕМ авторизованным сессиям отправителя КРОМЕ текущей,
* чтобы синхронизировать отправленные сообщения
*/
if(!(packet instanceof Packet11Typeing)){
if(!(packet instanceof PacketTypeing)){
/**
* Если это пакет печати его не обязательно кэшировать, так как он нужен только
* для отображения статуса печати в реальном времени
@@ -93,13 +111,13 @@ public class MessageDispatcher {
* Отправляем сообщение всем, кто в беседе
*/
this.clientManager.sendPacketToAuthorizedPK(groupMembersPublicKeys, packet);
if(packet instanceof Packet11Typeing){
if(packet instanceof PacketTypeing){
/**
* Если это пакет печати, то не отправляем пуш уведомление, так как это может привести к спаму пушами при наборе текста
*/
return;
}
if(packet instanceof Packet7Read){
if(packet instanceof PacketRead){
/**
* Если это пакет прочтения, то отправляем тихий пуш, что диалог прочитан, отправляем тому, кто читает диалог, чтобы
* клиент мог очистить пуши для этого диалога
@@ -131,9 +149,13 @@ public class MessageDispatcher {
* чтобы доставить пользователям если они не онлайн, если указать false то этот пакет получит
* только пользователь который были в сети
*/
public void sendPeer(PacketBaseDialog packet, Client client, boolean bufferizationNeed) throws ProtocolException {
String fromPublicKey = packet.getFromPublicKey();
String toPublicKey = packet.getToPublicKey();
public void sendPeer(Packet packet, Client client, boolean bufferizationNeed) throws ProtocolException {
BaseDialog base = this.constructBase(packet);
if(base == null){
throw new IllegalArgumentException("Packet must be a dialog packets");
}
String fromPublicKey = base.getFromPublicKey();
String toPublicKey = base.getToPublicKey();
User user = this.userService.fromClient(client);
if(user == null){
/**
@@ -162,14 +184,14 @@ public class MessageDispatcher {
* Сохраняем сообщение в буфер на случай если получатель офлайн, или нам нужна будет синхронизация сообщений для получателя
*/
this.bufferService.pushPacketToBuffer(fromPublicKey, toPublicKey, packet);
if(packet instanceof Packet11Typeing){
if(packet instanceof PacketTypeing){
/**
* Если это пакет печати, то не отправляем пуш уведомление,
* так как это может привести к спаму пушами при наборе текста
*/
return;
}
if(packet instanceof Packet7Read){
if(packet instanceof PacketRead){
/**
* Если это пакет прочтения, то отправляем тихий пуш, что диалог прочитан, отправляем тому, кто читает диалог, чтобы
* клиент мог очистить пуши для этого диалога
@@ -201,7 +223,7 @@ public class MessageDispatcher {
* @param client клиент отправляющий пакет
* @throws ProtocolException
*/
public void sendPeer(PacketBaseDialog packet, Client client) throws ProtocolException {
public void sendPeer(Packet packet, Client client) throws ProtocolException {
/**
* По умолчанию буферизация включена, чтобы не терять сообщения
*/

View File

@@ -0,0 +1,38 @@
package im.rosetta.service.dispatch.runtime;
import io.orprotocol.packet.Packet;
/**
* Базовый класс диалога нужный для диспатчера
*/
public class BaseDialog extends Packet {
public String fromPublicKey;
public String toPublicKey;
public String privateKey;
public String getFromPublicKey() {
return fromPublicKey;
}
public void setFromPublicKey(String fromPublicKey) {
this.fromPublicKey = fromPublicKey;
}
public String getToPublicKey() {
return toPublicKey;
}
public void setToPublicKey(String toPublicKey) {
this.toPublicKey = toPublicKey;
}
public String getPrivateKey() {
return privateKey;
}
public void setPrivateKey(String privateKey) {
this.privateKey = privateKey;
}
}