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);
}