| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import { ref } from 'vue'
- import { server } from '@/api/config'
- import Websock from '@/utils/webclient/websock'
- import * as rendezvous from '@/utils/webclient/rendezvous'
- import * as message from '@/utils/webclient/message'
- import { ElMessageBox } from 'element-plus'
- import { T } from '@/utils/i18n'
- export const toWebClientLink = (row) => {
- window.open(`${rustdeskConfig.value.api_server}/webclient/#/?id=${row.id}`)
- }
- export function loadRustdeskConfig () {
- const rustdeskConfig = ref({})
- const fetchConfig = async () => {
- const res = await server().catch(_ => false)
- if (res) {
- rustdeskConfig.value = res.data
- localStorage.setItem('custom-rendezvous-server', res.data.id_server)
- localStorage.setItem('key', res.data.key)
- localStorage.setItem('api-server', res.data.api_server)
- }
- }
- if (rustdeskConfig.value.id_server === undefined || rustdeskConfig.value.key === undefined) {
- fetchConfig()
- }
- return {
- rustdeskConfig,
- }
- }
- export const { rustdeskConfig } = loadRustdeskConfig()
- export async function getPeerSlat (id) {
- const [addr, port] = rustdeskConfig.value.id_server.split(':')
- if (!addr) {
- return
- }
- const scheme = location.protocol === 'https:' ? 'wss' : 'ws'
- const ws = new Websock(`${scheme}://${addr}:21118`, true)
- await ws.open()
- const conn_type = rendezvous.ConnType.DEFAULT_CONN
- const nat_type = rendezvous.NatType.SYMMETRIC
- const punch_hole_request = rendezvous.PunchHoleRequest.fromPartial({
- id,
- licence_key: rustdeskConfig.value.key || undefined,
- conn_type,
- nat_type,
- token: undefined,
- })
- ws.sendRendezvous({ punch_hole_request })
- //rendezvous.RendezvousMessage
- const msg = (await ws.next())
- ws.close()
- console.log(new Date() + ': Got relay response', msg)
- const phr = msg.punch_hole_response
- const rr = msg.relay_response
- if (phr) {
- if (phr?.other_failure) {
- this.msgbox('error', 'Error', phr?.other_failure)
- return
- }
- if (phr.failure != rendezvous.PunchHoleResponse_Failure.UNRECOGNIZED) {
- switch (phr?.failure) {
- case rendezvous.PunchHoleResponse_Failure.ID_NOT_EXIST:
- ElMessageBox.alert(T('IDNotExist'), T('Error'))
- break
- case rendezvous.PunchHoleResponse_Failure.OFFLINE:
- ElMessageBox.alert(T('RemoteDesktopOffline'), T('Error'))
- break
- case rendezvous.PunchHoleResponse_Failure.LICENSE_MISMATCH:
- ElMessageBox.alert(T('KeyMismatch'), T('Error'))
- break
- case rendezvous.PunchHoleResponse_Failure.LICENSE_OVERUSE:
- ElMessageBox.alert(T('KeyOveruse'), T('Error'))
- break
- }
- }
- return false
- } else if (rr) {
- const uuid = rr.uuid
- console.log(new Date() + ': Connecting to relay server')
- const _ws = new Websock(`${scheme}://${addr}:21119`, false)
- await _ws.open()
- console.log(new Date() + ': Connected to relay server')
- const request_relay = rendezvous.RequestRelay.fromPartial({
- licence_key: rustdeskConfig.value.key || undefined,
- uuid,
- })
- _ws.sendRendezvous({ request_relay })
- //暂不支持pk
- const public_key = message.PublicKey.fromPartial({})
- _ws?.sendMessage({ public_key })
- // const secure = (await this.secure(pk)) || false;
- // globals.pushEvent("connection_ready", { secure, direct: false });
- while (true) {
- const msg = (await _ws?.next())
- console.log('msg', msg)
- if (msg?.hash) {
- console.log('hash msg.....', msg.hash)
- _ws.close()
- return msg.hash
- }
- }
- return false
- }
- }
|