<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Enigo Universal Test</title>
</head>
<body>
<h1>Conducted tests</h1>
<input type="checkbox" id="disableWS" name="disableWS" />
<label for="disableWS"> Disable WebSocket Connection</label><br>
<input type="checkbox" id="KeyDown" name="KeyDown">
<label for="KeyDown"> KeyDown</label><br>
<input type="checkbox" id="KeyUp" name="KeyUp">
<label for="KeyUp"> KeyUp</label><br>
<input type="checkbox" id="MouseDown" name="MouseDown">
<label for="MouseDown"> MouseDown</label><br>
<input type="checkbox" id="MouseUp" name="MouseUp">
<label for="MouseUp"> MouseUp</label><br>
<input type="checkbox" id="MouseMove" name="MouseMove">
<label for="MouseMove"> MouseMove</label><br>
<input type="checkbox" id="MouseScroll" name="MouseScroll">
<label for="MouseScroll"> MouseScroll</label><br>
<textarea id="text" name="text" rows="20" cols="50"></textarea><br>
<script>
let ignoreKeyEvents = false; let ws; let messageQueue = []; let reconnectInterval = 1000;
window.onload = () => {
const textArea = document.getElementById('text');
textArea.focus();
if (!document.getElementById('disableWS').checked) {
initializeWebSocket();
}
};
document.getElementById('disableWS').addEventListener('change', function () {
if (!this.checked) {
if (!ws || ws.readyState !== WebSocket.OPEN) {
console.log('WebSocket re-enabled via checkbox. Attempting to reconnect...');
initializeWebSocket();
}
}
});
document.addEventListener('focusin', (event) => {
const textArea = document.getElementById('text');
if (event.target !== textArea) {
event.preventDefault();
textArea.focus();
}
});
function initializeWebSocket() {
console.log('Attempting to connect WebSocket...');
ws = new WebSocket('ws://localhost:26541');
ws.addEventListener('open', () => {
console.log('WebSocket connected');
flushMessageQueue(); });
ws.addEventListener('close', () => {
console.warn('WebSocket disconnected. Retrying...');
scheduleReconnect();
});
ws.addEventListener('error', (error) => {
console.error('WebSocket error:', error);
scheduleReconnect();
});
ws.addEventListener('message', (event) => {
console.log('Received message:', event.data);
if (event.data === 'ClearText') {
document.getElementById('text').value = '';
document.getElementById('text').focus();
ignoreKeyEvents = true;
sendMessage(`ReadyForText`);
}
if (event.data === 'GetText') {
const text = document.getElementById('text').value;
sendMessage(`Text(\"${text}\")`);
ignoreKeyEvents = false;
}
});
}
function scheduleReconnect() {
if (document.getElementById('disableWS').checked) {
console.log('WebSocket connection is disabled by checkbox.');
return;
}
setTimeout(() => {
if (!ws || ws.readyState !== WebSocket.OPEN) {
initializeWebSocket();
}
}, 1000); }
function sendMessage(message) {
if (ws && ws.readyState === WebSocket.OPEN) {
ws.send(message);
} else {
messageQueue.push(message); }
}
function flushMessageQueue() {
while (messageQueue.length > 0) {
const message = messageQueue.shift();
ws.send(message);
}
}
const handleEvent = (eventType, data = '') => {
const message = `${eventType}${data}`;
console.log(message);
document.getElementById(eventType).checked = true;
sendMessage(message);
};
document.addEventListener('keydown', (event) => {
if (!ignoreKeyEvents) {
let debug_data = `key: ${event.key}, which: ${event.which}, charCode: ${event.charCode}, shiftKey: ${event.shiftKey}, ctrlKey: ${event.ctrlKey}, altKey: ${event.altKey}, metaKey: ${event.metaKey}, repeat: ${event.repeat}, isComposing: ${event.isComposing}, location: ${event.location}, bubbles: ${event.bubbles}, cancelable: ${event.cancelable}, defaultPrevented: ${event.defaultPrevented}, composed: ${event.composed}`;
handleEvent('KeyDown', `(\"${event.code}\", \"${debug_data}\")`);
}
});
document.addEventListener('keyup', (event) => {
if (!ignoreKeyEvents) {
let debug_data = `key: ${event.key}, which: ${event.which}, charCode: ${event.charCode}, shiftKey: ${event.shiftKey}, ctrlKey: ${event.ctrlKey}, altKey: ${event.altKey}, metaKey: ${event.metaKey}, repeat: ${event.repeat}, isComposing: ${event.isComposing}, location: ${event.location}, bubbles: ${event.bubbles}, cancelable: ${event.cancelable}, defaultPrevented: ${event.defaultPrevented}, composed: ${event.composed}`;
handleEvent('KeyUp', `(\"${event.code}\", \"${debug_data}\")`);
}
});
document.addEventListener('mousedown', (event) => handleEvent('MouseDown', `(${event.button})`));
document.addEventListener('mouseup', (event) => handleEvent('MouseUp', `(${event.button})`));
document.addEventListener('mousemove', (event) => handleEvent('MouseMove', `((${event.movementX},${event.movementY}),(${event.screenX},${event.screenY}))`));
document.addEventListener('wheel', (event) => handleEvent('MouseScroll', `(${event.deltaX},${event.deltaY})`));
</script>
</body>
</html>