Add qemu monitor (and fix some atrocious indenting)

This commit is contained in:
elijahr2411 2023-01-27 21:41:57 -05:00
parent 9677ce9886
commit 08ca372cf9
3 changed files with 48 additions and 4 deletions

24
dist/index.html vendored
View file

@ -10,6 +10,23 @@
<link rel="icon" href="favicon.ico">
</head>
<body class="bg-dark">
<div class="modal fade" id="qemuMonitorModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content bg-dark text-light">
<div class="modal-header">
<h5 class="modal-title">QEMU Monitor</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<textarea id="qemuMonitorOutput" readonly="" class="form-control bg-dark text-light"></textarea>
<div class="input-group">
<input type="text" id="qemuMonitorInput" class="form-control bg-dark text-light" placeholder="Command"/>
<button class="btn btn-outline-secondary btn-primary text-light" type="button" id="qemuMonitorSendBtn">Send</button>
</div>
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="#">CollabVM</a>
@ -27,13 +44,13 @@
<li class="nav-item">
<a href="https://computernewb.com/collab-vm/rules" class="nav-link">Rules</a>
</li>
<li class="nav-item">
<li class="nav-item">
<a href="https://discord.gg/a4kqb4mGyX" class="nav-link">Discord</a>
</li>
<li class="nav-item">
<li class="nav-item">
<a href="https://reddit.com/r/collabvm" class="nav-link">Subreddit</a>
</li>
<li class="nav-item">
<li class="nav-item">
<a href="https://computernewb.com/collab-vm/user-vm" class="nav-link">UserVM</a>
</li>
</ul>
@ -62,6 +79,7 @@
<button class="btn btn-secondary" id="clearQueueBtn">Clear Turn Queue</button>
<button class="btn btn-secondary" id="bypassTurnBtn">Bypass Turn</button>
<button class="btn btn-secondary" id="endTurnBtn">End Turn</button>
<button class="btn btn-secondary" id="qemuMonitorBtn" data-bs-toggle="modal" data-bs-target="#qemuMonitorModal">QEMU Monitor</button>
</div>
</div>
<div class="row">

5
dist/style.css vendored
View file

@ -70,6 +70,11 @@
#staffbtns {
display: none;
}
#staffbtns > button {
display: none;
}
#qemuMonitorOutput {
height: 180px;
}

View file

@ -23,6 +23,8 @@ const buttons = {
clearQueue: window.document.getElementById("clearQueueBtn"),
bypassTurn: window.document.getElementById("bypassTurnBtn"),
endTurn: window.document.getElementById("endTurnBtn"),
qemuMonitor: window.document.getElementById("qemuMonitorBtn"),
qemuMonitorSend: window.document.getElementById("qemuMonitorSendBtn"),
}
var hasTurn = false;
var vm;
@ -47,6 +49,8 @@ const voteyeslabel = document.getElementById("voteYesLabel");
const votenolabel = document.getElementById("voteNoLabel");
const votetime = document.getElementById("votetime");
const staffbtns = document.getElementById("staffbtns");
const qemuMonitorInput = document.getElementById("qemuMonitorInput");
const qemuMonitorOutput = document.getElementById("qemuMonitorOutput");
// needed to scroll to bottom
const chatListDiv = document.querySelector(".chat-table");
@ -325,13 +329,18 @@ class CollabVMClient {
buttons.clearQueue.style.display = "inline-block";
buttons.endTurn.style.display = "inline-block";
}
if (rank === 2) buttons.qemuMonitor.style.display = "inline-block";
users.forEach((u) => userModOptions(u.username, u.element, u.element.children[0]));
break;
case "19":
// Got IP
this.eventemitter.emit('ip', {username: msgArr[2], ip: msgArr[3]});
break;
case "2":
// QEMU output
qemuMonitorOutput.innerHTML += `> ${msgArr[2]}\n`;
qemuMonitorOutput.scrollTop = qemuMonitorOutput.scrollHeight;
break;
}
break;
default:
@ -434,6 +443,7 @@ class CollabVMClient {
this.socket.send(guacutils.encode(["admin", "19", user]));
});
},
qemuMonitor: (cmd) => this.socket.send(guacutils.encode(["admin", "5", this.node, cmd])),
}
}
function multicollab(url) {
@ -601,6 +611,17 @@ buttons.reboot.addEventListener('click', () => vm.admin.reboot());
buttons.clearQueue.addEventListener('click', () => vm.admin.clearQueue());
buttons.bypassTurn.addEventListener('click', () => vm.admin.bypassTurn());
buttons.endTurn.addEventListener('click', () => vm.admin.endTurn(users[0]));
// QEMU Monitor Shit
function sendQEMUCommand() {
if (!qemuMonitorInput.value) return;
vm.admin.qemuMonitor(qemuMonitorInput.value);
qemuMonitorInput.value = "";
}
qemuMonitorInput.addEventListener('keypress', (e) => {
if (e.key === "Enter") sendQEMUCommand();
});
buttons.qemuMonitorSend.addEventListener('click', () => sendQEMUCommand());
// Login
var usernameClick = false;
usernameSpan.addEventListener('click', () => {