56 lines
1.8 KiB
JavaScript
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);
|
|
});
|
|
});
|
|
}; |