zerobot / server.js
sigitganteng's picture
Create server.js
953b1c9 verified
Raw
History Blame Contribute Delete
2.49 kB
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');
const app = express();
const server = http.createServer(app);
// Pengaturan CORS agar bisa diakses bebas dari file HTML/APK bos
const io = new Server(server, {
cors: { origin: "*" }
});
let activeUsers = 0;
let publicRooms = new Set();
function broadcastStats() {
io.emit('stats-update', {
activeUsers: activeUsers,
totalRooms: publicRooms.size,
rooms: Array.from(publicRooms)
});
}
io.on('connection', (socket) => {
activeUsers++;
broadcastStats();
// Pemain membuat room
socket.on('create-room', (roomCode) => {
socket.join(roomCode);
publicRooms.add(roomCode);
broadcastStats();
});
// Pemain bergabung ke room
socket.on('join-room', (roomCode) => {
const room = io.sockets.adapter.rooms.get(roomCode);
if (room && room.size === 1) {
socket.join(roomCode);
// Sembunyikan room dari lobi karena sudah penuh (2 orang)
publicRooms.delete(roomCode);
broadcastStats();
// Tentukan warna: Pembuat room = Putih ('w'), Joiner = Hitam ('b')
const clients = Array.from(room);
io.to(clients[0]).emit('game-start', 'w');
io.to(clients[1]).emit('game-start', 'b');
} else {
socket.emit('room-error', 'Room tidak ditemukan atau sudah penuh!');
}
});
// Kirim langkah catur ke lawan
socket.on('send-move', (data) => {
socket.to(data.roomCode).emit('receive-move', data.move);
});
// Pemain keluar room secara manual
socket.on('leave-room', (roomCode) => {
socket.leave(roomCode);
publicRooms.delete(roomCode);
socket.to(roomCode).emit('opponent-disconnected');
broadcastStats();
});
// Pemain disconnect (tutup aplikasi/hilang sinyal)
socket.on('disconnecting', () => {
for (const room of socket.rooms) {
if (room !== socket.id) {
socket.to(room).emit('opponent-disconnected');
publicRooms.delete(room);
}
}
});
socket.on('disconnect', () => {
activeUsers--;
broadcastStats();
});
});
// Port 7860 adalah aturan mutlak dari Hugging Face Spaces
const PORT = 7860;
server.listen(PORT, () => {
console.log(`Server CREATE BY SIGIT siap tempur di port ${PORT}`);
});