mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-03-25 06:01:00 +03:00
refactor
This commit is contained in:
109
src/connection.ts
Normal file
109
src/connection.ts
Normal file
@@ -0,0 +1,109 @@
|
||||
import Websock from "./websock";
|
||||
import * as message from "./message.js";
|
||||
import * as rendezvous from "./rendezvous.js";
|
||||
import { loadVp9, loadOpus } from "./codec";
|
||||
|
||||
const PORT = 21116;
|
||||
const HOST = "rs-sg.rustdesk.com";
|
||||
const licenceKey = "";
|
||||
const SCHEMA = "ws://";
|
||||
|
||||
export default class Connection {
|
||||
_msgs: any[];
|
||||
_ws: Websock | undefined;
|
||||
_interval: any;
|
||||
_id: string;
|
||||
|
||||
constructor() {
|
||||
this._msgs = [];
|
||||
this._id = "";
|
||||
this._interval = setInterval(() => {
|
||||
while (this._msgs.length) {
|
||||
this._ws?.sendMessage(this._msgs[0]);
|
||||
this._msgs.splice(0, 1);
|
||||
}
|
||||
}, 1);
|
||||
}
|
||||
|
||||
close() {
|
||||
clearInterval(this._interval);
|
||||
this._ws?.close();
|
||||
}
|
||||
|
||||
async start(id: string) {
|
||||
const ws = new Websock(getDefaultUri());
|
||||
this._ws = ws;
|
||||
this._id = id;
|
||||
await ws.open();
|
||||
const connType = rendezvous.ConnType.DEFAULT_CONN;
|
||||
const natType = rendezvous.NatType.SYMMETRIC;
|
||||
const punchHoleRequest = rendezvous.PunchHoleRequest.fromJSON({
|
||||
id,
|
||||
licenceKey,
|
||||
connType,
|
||||
natType,
|
||||
});
|
||||
ws.sendRendezvous({ punchHoleRequest });
|
||||
const msg = ws.parseRendezvous(await ws.next());
|
||||
const phr = msg.punchHoleResponse;
|
||||
const rr = msg.relayResponse;
|
||||
if (phr) {
|
||||
if (phr.failure != rendezvous.PunchHoleResponse_Failure.UNKNOWN) {
|
||||
switch (phr?.failure) {
|
||||
case rendezvous.PunchHoleResponse_Failure.ID_NOT_EXIST:
|
||||
break;
|
||||
}
|
||||
ws.close();
|
||||
}
|
||||
} else if (rr) {
|
||||
await this.connectRelay(rr);
|
||||
}
|
||||
}
|
||||
|
||||
async connectRelay(rr: rendezvous.RelayResponse) {
|
||||
const pk = rr.pk;
|
||||
let uri = rr.relayServer;
|
||||
if (uri) {
|
||||
uri = getrUriFromRs(uri);
|
||||
} else {
|
||||
uri = getDefaultUri(true);
|
||||
}
|
||||
const uuid = rr.uuid;
|
||||
const ws = new Websock(uri);
|
||||
await ws.open();
|
||||
console.log("Connected to relay server");
|
||||
this._ws = ws;
|
||||
const requestRelay = rendezvous.RequestRelay.fromJSON({
|
||||
licenceKey,
|
||||
uuid,
|
||||
});
|
||||
ws.sendRendezvous({ requestRelay });
|
||||
await this.secure(pk);
|
||||
}
|
||||
|
||||
async secure(pk: Uint8Array | undefined) {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
async function testDelay() {
|
||||
const ws = new Websock(getDefaultUri(false));
|
||||
await ws.open();
|
||||
console.log(ws.latency());
|
||||
}
|
||||
|
||||
function getDefaultUri(isRelay: Boolean = false): string {
|
||||
const host = localStorage.getItem("host");
|
||||
return SCHEMA + (host || HOST) + ":" + (PORT + (isRelay ? 3 : 2));
|
||||
}
|
||||
|
||||
function getrUriFromRs(uri: string): string {
|
||||
if (uri.indexOf(":") > 0) {
|
||||
const tmp = uri.split(":");
|
||||
const port = parseInt(tmp[1]);
|
||||
uri = tmp[0] + ":" + (port + 2);
|
||||
} else {
|
||||
uri += ":" + (PORT + 3);
|
||||
}
|
||||
return uri;
|
||||
}
|
||||
Reference in New Issue
Block a user