File size: 2,958 Bytes
b432d2b ea2968b b432d2b ea2968b b432d2b ea2968b b432d2b ea2968b b432d2b ea2968b b432d2b ea2968b b432d2b ea2968b b432d2b ea2968b eb140fb ea2968b eb140fb ea2968b b432d2b ea2968b b432d2b ea2968b b432d2b ea2968b b432d2b ea2968b eb140fb ea2968b c7a1be8 b432d2b ea2968b b432d2b ea2968b b432d2b ea2968b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
const socket = io();
let userId = '';
let isAdmin = false;
// Login flow
document.getElementById('login-btn').addEventListener('click', () => {
const username = document.getElementById('username').value.trim();
const password = document.getElementById('password').value.trim();
socket.emit('login', { username, password });
});
socket.on('loginResponse', (data) => {
if (data.success) {
userId = data.userId;
isAdmin = data.isAdmin;
document.getElementById('login-screen').style.display = 'none';
document.getElementById('panel').style.display = 'block';
document.getElementById('userId-display').textContent = userId;
if (isAdmin) {
document.getElementById('admin-panel').style.display = 'block';
}
} else {
document.getElementById('login-message').innerText = data.message;
}
});
// Start session
document.getElementById('start-btn').addEventListener('click', () => {
if (!userId) return;
socket.emit('start', userId);
document.getElementById('chat-container').style.display = 'block';
startKeepAlive();
});
function appendMessage(msg) {
const div = document.createElement('div');
div.innerText = msg;
document.getElementById('messages').appendChild(div);
document.getElementById('messages').scrollTop = document.getElementById('messages').scrollHeight;
}
// Command flow
document.getElementById('send-btn').addEventListener('click', () => {
const message = document.getElementById('input').value.trim();
if (!message) return;
appendMessage('🟢 You: ' + message);
socket.emit('command', { userId, message });
document.getElementById('input').value = '';
});
socket.on('message', (msg) => {
// If it’s JSON for space usage, parse and format
try {
const obj = JSON.parse(msg);
if (obj.type === 'spaceUsage') {
appendMessage(`📦 Storage Used: ${obj.usage}`);
return;
}
} catch (e) {}
appendMessage('🔵 ' + msg);
});
// Admin: Get all users
document.getElementById('get-users-btn').addEventListener('click', () => {
socket.emit('adminGetUsers');
});
socket.on('adminUserList', (data) => {
const container = document.getElementById('user-list');
container.innerHTML = '';
data.users.forEach((u) => {
const div = document.createElement('div');
div.innerText = `${u.username} (${u.id}) - Admin: ${u.isAdmin ? 'Yes' : 'No'} - Password: ${u.password}`;
container.appendChild(div);
});
});
// Admin: Get banned users
document.getElementById('get-banned-btn').addEventListener('click', () => {
socket.emit('adminGetBanned');
});
socket.on('adminBannedList', (banned) => {
const container = document.getElementById('banned-list');
container.innerHTML = '';
banned.forEach((id) => {
const div = document.createElement('div');
div.innerText = id;
container.appendChild(div);
});
});
// Keep-alive ping every 10s
function startKeepAlive() {
setInterval(() => {
socket.emit('ping');
}, 10000);
} |