Add remote desktop viewer

- Create viewer.html with canvas-based video display
- Implement protobuf parsing for VideoFrame/RawFrame
- Add zstd decompression using fzstd library
- Convert BGRA to RGBA for canvas rendering
- Add mouse event capture and encoding
- Add keyboard event capture and encoding
- Add Ctrl+Alt+Del special key support
- Add fullscreen toggle
- Update dashboard to open viewer in new window
- Auto-reconnect on connection loss

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-28 17:40:29 -07:00
parent cc35d1112f
commit 3c2e0708ef
2 changed files with 690 additions and 4 deletions

View File

@@ -630,8 +630,9 @@
}
function joinSession(sessionId) {
// TODO: Open viewer in new window
alert("Viewer not yet implemented.\\n\\nSession ID: " + sessionId + "\\n\\nWebSocket: wss://connect.azcomputerguru.com/ws/viewer?session_id=" + sessionId);
// Open viewer in new window
const viewerUrl = "/viewer.html?session_id=" + sessionId;
window.open(viewerUrl, "viewer_" + sessionId, "width=1280,height=800,menubar=no,toolbar=no,location=no,status=no");
}
// Initial load and auto-refresh every 3 seconds
@@ -716,8 +717,9 @@
}
function connectToMachine(sessionId) {
// TODO: Open viewer in new window
alert("Viewer not yet implemented.\\n\\nSession ID: " + sessionId + "\\n\\nWebSocket: wss://connect.azcomputerguru.com/ws/viewer?session_id=" + sessionId);
// Open viewer in new window
const viewerUrl = "/viewer.html?session_id=" + sessionId;
window.open(viewerUrl, "viewer_" + sessionId, "width=1280,height=800,menubar=no,toolbar=no,location=no,status=no");
}
async function disconnectMachine(sessionId, machineName) {