157 lines
4.3 KiB
Java
157 lines
4.3 KiB
Java
package im.rosetta.packet;
|
||
|
||
import im.rosetta.packet.runtime.HandshakeStage;
|
||
|
||
import io.orprotocol.Stream;
|
||
import io.orprotocol.packet.Packet;
|
||
|
||
/**
|
||
* Пакет хэндшейка между клиентом и сервером.
|
||
* Используется для установления соединения и подтверждения от сервера что клиент
|
||
* тот за кого себя выдает.
|
||
*
|
||
* Протокол таблица:
|
||
* 0 - packetId (int16)
|
||
* 1 - privateKey (string)
|
||
* 2 - publicKey (string)
|
||
* 3 - protocolVersion (int8)
|
||
* 4 - heartbeatInterval (int8)
|
||
* 5 - deviceId (string)
|
||
* 6 - deviceName (string)
|
||
* 7 - deviceOs (string)
|
||
* 8 - handshakeStage (int8)
|
||
*/
|
||
public class Packet0Handshake extends Packet {
|
||
/**
|
||
* Публичный и приватный ключи клиента
|
||
*/
|
||
private String publicKey;
|
||
/**
|
||
* Приватный ключ клиента
|
||
* Это не совсем приватный ключ, а лишь необратимо зашифрованная его версия
|
||
* для идентификации клиента на сервере.
|
||
*/
|
||
private String privateKey;
|
||
/**
|
||
* Версия протокола клиента
|
||
*/
|
||
private int protocolVersion = 1;
|
||
|
||
/**
|
||
* Интервал отправки heartbeat пакетов в секундах
|
||
*/
|
||
private int heartbeatInterval = 15;
|
||
|
||
/**
|
||
* Минимальная информация об устройстве клиента
|
||
*/
|
||
private String deviceId;
|
||
private String deviceName;
|
||
private String deviceOs;
|
||
|
||
/**
|
||
* Стадия рукопожатия
|
||
* 0 - COMPLETED
|
||
* 1 - NEED_DEVICE_VERIFICATION
|
||
*/
|
||
private HandshakeStage handshakeStage = HandshakeStage.COMPLETED;
|
||
|
||
|
||
@Override
|
||
public Stream write() {
|
||
Stream stream = new Stream();
|
||
stream.writeInt16(this.packetId);
|
||
stream.writeString(this.privateKey);
|
||
stream.writeString(this.publicKey);
|
||
stream.writeInt8(this.protocolVersion);
|
||
stream.writeInt8(this.heartbeatInterval);
|
||
stream.writeString(this.deviceId);
|
||
stream.writeString(this.deviceName);
|
||
stream.writeString(this.deviceOs);
|
||
stream.writeInt8(this.handshakeStage.getCode());
|
||
return stream;
|
||
}
|
||
|
||
@Override
|
||
public void read(Stream stream) {
|
||
this.privateKey = stream.readString();
|
||
this.publicKey = stream.readString();
|
||
this.protocolVersion = stream.readInt8();
|
||
this.heartbeatInterval = stream.readInt8();
|
||
String deviceId = stream.readString();
|
||
String deviceName = stream.readString();
|
||
String deviceOs = stream.readString();
|
||
this.deviceId = deviceId;
|
||
this.deviceName = deviceName;
|
||
this.deviceOs = deviceOs;
|
||
this.handshakeStage = HandshakeStage.fromCode(
|
||
stream.readInt8()
|
||
);
|
||
}
|
||
|
||
public String getPublicKey() {
|
||
return publicKey;
|
||
}
|
||
|
||
public String getPrivateKey() {
|
||
return privateKey;
|
||
}
|
||
|
||
public int getProtocolVersion() {
|
||
return protocolVersion;
|
||
}
|
||
|
||
public int getHeartbeatInterval() {
|
||
return heartbeatInterval;
|
||
}
|
||
|
||
public String getDeviceId() {
|
||
return deviceId;
|
||
}
|
||
|
||
public String getDeviceName() {
|
||
return deviceName;
|
||
}
|
||
|
||
public String getDeviceOs() {
|
||
return deviceOs;
|
||
}
|
||
|
||
public HandshakeStage getHandshakeStage() {
|
||
return handshakeStage;
|
||
}
|
||
|
||
public void setHandshakeStage(HandshakeStage handshakeStage) {
|
||
this.handshakeStage = handshakeStage;
|
||
}
|
||
|
||
public void setDeviceId(String deviceId) {
|
||
this.deviceId = deviceId;
|
||
}
|
||
|
||
public void setDeviceName(String deviceName) {
|
||
this.deviceName = deviceName;
|
||
}
|
||
|
||
public void setDeviceOs(String deviceOs) {
|
||
this.deviceOs = deviceOs;
|
||
}
|
||
|
||
public void setHeartbeatInterval(int heartbeatInterval) {
|
||
this.heartbeatInterval = heartbeatInterval;
|
||
}
|
||
|
||
public void setProtocolVersion(int protocolVersion) {
|
||
this.protocolVersion = protocolVersion;
|
||
}
|
||
|
||
public void setPrivateKey(String privateKey) {
|
||
this.privateKey = privateKey;
|
||
}
|
||
|
||
public void setPublicKey(String publicKey) {
|
||
this.publicKey = publicKey;
|
||
}
|
||
|
||
}
|