diff --git a/src/main/java/im/rosetta/executors/Executor26Signal.java b/src/main/java/im/rosetta/executors/Executor26Signal.java deleted file mode 100644 index be0108d..0000000 --- a/src/main/java/im/rosetta/executors/Executor26Signal.java +++ /dev/null @@ -1,39 +0,0 @@ -package im.rosetta.executors; - -import im.rosetta.client.ClientManager; -import im.rosetta.client.tags.ECIAuthentificate; -import im.rosetta.packet.Packet26Signal; -import io.orprotocol.ProtocolException; -import io.orprotocol.client.Client; -import io.orprotocol.packet.PacketExecutor; - -public class Executor26Signal extends PacketExecutor { - - public ClientManager clientManager; - - public Executor26Signal(ClientManager clientManager) { - this.clientManager = clientManager; - } - - @Override - public void onPacketReceived(Packet26Signal packet, Client client) throws Exception, ProtocolException { - ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class); - if (eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) { - /** - * Если клиент не авторизован, то мы не будем обрабатывать его сигналы на анициализацию звонка - * и просто отключим его от сервера. - */ - client.disconnect(); - return; - } - /** - * TODO: Проверка на существование получателя - */ - this.clientManager.sendPacketToAuthorizedPK(packet.getDst(), packet); - /** - * TODO: Высокоприоритетный пуш для сигналов звонков, чтобы мобильные устройства могли показать - * интерфейс входящего звонка, даже если приложение находится в фоне - */ - } - -} diff --git a/src/main/java/im/rosetta/executors/Executor26SignalPeer.java b/src/main/java/im/rosetta/executors/Executor26SignalPeer.java new file mode 100644 index 0000000..674b864 --- /dev/null +++ b/src/main/java/im/rosetta/executors/Executor26SignalPeer.java @@ -0,0 +1,64 @@ +package im.rosetta.executors; + +import im.rosetta.Failures; +import im.rosetta.client.ClientManager; +import im.rosetta.client.tags.ECIAuthentificate; +import im.rosetta.packet.Packet26SignalPeer; +import im.rosetta.packet.runtime.NetworkSignalType; +import im.rosetta.service.services.ForwardUnitService; +import io.g365sfu.Room; +import io.orprotocol.ProtocolException; +import io.orprotocol.client.Client; +import io.orprotocol.packet.PacketExecutor; + +/** + * Используется в Peer To Peer звонках, в групповых звонках другой сигналинг + */ +public class Executor26SignalPeer extends PacketExecutor { + + private ClientManager clientManager; + private ForwardUnitService fus; + + public Executor26SignalPeer(ClientManager clientManager, ForwardUnitService fus) { + this.clientManager = clientManager; + this.fus = fus; + } + + @Override + public void onPacketReceived(Packet26SignalPeer packet, Client client) throws Exception, ProtocolException { + ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class); + if (eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) { + /** + * Если клиент не авторизован, то мы не будем обрабатывать его сигналы на анициализацию звонка + * и просто отключим его от сервера. + */ + client.disconnect(Failures.HANDSHAKE_NOT_COMPLETED); + return; + } + NetworkSignalType type = packet.getSignalType(); + if(type == NetworkSignalType.CREATE_ROOM){ + /** + * Создается комната для звонка + */ + Room room = this.fus.createRoom(); + room.addParticipant(packet.getSrc()); + room.addParticipant(packet.getDst()); + packet.setRoomId(room.getRoomId()); + /** + * Результат создания комнаты транслируем обоим участникам, чтобы они могли начать обмен WebRTC SDP, и тд + */ + this.clientManager.sendPacketToAuthorizedPK(packet.getSrc(), packet); + this.clientManager.sendPacketToAuthorizedPK(packet.getDst(), packet); + return; + } + /** + * TODO: Проверка на существование получателя + */ + this.clientManager.sendPacketToAuthorizedPK(packet.getDst(), packet); + /** + * TODO: Высокоприоритетный пуш для сигналов звонков, чтобы мобильные устройства могли показать + * интерфейс входящего звонка, даже если приложение находится в фоне + */ + } + +}