72 lines
1.6 KiB
TypeScript
72 lines
1.6 KiB
TypeScript
|
|
|
|
declare const Guacamole: any;
|
|
|
|
export function openConsole(
|
|
container: HTMLElement,
|
|
wsUrl: string,
|
|
connectData = ""
|
|
): { disconnect: () => void; setScale: (scale: number) => void; resize: (width: number, height: number) => void } {
|
|
|
|
|
|
const tunnel = new Guacamole.WebSocketTunnel(wsUrl);
|
|
const client = new Guacamole.Client(tunnel);
|
|
|
|
container.innerHTML = "";
|
|
container.appendChild(client.getDisplay().getElement());
|
|
|
|
container.tabIndex = 0;
|
|
|
|
client.connect(connectData);
|
|
|
|
const display = client.getDisplay();
|
|
let scale = 1;
|
|
|
|
|
|
|
|
|
|
|
|
const mouse = new Guacamole.Mouse(display.getElement());
|
|
mouse.onmousedown = mouse.onmouseup = mouse.onmousemove = (state: any) => {
|
|
const s = new Guacamole.Mouse.State(
|
|
state.x / scale,
|
|
state.y / scale,
|
|
state.left,
|
|
state.middle,
|
|
state.right,
|
|
state.up,
|
|
state.down
|
|
);
|
|
client.sendMouseState(s);
|
|
};
|
|
|
|
|
|
|
|
|
|
const keyboard = new Guacamole.Keyboard(container);
|
|
keyboard.onkeydown = (k: number) => client.sendKeyEvent(1, k);
|
|
keyboard.onkeyup = (k: number) => client.sendKeyEvent(0, k);
|
|
|
|
|
|
const refocus = () => container.focus();
|
|
container.addEventListener("mousedown", refocus);
|
|
container.focus();
|
|
|
|
return {
|
|
disconnect() {
|
|
container.removeEventListener("mousedown", refocus);
|
|
keyboard.onkeydown = null;
|
|
keyboard.onkeyup = null;
|
|
if (typeof keyboard.reset === "function") keyboard.reset();
|
|
client.disconnect();
|
|
},
|
|
setScale(s: number) {
|
|
scale = s;
|
|
display.scale(s);
|
|
},
|
|
resize(width: number, height: number) {
|
|
client.sendSize(width, height);
|
|
},
|
|
};
|
|
}
|