mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-17 10:00:46 -04:00
did stuff
This commit is contained in:
@@ -2,5 +2,6 @@ requireModule('globals/socket');
|
||||
requireModule('helpers/formatters');
|
||||
requireModule('services/state');
|
||||
requireModule('services/alertFeed');
|
||||
requireModule('services/authControls');
|
||||
requireModule('services/roverUI');
|
||||
requireModule('services/driveControls');
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
registerModule('services/authControls', (require, exports) => {
|
||||
const { socket } = require('globals/socket');
|
||||
const state = require('services/state');
|
||||
|
||||
const usernameInput = document.getElementById('username');
|
||||
const passwordInput = document.getElementById('password');
|
||||
const loginBtn = document.getElementById('loginBtn');
|
||||
const roleStatus = document.getElementById('roleStatus');
|
||||
const spectatorBtn = document.getElementById('spectatorBtn');
|
||||
|
||||
function updateRole(role) {
|
||||
if (roleStatus) {
|
||||
roleStatus.textContent = `Role: ${role}`;
|
||||
}
|
||||
state.setRole(role);
|
||||
}
|
||||
|
||||
loginBtn?.addEventListener('click', () => {
|
||||
const username = usernameInput.value.trim();
|
||||
const password = passwordInput.value;
|
||||
socket.emit('auth:login', { username, password }, (resp = {}) => {
|
||||
if (!resp.success) {
|
||||
alert(resp.error || 'Login failed');
|
||||
} else {
|
||||
updateRole(resp.role);
|
||||
}
|
||||
passwordInput.value = '';
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('auth:role', ({ role }) => {
|
||||
updateRole(role);
|
||||
});
|
||||
// initialize from default role
|
||||
updateRole(state.getRole());
|
||||
|
||||
spectatorBtn?.addEventListener('click', () => {
|
||||
socket.emit('role:set', { role: 'spectator' });
|
||||
updateRole('spectator');
|
||||
});
|
||||
});
|
||||
@@ -8,9 +8,16 @@ registerModule('services/roverUI', (require, exports) => {
|
||||
const sensorOutput = document.getElementById('sensorOutput');
|
||||
const requestBtn = document.getElementById('requestControl');
|
||||
const lockBtn = document.getElementById('lockToggle');
|
||||
const activeDriverEl = document.getElementById('activeDriver');
|
||||
|
||||
let roster = [];
|
||||
|
||||
state.onRoleChange((role) => {
|
||||
const isAdmin = role === 'admin' || role === 'lockdown';
|
||||
if (requestBtn) requestBtn.disabled = !isAdmin;
|
||||
if (lockBtn) lockBtn.disabled = !isAdmin;
|
||||
});
|
||||
|
||||
socket.on('rovers', (list) => {
|
||||
roster = list;
|
||||
roverSelect.innerHTML = '';
|
||||
@@ -48,6 +55,13 @@ registerModule('services/roverUI', (require, exports) => {
|
||||
sensorOutput.textContent = lines.join('\n');
|
||||
});
|
||||
|
||||
socket.on('activeDriver', ({ roverId, socketId }) => {
|
||||
if (roverId !== state.getSelected()) return;
|
||||
if (activeDriverEl) {
|
||||
activeDriverEl.textContent = `Active driver: ${socketId || 'none'}`;
|
||||
}
|
||||
});
|
||||
|
||||
requestBtn?.addEventListener('click', () => {
|
||||
socket.emit('requestControl', { roverId: state.getSelected() });
|
||||
});
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
registerModule('services/state', (require, exports) => {
|
||||
let selectedRover = null;
|
||||
let role = 'user';
|
||||
const roleListeners = new Set();
|
||||
|
||||
function setSelected(roverId) {
|
||||
selectedRover = roverId;
|
||||
@@ -9,6 +11,24 @@ registerModule('services/state', (require, exports) => {
|
||||
return selectedRover;
|
||||
}
|
||||
|
||||
function setRole(nextRole) {
|
||||
role = nextRole;
|
||||
roleListeners.forEach((cb) => cb(role));
|
||||
}
|
||||
|
||||
function getRole() {
|
||||
return role;
|
||||
}
|
||||
|
||||
function onRoleChange(cb) {
|
||||
roleListeners.add(cb);
|
||||
cb(role);
|
||||
return () => roleListeners.delete(cb);
|
||||
}
|
||||
|
||||
exports.setSelected = setSelected;
|
||||
exports.getSelected = getSelected;
|
||||
exports.setRole = setRole;
|
||||
exports.getRole = getRole;
|
||||
exports.onRoleChange = onRoleChange;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user