Добавлены call-pushes
This commit is contained in:
@@ -1,10 +1,15 @@
|
||||
package im.rosetta.executors;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
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.dispatch.push.PushNotifyDispatcher;
|
||||
import im.rosetta.service.dispatch.runtime.PushType;
|
||||
import im.rosetta.service.services.ForwardUnitService;
|
||||
import io.g365sfu.Room;
|
||||
import io.orprotocol.ProtocolException;
|
||||
@@ -18,6 +23,7 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
|
||||
|
||||
private ClientManager clientManager;
|
||||
private ForwardUnitService fus;
|
||||
private PushNotifyDispatcher pushNotifyDispatcher = new PushNotifyDispatcher();
|
||||
|
||||
public Executor26SignalPeer(ClientManager clientManager, ForwardUnitService fus) {
|
||||
this.clientManager = clientManager;
|
||||
@@ -26,6 +32,8 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
|
||||
|
||||
@Override
|
||||
public void onPacketReceived(Packet26SignalPeer packet, Client client) throws Exception, ProtocolException {
|
||||
String src = packet.getSrc();
|
||||
String dst = packet.getDst();
|
||||
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
|
||||
if (eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) {
|
||||
/**
|
||||
@@ -35,6 +43,14 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
|
||||
client.disconnect(Failures.HANDSHAKE_NOT_COMPLETED);
|
||||
return;
|
||||
}
|
||||
if(!src.equals(eciAuthentificate.getPublicKey())) {
|
||||
/**
|
||||
* Если src в пакете не совпадает с авторизованным PK клиента, то это может означать, что клиент пытается
|
||||
* отправить сигнал от другого пользователя, отключаем его от сервера.
|
||||
*/
|
||||
client.disconnect(Failures.DATA_MISSMATCH);
|
||||
return;
|
||||
}
|
||||
NetworkSignalType type = packet.getSignalType();
|
||||
if(type == NetworkSignalType.CALL) {
|
||||
/**
|
||||
@@ -50,6 +66,14 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
|
||||
this.clientManager.sendPacketToAuthorizedPK(packet.getSrc(), responsePacket);
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Получатель сигнала не занят, отправляем ему пуш уведомление о входящем звонке и сигнал CALL для инициализации звонка
|
||||
*/
|
||||
pushNotifyDispatcher.sendPush(dst, new HashMap<>(){{
|
||||
put("type", PushType.CALL);
|
||||
put("dialog", src);
|
||||
put("callId", UUID.randomUUID().toString());
|
||||
}});
|
||||
}
|
||||
if(type == NetworkSignalType.CREATE_ROOM){
|
||||
/**
|
||||
@@ -66,14 +90,8 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
|
||||
this.clientManager.sendPacketToAuthorizedPK(packet.getDst(), packet);
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* TODO: Проверка на существование получателя
|
||||
*/
|
||||
|
||||
this.clientManager.sendPacketToAuthorizedPK(packet.getDst(), packet);
|
||||
/**
|
||||
* TODO: Высокоприоритетный пуш для сигналов звонков, чтобы мобильные устройства могли показать
|
||||
* интерфейс входящего звонка, даже если приложение находится в фоне
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user