Переделаны все Executors под новый протокол, переделаны все слушатели событий под новый протокол
This commit is contained in:
@@ -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());
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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;
|
||||||
@@ -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);
|
||||||
@@ -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()){
|
||||||
/**
|
/**
|
||||||
@@ -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()){
|
||||||
/**
|
/**
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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);
|
||||||
/**
|
/**
|
||||||
* Кладем пакет в буфер для будущей синхронизации
|
* Кладем пакет в буфер для будущей синхронизации
|
||||||
*/
|
*/
|
||||||
@@ -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()){
|
||||||
/**
|
/**
|
||||||
41
src/main/java/im/rosetta/executors/ExecutorIceServers.java
Normal file
41
src/main/java/im/rosetta/executors/ExecutorIceServers.java
Normal 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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){
|
||||||
/**
|
/**
|
||||||
* Отписка от токена только если токен уже подписан
|
* Отписка от токена только если токен уже подписан
|
||||||
*/
|
*/
|
||||||
@@ -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();
|
||||||
@@ -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()){
|
||||||
/**
|
/**
|
||||||
@@ -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
|
||||||
* не требует авторизации. Это сделано на те случаи когда приложение
|
* не требует авторизации. Это сделано на те случаи когда приложение
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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) {
|
||||||
/**
|
/**
|
||||||
* Клиент сообщил, что прошел стадию обмена ключами и звонок активен
|
* Клиент сообщил, что прошел стадию обмена ключами и звонок активен
|
||||||
*/
|
*/
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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();
|
||||||
@@ -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,
|
||||||
* который отвечает за эту комнату, чтобы он транслировал его всем участникам комнаты, кроме отправителя
|
* который отвечает за эту комнату, чтобы он транслировал его всем участникам комнаты, кроме отправителя
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
/**
|
/**
|
||||||
* По умолчанию буферизация включена, чтобы не терять сообщения
|
* По умолчанию буферизация включена, чтобы не терять сообщения
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user