Переделаны все 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.Executor26SignalPeer;
import im.rosetta.executors.Executor27WebRTC; import im.rosetta.executors.Executor27WebRTC;
import im.rosetta.executors.Executor28IceServers; import im.rosetta.executors.Executor28IceServers;
import im.rosetta.executors.Executor3Search; import im.rosetta.executors.ExecutorSearch;
import im.rosetta.executors.Executor4OnlineState; import im.rosetta.executors.ExecutorOnlineState;
import im.rosetta.executors.Executor6Message; import im.rosetta.executors.Executor6Message;
import im.rosetta.executors.Executor7Read; import im.rosetta.executors.Executor7Read;
import im.rosetta.listeners.DeviceListListener; import im.rosetta.listeners.DeviceListListener;
@@ -158,8 +158,8 @@ public class Boot {
private void registerAllExecutors() { private void registerAllExecutors() {
this.packetManager.registerExecutor(0, new ExecutorHandshake(this.eventManager, this.clientManager, this.packetManager)); this.packetManager.registerExecutor(0, new ExecutorHandshake(this.eventManager, this.clientManager, this.packetManager));
this.packetManager.registerExecutor(1, new ExecutorUserInfo()); this.packetManager.registerExecutor(1, new ExecutorUserInfo());
this.packetManager.registerExecutor(3, new Executor3Search(this.clientManager)); this.packetManager.registerExecutor(3, new ExecutorSearch(this.clientManager));
this.packetManager.registerExecutor(4, new Executor4OnlineState(this.onlineManager, 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(6, new Executor6Message(this.clientManager, this.packetManager));
this.packetManager.registerExecutor(7, new Executor7Read(this.clientManager, this.packetManager)); this.packetManager.registerExecutor(7, new Executor7Read(this.clientManager, this.packetManager));
this.packetManager.registerExecutor(10, new Executor10RequestUpdate()); this.packetManager.registerExecutor(10, new Executor10RequestUpdate());

View File

@@ -1,7 +1,7 @@
package im.rosetta.database.entity; package im.rosetta.database.entity;
import im.rosetta.database.CreateUpdateEntity; import im.rosetta.database.CreateUpdateEntity;
import im.rosetta.packet.runtime.TokenType; import im.rosetta.network.enums.TokenType;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.EnumType; 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.database.repository.DeviceRepository;
import im.rosetta.event.EventManager; import im.rosetta.event.EventManager;
import im.rosetta.event.events.handshake.HandshakeCompletedEvent; import im.rosetta.event.events.handshake.HandshakeCompletedEvent;
import im.rosetta.packet.Packet0Handshake; import im.rosetta.network.enums.DeviceSolution;
import im.rosetta.packet.Packet24DeviceResolve; import im.rosetta.network.enums.HandshakeStage;
import im.rosetta.packet.runtime.DeviceSolution; import im.rosetta.network.packet.PacketDeviceResolve;
import im.rosetta.packet.runtime.HandshakeStage; import im.rosetta.network.packet.PacketHandshake;
import im.rosetta.service.dispatch.DeviceDispatcher; import im.rosetta.service.dispatch.DeviceDispatcher;
import im.rosetta.service.services.BufferService; import im.rosetta.service.services.BufferService;
import io.orprotocol.ProtocolException; import io.orprotocol.ProtocolException;
@@ -22,7 +22,7 @@ import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor; import io.orprotocol.packet.PacketExecutor;
import io.orprotocol.packet.PacketManager; import io.orprotocol.packet.PacketManager;
public class Executor24DeviceResolve extends PacketExecutor<Packet24DeviceResolve> { public class ExecutorDeviceResolve extends PacketExecutor<PacketDeviceResolve> {
private final ClientManager clientManager; private final ClientManager clientManager;
private final EventManager eventManager; private final EventManager eventManager;
@@ -31,7 +31,7 @@ public class Executor24DeviceResolve extends PacketExecutor<Packet24DeviceResolv
private final BufferRepository bufferRepository = new BufferRepository(); private final BufferRepository bufferRepository = new BufferRepository();
private final BufferService bufferService; private final BufferService bufferService;
public Executor24DeviceResolve(ClientManager clientManager, EventManager eventManager, PacketManager packetManager) { public ExecutorDeviceResolve(ClientManager clientManager, EventManager eventManager, PacketManager packetManager) {
this.clientManager = clientManager; this.clientManager = clientManager;
this.eventManager = eventManager; this.eventManager = eventManager;
this.deviceDispatcher = new DeviceDispatcher(clientManager); this.deviceDispatcher = new DeviceDispatcher(clientManager);
@@ -39,7 +39,7 @@ public class Executor24DeviceResolve extends PacketExecutor<Packet24DeviceResolv
} }
@Override @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); ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if (eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) { 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); 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.setHandshakeStage(HandshakeStage.COMPLETED);
handshake.setDeviceId(""); handshake.setDeviceId("");
handshake.setDeviceName(""); 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); this.bufferService.deletePacketsFromBuffer(eciAuthentificate.getPublicKey(), 9, 0);
break; break;

View File

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

View File

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

View File

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

View File

@@ -4,19 +4,18 @@ import im.rosetta.Failures;
import im.rosetta.client.tags.ECIAuthentificate; import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.database.entity.Group; import im.rosetta.database.entity.Group;
import im.rosetta.database.repository.GroupRepository; import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet19GroupInviteInfo; import im.rosetta.network.enums.GroupStatus;
import im.rosetta.packet.runtime.NetworkGroupStatus; import im.rosetta.network.packet.PacketGroupInviteInfo;
import io.orprotocol.ProtocolException; import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client; import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor; import io.orprotocol.packet.PacketExecutor;
public class Executor19GroupInviteInfo extends PacketExecutor<Packet19GroupInviteInfo> { public class ExecutorGroupInviteInfo extends PacketExecutor<PacketGroupInviteInfo> {
private final GroupRepository groupRepository = new GroupRepository(); private final GroupRepository groupRepository = new GroupRepository();
@Override @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); ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){ if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/** /**
@@ -31,7 +30,7 @@ public class Executor19GroupInviteInfo extends PacketExecutor<Packet19GroupInvit
/** /**
* Группы не существует, возвращаем клиенту статус INVALID * Группы не существует, возвращаем клиенту статус INVALID
*/ */
packet.setStatus(NetworkGroupStatus.INVALID); packet.setStatus(GroupStatus.INVALID);
client.send(packet); client.send(packet);
return; return;
} }
@@ -39,7 +38,7 @@ public class Executor19GroupInviteInfo extends PacketExecutor<Packet19GroupInvit
/** /**
* Клиент забанен в группе, возвращаем клиенту статус BANNED * Клиент забанен в группе, возвращаем клиенту статус BANNED
*/ */
packet.setStatus(NetworkGroupStatus.BANNED); packet.setStatus(GroupStatus.BANNED);
client.send(packet); client.send(packet);
return; return;
} }
@@ -50,7 +49,7 @@ public class Executor19GroupInviteInfo extends PacketExecutor<Packet19GroupInvit
int membersCount = group.getMembersPublicKeys().size(); int membersCount = group.getMembersPublicKeys().size();
boolean isMember = group.getMembersPublicKeys().contains(eciAuthentificate.getPublicKey()); boolean isMember = group.getMembersPublicKeys().contains(eciAuthentificate.getPublicKey());
packet.setMembersCount(membersCount); packet.setMembersCount(membersCount);
packet.setStatus(isMember ? NetworkGroupStatus.JOINED : NetworkGroupStatus.NOT_JOINED); packet.setStatus(isMember ? GroupStatus.JOINED : GroupStatus.NOT_JOINED);
client.send(packet); 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.entity.Group;
import im.rosetta.database.repository.BufferRepository; import im.rosetta.database.repository.BufferRepository;
import im.rosetta.database.repository.GroupRepository; import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet20GroupJoin; import im.rosetta.network.enums.GroupStatus;
import im.rosetta.packet.runtime.NetworkGroupStatus; import im.rosetta.network.packet.PacketGroupJoin;
import im.rosetta.service.services.BufferService; import im.rosetta.service.services.BufferService;
import io.orprotocol.ProtocolException; import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client; import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor; import io.orprotocol.packet.PacketExecutor;
import io.orprotocol.packet.PacketManager; 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 GroupRepository groupRepository = new GroupRepository();
private final BufferRepository bufferRepository = new BufferRepository(); private final BufferRepository bufferRepository = new BufferRepository();
private final BufferService bufferService; private final BufferService bufferService;
public Executor20GroupJoin(PacketManager packetManager) { public ExecutorGroupJoin(PacketManager packetManager) {
this.bufferService = new BufferService(bufferRepository, packetManager); this.bufferService = new BufferService(bufferRepository, packetManager);
} }
@Override @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); ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){ if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/** /**
@@ -39,7 +39,7 @@ public class Executor20GroupJoin extends PacketExecutor<Packet20GroupJoin> {
/** /**
* Группы не существует, возвращаем клиенту статус INVALID * Группы не существует, возвращаем клиенту статус INVALID
*/ */
packet.setStatus(NetworkGroupStatus.INVALID); packet.setStatus(GroupStatus.INVALID);
client.send(packet); client.send(packet);
return; return;
} }
@@ -48,7 +48,7 @@ public class Executor20GroupJoin extends PacketExecutor<Packet20GroupJoin> {
/** /**
* Клиент забанен в группе, возвращаем клиенту статус BANNED * Клиент забанен в группе, возвращаем клиенту статус BANNED
*/ */
packet.setStatus(NetworkGroupStatus.BANNED); packet.setStatus(GroupStatus.BANNED);
client.send(packet); client.send(packet);
return; return;
} }
@@ -57,14 +57,14 @@ public class Executor20GroupJoin extends PacketExecutor<Packet20GroupJoin> {
/** /**
* Клиент уже является участником группы, возвращаем клиенту статус JOINED * Клиент уже является участником группы, возвращаем клиенту статус JOINED
*/ */
packet.setStatus(NetworkGroupStatus.JOINED); packet.setStatus(GroupStatus.JOINED);
client.send(packet); client.send(packet);
return; 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.client.tags.ECIAuthentificate;
import im.rosetta.database.entity.Group; import im.rosetta.database.entity.Group;
import im.rosetta.database.repository.GroupRepository; import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet21GroupLeave; import im.rosetta.network.packet.PacketGroupLeave;
import io.orprotocol.ProtocolException; import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client; 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(); private final GroupRepository groupRepository = new GroupRepository();
@Override @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); ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){ 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.Failures;
import im.rosetta.client.ClientManager; import im.rosetta.client.ClientManager;
import im.rosetta.client.tags.ECIAuthentificate; import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.packet.Packet6Message; import im.rosetta.network.packet.PacketDelivery;
import im.rosetta.packet.Packet8Delivery; import im.rosetta.network.packet.PacketMessage;
import im.rosetta.packet.runtime.Attachment; import im.rosetta.network.types.Attachment;
import im.rosetta.service.dispatch.MessageDispatcher; import im.rosetta.service.dispatch.MessageDispatcher;
import io.orprotocol.ProtocolException; 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; private final MessageDispatcher messageDispatcher;
public Executor6Message(ClientManager clientManager, PacketManager packetManager) { public ExecutorMessage(ClientManager clientManager, PacketManager packetManager) {
this.messageDispatcher = new MessageDispatcher(clientManager, packetManager); this.messageDispatcher = new MessageDispatcher(clientManager, packetManager);
} }
@Override @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 fromPublicKey = packet.getFromPublicKey();
String toPublicKey = packet.getToPublicKey(); String toPublicKey = packet.getToPublicKey();
String messageId = packet.getMessageId(); 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.setMessageId(messageId);
deliveryPacket.setToPublicKey(toPublicKey); deliveryPacket.setToPublicKey(toPublicKey);
client.send(deliveryPacket); client.send(deliveryPacket);

View File

@@ -7,27 +7,26 @@ import im.rosetta.Failures;
import im.rosetta.client.ClientManager; import im.rosetta.client.ClientManager;
import im.rosetta.client.OnlineManager; import im.rosetta.client.OnlineManager;
import im.rosetta.client.tags.ECIAuthentificate; import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.packet.Packet4OnlineSubscribe; import im.rosetta.network.enums.NetworkStatus;
import im.rosetta.packet.Packet5OnlineState; import im.rosetta.network.packet.PacketOnlineState;
import im.rosetta.packet.runtime.NetworkStatus; import im.rosetta.network.packet.PacketOnlineSubscribe;
import im.rosetta.packet.runtime.PKNetworkStatus; import im.rosetta.network.types.PKNetworkStatus;
import io.orprotocol.ProtocolException; import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client; import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor; import io.orprotocol.packet.PacketExecutor;
public class Executor4OnlineState extends PacketExecutor<Packet4OnlineSubscribe> { public class ExecutorOnlineState extends PacketExecutor<PacketOnlineSubscribe> {
private final OnlineManager onlineManager; private final OnlineManager onlineManager;
private final ClientManager clientManager; private final ClientManager clientManager;
public Executor4OnlineState(OnlineManager onlineManager, ClientManager clientManager) { public ExecutorOnlineState(OnlineManager onlineManager, ClientManager clientManager) {
this.onlineManager = onlineManager; this.onlineManager = onlineManager;
this.clientManager = clientManager; this.clientManager = clientManager;
} }
@Override @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); ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) { if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) {
/** /**
@@ -60,14 +59,17 @@ public class Executor4OnlineState extends PacketExecutor<Packet4OnlineSubscribe>
* Сразу же формируем и отправляем клиенту онлайн статус для указанных публичных ключей, чтобы клиент не ждал обновления статуса, * Сразу же формируем и отправляем клиенту онлайн статус для указанных публичных ключей, чтобы клиент не ждал обновления статуса,
* а получил его сразу после подписки * а получил его сразу после подписки
*/ */
Packet5OnlineState onlineStates = new Packet5OnlineState(); PacketOnlineState onlineStates = new PacketOnlineState();
List<PKNetworkStatus> onlineStatuses = new ArrayList<>(); List<PKNetworkStatus> onlineStatusList = new ArrayList<>();
for (String targetPublicKey : publicKeys) { for (String targetPublicKey : publicKeys) {
boolean isOnline = this.clientManager.isClientConnected(targetPublicKey); NetworkStatus networkStatus = this.clientManager.isClientConnected(targetPublicKey) ?
PKNetworkStatus networkStatus = new PKNetworkStatus(targetPublicKey, NetworkStatus.fromBoolean(isOnline)); NetworkStatus.ONLINE : NetworkStatus.OFFLINE;
onlineStatuses.add(networkStatus); PKNetworkStatus pkNetworkStatus = new PKNetworkStatus();
pkNetworkStatus.setPublicKey(targetPublicKey);
pkNetworkStatus.setNetworkStatus(networkStatus);
onlineStatusList.add(pkNetworkStatus);
} }
onlineStates.setPkNetworkStatuses(onlineStatuses); onlineStates.setPkNetworkStatuses(onlineStatusList);
client.send(onlineStates); 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.entity.PushToken;
import im.rosetta.database.repository.DeviceRepository; import im.rosetta.database.repository.DeviceRepository;
import im.rosetta.database.repository.PushTokenRepository; import im.rosetta.database.repository.PushTokenRepository;
import im.rosetta.packet.Packet16PushNotification; import im.rosetta.network.enums.NotificationAction;
import im.rosetta.packet.runtime.NetworkNotificationAction; import im.rosetta.network.packet.PacketPushNotification;
import im.rosetta.service.services.DeviceService; import im.rosetta.service.services.DeviceService;
import io.orprotocol.ProtocolException; import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client; import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor; 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 DeviceRepository deviceRepository = new DeviceRepository();
private final DeviceService deviceService = new DeviceService(deviceRepository); private final DeviceService deviceService = new DeviceService(deviceRepository);
private final PushTokenRepository pushTokenRepository = new PushTokenRepository(); private final PushTokenRepository pushTokenRepository = new PushTokenRepository();
@Override @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); ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){ if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/** /**
@@ -50,7 +50,7 @@ public class Executor16PushNotification extends PacketExecutor<Packet16PushNotif
} }
PushToken pushToken = this.pushTokenRepository.findToken(device, notificationToken); 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()); token.setType(packet.getTokenType());
this.pushTokenRepository.save(token); 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.Failures;
import im.rosetta.client.ClientManager; import im.rosetta.client.ClientManager;
import im.rosetta.client.tags.ECIAuthentificate; import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.packet.Packet7Read; import im.rosetta.network.packet.PacketRead;
import im.rosetta.service.dispatch.MessageDispatcher; import im.rosetta.service.dispatch.MessageDispatcher;
import io.orprotocol.ProtocolException; import io.orprotocol.ProtocolException;
@@ -11,16 +11,16 @@ import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor; import io.orprotocol.packet.PacketExecutor;
import io.orprotocol.packet.PacketManager; import io.orprotocol.packet.PacketManager;
public class Executor7Read extends PacketExecutor<Packet7Read> { public class ExecutorRead extends PacketExecutor<PacketRead> {
private final MessageDispatcher messageDispatcher; private final MessageDispatcher messageDispatcher;
public Executor7Read(ClientManager clientManager, PacketManager packetManager) { public ExecutorRead(ClientManager clientManager, PacketManager packetManager) {
this.messageDispatcher = new MessageDispatcher(clientManager, packetManager); this.messageDispatcher = new MessageDispatcher(clientManager, packetManager);
} }
@Override @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); ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
String fromPublicKey = packet.getFromPublicKey(); String fromPublicKey = packet.getFromPublicKey();
String toPublicKey = packet.getToPublicKey(); String toPublicKey = packet.getToPublicKey();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -8,10 +8,9 @@ import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.event.EventHandler; import im.rosetta.event.EventHandler;
import im.rosetta.event.Listener; import im.rosetta.event.Listener;
import im.rosetta.event.events.handshake.HandshakeCompletedEvent; import im.rosetta.event.events.handshake.HandshakeCompletedEvent;
import im.rosetta.packet.Packet5OnlineState; import im.rosetta.network.enums.NetworkStatus;
import im.rosetta.packet.runtime.NetworkStatus; import im.rosetta.network.packet.PacketOnlineState;
import im.rosetta.packet.runtime.PKNetworkStatus; import im.rosetta.network.types.PKNetworkStatus;
import io.orprotocol.ProtocolException; import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client; import io.orprotocol.client.Client;
@@ -45,14 +44,14 @@ public class OnlineStatusHandshakeCompleteListener implements Listener {
* Уведомляем всех подписчиков на его онлайн статус, что он подключился (стал онлайн) * Уведомляем всех подписчиков на его онлайн статус, что он подключился (стал онлайн)
*/ */
for (Client subscriber : subscribers) { for (Client subscriber : subscribers) {
Packet5OnlineState packet = new Packet5OnlineState(); PacketOnlineState packet = new PacketOnlineState();
List<PKNetworkStatus> statuses = new ArrayList<>(); List<PKNetworkStatus> statusList = new ArrayList<>();
statuses.add(new PKNetworkStatus( PKNetworkStatus status = new PKNetworkStatus();
eciAuthentificate.getPublicKey(), status.setPublicKey(eciAuthentificate.getPublicKey());
NetworkStatus.ONLINE status.setNetworkStatus(NetworkStatus.ONLINE);
)); statusList.add(status);
packet.setPkNetworkStatuses(statuses); packet.setPkNetworkStatuses(statusList);
subscriber.send(packet); 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.BufferRepository;
import im.rosetta.database.repository.GroupRepository; import im.rosetta.database.repository.GroupRepository;
import im.rosetta.database.repository.UserRepository; import im.rosetta.database.repository.UserRepository;
import im.rosetta.packet.Packet11Typeing; import im.rosetta.network.packet.PacketMessage;
import im.rosetta.packet.Packet7Read; import im.rosetta.network.packet.PacketRead;
import im.rosetta.packet.base.PacketBaseDialog; import im.rosetta.network.packet.PacketTypeing;
import im.rosetta.service.dispatch.push.PushNotifyDispatcher; 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.dispatch.runtime.PushType;
import im.rosetta.service.services.BufferService; import im.rosetta.service.services.BufferService;
import im.rosetta.service.services.UserService; import im.rosetta.service.services.UserService;
import io.orprotocol.ProtocolException; import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client; import io.orprotocol.client.Client;
import io.orprotocol.packet.Packet;
import io.orprotocol.packet.PacketManager; import io.orprotocol.packet.PacketManager;
/** /**
@@ -42,13 +44,29 @@ public class MessageDispatcher {
this.bufferService = new BufferService(bufferRepository, packetManager); 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 пакет с групповым сообщением * @param packet пакет с групповым сообщением
*/ */
public void sendGroup(PacketBaseDialog packet, Client client, ECIAuthentificate eciAuthentificate) throws ProtocolException { public void sendGroup(Packet packet, Client client, ECIAuthentificate eciAuthentificate)
String fromPublicKey = packet.getFromPublicKey(); throws ProtocolException, IllegalArgumentException {
String toPublicKey = packet.getToPublicKey(); 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:", "")); List<String> groupMembersPublicKeys = this.groupRepository.findGroupMembers(toPublicKey.replace("#group:", ""));
if(groupMembersPublicKeys.isEmpty()){ 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); this.clientManager.sendPacketToAuthorizedPK(groupMembersPublicKeys, packet);
if(packet instanceof Packet11Typeing){ if(packet instanceof PacketTypeing){
/** /**
* Если это пакет печати, то не отправляем пуш уведомление, так как это может привести к спаму пушами при наборе текста * Если это пакет печати, то не отправляем пуш уведомление, так как это может привести к спаму пушами при наборе текста
*/ */
return; return;
} }
if(packet instanceof Packet7Read){ if(packet instanceof PacketRead){
/** /**
* Если это пакет прочтения, то отправляем тихий пуш, что диалог прочитан, отправляем тому, кто читает диалог, чтобы * Если это пакет прочтения, то отправляем тихий пуш, что диалог прочитан, отправляем тому, кто читает диалог, чтобы
* клиент мог очистить пуши для этого диалога * клиент мог очистить пуши для этого диалога
@@ -131,9 +149,13 @@ public class MessageDispatcher {
* чтобы доставить пользователям если они не онлайн, если указать false то этот пакет получит * чтобы доставить пользователям если они не онлайн, если указать false то этот пакет получит
* только пользователь который были в сети * только пользователь который были в сети
*/ */
public void sendPeer(PacketBaseDialog packet, Client client, boolean bufferizationNeed) throws ProtocolException { public void sendPeer(Packet packet, Client client, boolean bufferizationNeed) throws ProtocolException {
String fromPublicKey = packet.getFromPublicKey(); BaseDialog base = this.constructBase(packet);
String toPublicKey = packet.getToPublicKey(); 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); User user = this.userService.fromClient(client);
if(user == null){ if(user == null){
/** /**
@@ -162,14 +184,14 @@ public class MessageDispatcher {
* Сохраняем сообщение в буфер на случай если получатель офлайн, или нам нужна будет синхронизация сообщений для получателя * Сохраняем сообщение в буфер на случай если получатель офлайн, или нам нужна будет синхронизация сообщений для получателя
*/ */
this.bufferService.pushPacketToBuffer(fromPublicKey, toPublicKey, packet); this.bufferService.pushPacketToBuffer(fromPublicKey, toPublicKey, packet);
if(packet instanceof Packet11Typeing){ if(packet instanceof PacketTypeing){
/** /**
* Если это пакет печати, то не отправляем пуш уведомление, * Если это пакет печати, то не отправляем пуш уведомление,
* так как это может привести к спаму пушами при наборе текста * так как это может привести к спаму пушами при наборе текста
*/ */
return; return;
} }
if(packet instanceof Packet7Read){ if(packet instanceof PacketRead){
/** /**
* Если это пакет прочтения, то отправляем тихий пуш, что диалог прочитан, отправляем тому, кто читает диалог, чтобы * Если это пакет прочтения, то отправляем тихий пуш, что диалог прочитан, отправляем тому, кто читает диалог, чтобы
* клиент мог очистить пуши для этого диалога * клиент мог очистить пуши для этого диалога
@@ -201,7 +223,7 @@ public class MessageDispatcher {
* @param client клиент отправляющий пакет * @param client клиент отправляющий пакет
* @throws ProtocolException * @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;
}
}