Commit a8aa3e7f authored by 18신대성's avatar 18신대성 Committed by 16이지혜

게임룸 만들고 접속하게 만듬

parent dadf43ce
...@@ -48,9 +48,9 @@ function update() ...@@ -48,9 +48,9 @@ function update()
// client side // client side
var socket = io.connect(); var socket = io.connect();
socket.emit('idRequest');
socket.on('idSet', function(msg) // {str, num} socket.on('idSet', function(msg) // {str, num}
{ {
console.log(msg.str); console.log(msg.str);
this.playerNum = msg.num; this.playerNum = msg.num;
}); });
socket.emit('idRequest'); \ No newline at end of file
\ No newline at end of file
...@@ -18,29 +18,66 @@ server.listen(80, function() { ...@@ -18,29 +18,66 @@ server.listen(80, function() {
var GameServer = GameServer || {}; var GameServer = GameServer || {};
GameServer.waitingRoom = []; GameServer.currentPlayer = [];
GameServer.playingRoom = [];
GameServer.getPlayerNumber = function() GameServer.getPlayerNumber = function()
{ {
do do
{ {
var num = Math.floor(Math.random() * 1000 + 1); var num = Math.floor(Math.random() * 1000 + 1);
if (!this.waitingRoom.includes(num)) return num; if (!this.currentPlayer.includes(num)) return num;
} while (true) } while (true)
} }
GameServer.findPlayer = function(playerId) GameServer.findPlayer = function(playerId)
{ {
var idx = this.waitingRoom.findIndex(function(element) var idx = this.currentPlayer.findIndex(function(element)
{ {
return element.id === socket; return element.id === socket;
}); });
if (idx != -1) return this.waitingRoom[idx]; if (idx != -1) return this.currentPlayer[idx];
else else
{ {
console.log('[ERR] wrong playerId to find'); console.log('[ERR] wrong playerId to find');
return null; return null;
} }
} }
GameServer.nextRoomNumber = 0;
GameServer.makeRoom = function()
{
var roomOption =
{
roomNum: GameServer.nextRoomNumber++,
maxPlayer: 25,
currentPlayer: []
}
this.playingRoom.push(roomOption);
console.log('new room made, roomCount: ' + this.playingRoom.length);
return this.playingRoom.length - 1;
}
GameServer.enterRoom = function(roomIdx, playerData)
{
this.playingRoom[roomIdx].currentPlayer.push(playerData);
console.log(playerData.id + ' entered to room# ' + this.playingRoom[roomIdx].roomNum);
return this.playingRoom[roomIdx];
}
GameServer.enterEmptyRoom = function(playerData)
{
var toEnter = -1;
for (let i = 0; i < this.playingRoom.length; i++)
{
if (this.playingRoom[i].currentPlayer.length < this.playingRoom[i].maxPlayer)
{
toEnter = i;
break;
}
}
if (toEnter === -1)
{
toEnter = this.makeRoom();
}
return this.enterRoom(toEnter, playerData);
}
// 클라이언트 요청에 대한 콜백 정의 // 클라이언트 요청에 대한 콜백 정의
io.on('connection', function(socket) io.on('connection', function(socket)
...@@ -49,28 +86,30 @@ io.on('connection', function(socket) ...@@ -49,28 +86,30 @@ io.on('connection', function(socket)
var playerSocket = var playerSocket =
{ {
id: GameServer.getPlayerNumber(), id: GameServer.getPlayerNumber(),
nickname: '게스트',
socketId: socket socketId: socket
} }
GameServer.waitingRoom.push(playerSocket); GameServer.currentPlayer.push(playerSocket);
console.log('client request, id: ' + playerSocket.id); console.log('client request, id: ' + playerSocket.id);
socket.emit('idSet', socket.emit('idSet',
{ {
str: 'your number is ' + playerSocket.id, str: 'your number is ' + playerSocket.id + ', your nickname is ' + playerSocket.nickname,
num: playerSocket.id num: playerSocket.id
}); });
GameServer.enterEmptyRoom(playerSocket);
}); });
socket.on('disconnect', function(reason) socket.on('disconnect', function(reason)
{ {
var idxToDel = GameServer.waitingRoom.findIndex( function(element) var idxToDel = GameServer.currentPlayer.findIndex(function(element)
{ {
return element.socketId === socket; return element.socketId === socket;
} }
); );
if (idxToDel != -1) if (idxToDel != -1)
{ {
console.log('client disconnected, id: ' + GameServer.waitingRoom[idxToDel].id + ', reason: ' + reason); console.log('client disconnected, id: ' + GameServer.currentPlayer[idxToDel].id + ', reason: ' + reason);
GameServer.waitingRoom.splice(idxToDel, 1); GameServer.currentPlayer.splice(idxToDel, 1);
} }
}); });
}); });
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment