Реализация звонков на сервере #15
@@ -44,6 +44,7 @@ import im.rosetta.packet.Packet22GroupBan;
|
||||
import im.rosetta.packet.Packet23DeviceList;
|
||||
import im.rosetta.packet.Packet24DeviceResolve;
|
||||
import im.rosetta.packet.Packet25Sync;
|
||||
import im.rosetta.packet.Packet26Signal;
|
||||
import im.rosetta.packet.Packet2Result;
|
||||
import im.rosetta.packet.Packet3Search;
|
||||
import im.rosetta.packet.Packet4OnlineSubscribe;
|
||||
@@ -194,6 +195,7 @@ public class Boot {
|
||||
this.packetManager.registerPacket(23, Packet23DeviceList.class);
|
||||
this.packetManager.registerPacket(24, Packet24DeviceResolve.class);
|
||||
this.packetManager.registerPacket(25, Packet25Sync.class);
|
||||
this.packetManager.registerPacket(26, Packet26Signal.class);
|
||||
}
|
||||
|
||||
private void registerAllExecutors() {
|
||||
|
||||
122
src/main/java/im/rosetta/packet/Packet26Signal.java
Normal file
122
src/main/java/im/rosetta/packet/Packet26Signal.java
Normal file
@@ -0,0 +1,122 @@
|
||||
package im.rosetta.packet;
|
||||
|
||||
import im.rosetta.packet.runtime.NetworkSignalType;
|
||||
import io.orprotocol.Stream;
|
||||
import io.orprotocol.packet.Packet;
|
||||
|
||||
/**
|
||||
* Пакет cигналинга для совершения звонка. Учавствует в обмене ключами,
|
||||
* иницилизации звонка.
|
||||
*/
|
||||
public class Packet26Signal extends Packet {
|
||||
|
||||
/**
|
||||
* Идентификатор отправителя сигнала, обычно это PK пользователя, который отправляет пакет
|
||||
*/
|
||||
private String src;
|
||||
/**
|
||||
* Идентификатор получателя сигнала, обычно это PK пользователя, который должен принять пакет
|
||||
*/
|
||||
private String dst;
|
||||
|
||||
/**
|
||||
* Если сигнал предназначен для обмена ключами, то в это поле
|
||||
* будет помещаться sharedPublic публичная часть ключа DH алгоритма
|
||||
*/
|
||||
private String sharedPublic;
|
||||
|
||||
/**
|
||||
* Тип сигнала
|
||||
*/
|
||||
private NetworkSignalType signalType;
|
||||
|
||||
@Override
|
||||
public void read(Stream stream) {
|
||||
this.signalType = NetworkSignalType.fromCode(stream.readInt8());
|
||||
this.src = stream.readString();
|
||||
this.dst = stream.readString();
|
||||
if (signalType == NetworkSignalType.KEY_EXCHANGE) {
|
||||
this.sharedPublic = stream.readString();
|
||||
} else {
|
||||
this.sharedPublic = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream write() {
|
||||
Stream stream = new Stream();
|
||||
stream.writeInt16(this.packetId);
|
||||
stream.writeInt8(this.signalType.getCode());
|
||||
stream.writeString(this.src);
|
||||
stream.writeString(this.dst);
|
||||
if (signalType == NetworkSignalType.KEY_EXCHANGE) {
|
||||
stream.writeString(this.sharedPublic);
|
||||
}
|
||||
return stream;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить идентификатор отправителя сигнала
|
||||
* @return идентификатор отправителя сигнала
|
||||
*/
|
||||
public String getSrc() {
|
||||
return src;
|
||||
}
|
||||
|
||||
/**
|
||||
* Установить идентификатор отправителя сигнала
|
||||
* @param src идентификатор отправителя сигнала
|
||||
*/
|
||||
public void setSrc(String src) {
|
||||
this.src = src;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить идентификатор получателя сигнала
|
||||
* @return идентификатор получателя сигнала
|
||||
*/
|
||||
public String getDst() {
|
||||
return dst;
|
||||
}
|
||||
|
||||
/**
|
||||
* Установить идентификатор получателя сигнала
|
||||
* @param dst идентификатор получателя сигнала
|
||||
*/
|
||||
public void setDst(String dst) {
|
||||
this.dst = dst;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить публичную часть ключа DH алгоритма, если сигнал предназначен для обмена ключами
|
||||
* @return публичная часть ключа DH алгоритма или null, если сигнал не предназначен для обмена ключами
|
||||
*/
|
||||
public String getSharedPublic() {
|
||||
return sharedPublic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Установить публичную часть ключа DH алгоритма, если сигнал предназначен для обмена ключами
|
||||
* @param sharedPublic публичная часть ключа DH алгоритма
|
||||
*/
|
||||
public void setSharedPublic(String sharedPublic) {
|
||||
this.sharedPublic = sharedPublic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить тип сигнала
|
||||
* @return тип сигнала
|
||||
*/
|
||||
|
||||
public NetworkSignalType getSignalType() {
|
||||
return signalType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Установить тип сигнала
|
||||
* @param signalType тип сигнала
|
||||
*/
|
||||
public void setSignalType(NetworkSignalType signalType) {
|
||||
this.signalType = signalType;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package im.rosetta.packet.runtime;
|
||||
|
||||
/**
|
||||
* Типы сигналов, используемых в сетевом взаимодействии при звонках
|
||||
*/
|
||||
public enum NetworkSignalType {
|
||||
/**
|
||||
* CALL - сигнал для совершения звонка, инициирует процесс звонка
|
||||
*/
|
||||
CALL(0),
|
||||
/**
|
||||
* KEY_EXCHANGE - сигнал для обмена ключами, используется для обмена DH ключами между участниками звонка
|
||||
*/
|
||||
KEY_EXCHANGE(1),
|
||||
/**
|
||||
* ICE_CANDIDATE - сигнал для обмена ICE кандидатами, используется для обмена сетевыми кандидатами между участниками звонка
|
||||
*/
|
||||
ICE_CONFIG(2),
|
||||
/**
|
||||
* ACTIVE_CALL - сигнал для активного звонка, указывает на то, что звонок активен и участники могут обмениваться данными
|
||||
*/
|
||||
ACTIVE_CALL(3),
|
||||
/**
|
||||
* END_CALL - сигнал для завершения звонка, указывает на то, что звонок завершен и участники должны прекратить обмен данными
|
||||
*/
|
||||
END_CALL(4);
|
||||
|
||||
private final int code;
|
||||
|
||||
NetworkSignalType(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public static NetworkSignalType fromCode(int code) {
|
||||
for (NetworkSignalType type : NetworkSignalType.values()) {
|
||||
if (type.code == code) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Unknown NetworkSignalType code: " + code);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user