mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-09 03:36:48 +00:00
refactor(console): add RFB connection state guard and micro-delay for key combinations
This commit is contained in:
parent
59255eda5e
commit
57f9f55db7
2 changed files with 41 additions and 17 deletions
|
|
@ -88,26 +88,38 @@
|
|||
{ keysym: KeyTable.XK_F12, code: 'F12' }
|
||||
];
|
||||
|
||||
function isConnected() {
|
||||
return UI.rfb && (!UI.rfb._rfbConnectionState || UI.rfb._rfbConnectionState === 'connected');
|
||||
}
|
||||
|
||||
function sendSingleKey(keysym, code) {
|
||||
if (!UI.rfb) { return false; }
|
||||
if (!isConnected()) { return false; }
|
||||
UI.rfb.sendKey(keysym, code, true);
|
||||
UI.rfb.sendKey(keysym, code, false);
|
||||
setTimeout(() => {
|
||||
if (isConnected()) {
|
||||
UI.rfb.sendKey(keysym, code, false);
|
||||
}
|
||||
}, 20);
|
||||
return false;
|
||||
}
|
||||
|
||||
function sendKeyCombo(keys) {
|
||||
if (!UI.rfb) { return false; }
|
||||
if (!isConnected()) { return false; }
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
UI.rfb.sendKey(keys[i].keysym, keys[i].code, true);
|
||||
}
|
||||
for (let i = keys.length - 1; i >= 0; i--) {
|
||||
UI.rfb.sendKey(keys[i].keysym, keys[i].code, false);
|
||||
}
|
||||
setTimeout(() => {
|
||||
if (isConnected()) {
|
||||
for (let i = keys.length - 1; i >= 0; i--) {
|
||||
UI.rfb.sendKey(keys[i].keysym, keys[i].code, false);
|
||||
}
|
||||
}
|
||||
}, 20);
|
||||
return false;
|
||||
}
|
||||
|
||||
function sendCtrlAltDel() {
|
||||
if (UI.rfb && typeof UI.rfb.sendCtrlAltDel === 'function') {
|
||||
if (isConnected() && typeof UI.rfb.sendCtrlAltDel === 'function') {
|
||||
UI.rfb.sendCtrlAltDel();
|
||||
} else {
|
||||
sendKeyCombo([
|
||||
|
|
|
|||
|
|
@ -67,21 +67,33 @@
|
|||
desktopName = e.detail.name;
|
||||
}
|
||||
|
||||
function isConnected() {
|
||||
return rfb && (!rfb._rfbConnectionState || rfb._rfbConnectionState === 'connected');
|
||||
}
|
||||
|
||||
function sendSingleKey(keysym, code) {
|
||||
if (!rfb) { return false; }
|
||||
if (!isConnected()) { return false; }
|
||||
rfb.sendKey(keysym, code, true);
|
||||
rfb.sendKey(keysym, code, false);
|
||||
setTimeout(() => {
|
||||
if (isConnected()) {
|
||||
rfb.sendKey(keysym, code, false);
|
||||
}
|
||||
}, 20);
|
||||
return false;
|
||||
}
|
||||
|
||||
function sendKeyCombo(keys) {
|
||||
if (!rfb) { return false; }
|
||||
if (!isConnected()) { return false; }
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
rfb.sendKey(keys[i].keysym, keys[i].code, true);
|
||||
}
|
||||
for (let i = keys.length - 1; i >= 0; i--) {
|
||||
rfb.sendKey(keys[i].keysym, keys[i].code, false);
|
||||
}
|
||||
setTimeout(() => {
|
||||
if (isConnected()) {
|
||||
for (let i = keys.length - 1; i >= 0; i--) {
|
||||
rfb.sendKey(keys[i].keysym, keys[i].code, false);
|
||||
}
|
||||
}
|
||||
}, 20);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -89,7 +101,7 @@
|
|||
// before they get a chance to be intercepted by the browser,
|
||||
// we provide a way to emulate this key sequence.
|
||||
function sendCtrlAltDel() {
|
||||
if (rfb && typeof rfb.sendCtrlAltDel === 'function') {
|
||||
if (isConnected() && typeof rfb.sendCtrlAltDel === 'function') {
|
||||
rfb.sendCtrlAltDel();
|
||||
} else {
|
||||
sendKeyCombo([
|
||||
|
|
@ -165,15 +177,15 @@
|
|||
});
|
||||
|
||||
function machineShutdown() {
|
||||
if (rfb) { rfb.machineShutdown(); }
|
||||
if (isConnected()) { rfb.machineShutdown(); }
|
||||
return false;
|
||||
}
|
||||
function machineReboot() {
|
||||
if (rfb) { rfb.machineReboot(); }
|
||||
if (isConnected()) { rfb.machineReboot(); }
|
||||
return false;
|
||||
}
|
||||
function machineReset() {
|
||||
if (rfb) { rfb.machineReset(); }
|
||||
if (isConnected()) { rfb.machineReset(); }
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue