117 lines
3.0 KiB
TypeScript
117 lines
3.0 KiB
TypeScript
import Packet from "../packet";
|
|
import Stream from "../stream";
|
|
|
|
export enum HandshakeState {
|
|
COMPLETED,
|
|
NEED_DEVICE_VERIFICATION
|
|
}
|
|
|
|
export interface Device {
|
|
deviceId: string;
|
|
deviceName: string;
|
|
deviceOs: string;
|
|
}
|
|
|
|
/**
|
|
* Hadshake packet
|
|
* ID: 0x00
|
|
*
|
|
* The handshake packet is the first packet sent by the client to the server.
|
|
* It contains the hash of the client's public key and the public key itself.
|
|
*/
|
|
export default class PacketHandshake extends Packet {
|
|
private privateKey: string = "";
|
|
private publicKey: string = "";
|
|
private protocolVersion: number = 1;
|
|
/**
|
|
* Interval seconds
|
|
*/
|
|
private heartbeatInterval : number = 15;
|
|
private device: Device = {
|
|
deviceId: "",
|
|
deviceName: "",
|
|
deviceOs: ""
|
|
};
|
|
private handshakeState:
|
|
HandshakeState = HandshakeState.NEED_DEVICE_VERIFICATION;
|
|
|
|
public getPacketId(): number {
|
|
return 0x00;
|
|
}
|
|
|
|
public _receive(stream: Stream): void {
|
|
this.privateKey = stream.readString();
|
|
this.publicKey = stream.readString();
|
|
this.protocolVersion = stream.readInt8();
|
|
this.heartbeatInterval = stream.readInt8();
|
|
this.device = {
|
|
deviceId: stream.readString(),
|
|
deviceName: stream.readString(),
|
|
deviceOs: stream.readString()
|
|
}
|
|
this.handshakeState = stream.readInt8();
|
|
}
|
|
|
|
public _send(): Stream {
|
|
const stream = new Stream();
|
|
stream.writeInt16(this.getPacketId());
|
|
stream.writeString(this.privateKey);
|
|
stream.writeString(this.publicKey);
|
|
stream.writeInt8(this.protocolVersion);
|
|
stream.writeInt8(this.heartbeatInterval);
|
|
stream.writeString(this.device.deviceId);
|
|
stream.writeString(this.device.deviceName);
|
|
stream.writeString(this.device.deviceOs);
|
|
stream.writeInt8(this.handshakeState);
|
|
return stream;
|
|
}
|
|
|
|
public getPrivateKey(): string {
|
|
return this.privateKey;
|
|
}
|
|
|
|
public getPublicKey(): string {
|
|
return this.publicKey;
|
|
}
|
|
|
|
public setPrivateKey(privateKey: string): void {
|
|
this.privateKey = privateKey;
|
|
}
|
|
|
|
public setPublicKey(publicKey: string): void {
|
|
this.publicKey = publicKey;
|
|
}
|
|
|
|
public getProtocolVersion(): number {
|
|
return this.protocolVersion;
|
|
}
|
|
|
|
public setProtocolVersion(protocolVersion: number): void {
|
|
this.protocolVersion = protocolVersion;
|
|
}
|
|
|
|
public getHeartbeatInterval(): number {
|
|
return this.heartbeatInterval;
|
|
}
|
|
|
|
public setHeartbeatInterval(heartbeatInterval: number): void {
|
|
this.heartbeatInterval = heartbeatInterval;
|
|
}
|
|
|
|
public getDevice(): Device {
|
|
return this.device;
|
|
}
|
|
|
|
public setDevice(device: Device): void {
|
|
this.device = device;
|
|
}
|
|
|
|
public getHandshakeState(): HandshakeState {
|
|
return this.handshakeState;
|
|
}
|
|
|
|
public setHandshakeState(handshakeState: HandshakeState): void {
|
|
this.handshakeState = handshakeState;
|
|
}
|
|
|
|
} |