56 lines
1.8 KiB
JavaScript

const {v4: uuidv4} = require('uuid');
module.exports = function(server) {
const io = require('socket.io')(server, {
transports: ['websocket']
});
// 방 정보
var rooms = [];
var socketRooms = new Map();
io.on('connection', function(socket) {
console.log('Connected: ' + socket.id);
if (rooms.length > 0) {
var roomId = rooms.shift();
socket.join(roomId)
socket.emit('joinRoom', { roomId: roomId });
socket.to(roomId).emit('startGame', { roomId: socket.id });
socketRooms.set(socket.id, roomId);
} else {
var roomId = uuidv4();
socket.join(roomId);
socket.emit('createRoom', { room: roomId });
rooms.push(roomId);
socketRooms.set(socket.id, roomId);
}
socket.on('leaveRoom', function(roomData) {
socket.leave(roomData.roomId);
socket.emit('exitRoom');
socket.to(roomData.roomId).emit('endGame');
// 방 만든 후 혼자 들어갔다가 나갈 때 rooms에서 방 삭제
var roomId = socketRooms.get(socket.id);
const roomIdx = rooms.indexOf(roomId);
if (roomIdx !== -1) {
rooms.splice(roomIdx, 1);
console.log('Room removed:', roomId);
}
socketRooms.delete(socket.id);
});
socket.on('doPlayer', function(moveData) {
const roomId = moveData.roomId;
const position = moveData.position;
socket.to(roomId).emit('doOpponent', { position: position });
});
socket.on('disconnect', function(reason) {
console.log('Disconnected: ' + socket.id + ', Reason: ' + reason);
});
});
};