Commit 4f461a07 authored by 18신대성's avatar 18신대성 Committed by 18류지석

게임 시작시 룸 동기화 구현

parent 9e260d8d
......@@ -34,7 +34,9 @@ GameServer.makeRoom = function()
{
roomNum: GameServer.nextRoomNumber++,
maxPlayer: 5,
nextRank: 5,
currentPlayer: [],
currentSocket: [],
currentPhase: GameServer.Phase.READY,
rateArrangePoint: 300,
......@@ -54,11 +56,17 @@ GameServer.findRoomIndex = function(roomNum)
}
GameServer.enterRoom = function(roomIdx, playerData)
{
this.playingRoom[roomIdx].currentPlayer.push(playerData);
playerData.currentRoom = this.playingRoom[roomIdx];
console.log('[' + playerData.id + '] entered to room #' + this.playingRoom[roomIdx].roomNum);
if (this.playingRoom[roomIdx].currentPlayer.length >= this.startCount) GameServer.startRoom(roomIdx);
return this.playingRoom[roomIdx];
let room = this.playingRoom[roomIdx];
let player = new Player(room.currentPlayer.length, playerData);
room.currentPlayer.push(player);
room.currentSocket.push(playerData);
playerData.playingData = player;
playerData.currentRoom = room;
console.log('[' + playerData.id + '] entered to room #' + room.roomNum);
if (room.currentPlayer.length >= this.startCount) GameServer.startRoom(roomIdx);
return room;
}
GameServer.enterEmptyRoom = function(playerData)
{
......@@ -83,20 +91,41 @@ GameServer.startRoom = function(roomIdx)
room.currentPhase = this.Phase.START;
room.maxTypingPlayer = room.currentPlayer[0];
room.minTypingPlayer = room.currentPlayer[0];
// sync roomData
let toSync =
{
roomNum: room.roomNum,
players: room.currentPlayer
};
console.log(toSync);
this.announceToRoom(roomIdx, 'syncRoomData', toSync);
console.log('[ROOM#'+room.roomNum+'] Game Start');
this.announceToRoom(roomIdx, 'phaseChange', this.Phase.START);
this.announceToRoom(roomIdx, 'changePhase', this.Phase.START);
this.announceToRoom(roomIdx, 'startGame');
// 데이터 동기화도
}
GameServer.announceToRoom = function(roomIdx, message, data = null)
GameServer.announceToRoom = function(roomIdx, _message, _data = null)
{
this.playingRoom[roomIdx].currentPlayer.forEach(element =>
this.playingRoom[roomIdx].currentSocket.forEach(function(element)
{
element.socketId.emit(message, data);
element.socketId.emit(_message, _data);
});
}
// 데이터 동기화 함수 만들기
// 동기화할것: 유저리스트(id - nickname 쌍)
class Player
{
constructor(index, playerData)
{
this.index = index;
this.id = playerData.id;
this.nickname = playerData.nickname;
this.isAlive = true;
this.rank = -1;
this.playerTyping = 0;
}
}
module.exports = GameServer;
\ No newline at end of file
var socket = io.connect();
socket.emit('idRequest');
socket.on('idSet', function(msg) // {str, num playerNum}
socket.on('setId', function(msg) // {str, num playerNum}
{
console.log(msg.str);
PlayerData.idNum = msg.num;
......@@ -11,15 +11,24 @@ socket.on('setPlayerTypingRate', function(msg) // number playerTypingRate
WordSpace.PlayerTypingRate = msg;
console.log('rate: ' + msg);
});
socket.on('phaseChange', function(msg) // number Phase
socket.on('syncRoomData', function(msg) // {num roomNum, [] players}
{
console.log('phase changed from ' + WordSpace.CurrentPhase + ' to ' + msg);
WordSpace.CurrentPhase = msg;
console.log(msg);
RoomData.roomNum = msg.roomNum;
RoomData.players = msg.players;
});
socket.on('startGame', function()
{
game.scene.start('gameScene');
});
socket.on('changePhase', function(msg) // number Phase
{
console.log('phase changed from ' + WordSpace.CurrentPhase + ' to ' + msg);
WordSpace.CurrentPhase = msg;
});
socket.on('userDisconnect', function(msg) // {num id, str nickname}
{
console.log(msg.id + ' / ' + msg.nickname + ' disconnected');
......
......@@ -27,12 +27,11 @@ io.on('connection', function(socket)
nickname: '게스트',
socketId: socket,
currentRoom: null,
playerTyping: 0
playingData: null
};
GameServer.currentPlayer.push(socket.playerData);
console.log('['+socket.playerData.id+'] client request');
socket.emit('idSet',
socket.emit('setId',
{
str: 'your number is ' + socket.playerData.id,
num: socket.playerData.id
......@@ -48,7 +47,7 @@ io.on('connection', function(socket)
socket.on('setPlayerTyping', function(msg) // number playerTyping
{
socket.playerData.playerTyping = msg;
socket.playerData.playingData.playerTyping = msg;
if (socket.playerData.currentRoom.maxTypingPlayer.playerTyping < msg)
{
socket.playerData.currentRoom.maxTypingPlayer = socket.playerData;
......@@ -84,9 +83,11 @@ io.on('connection', function(socket)
{
return element.id === socket.playerData.id;
});
if (idxToDel != -1)
if (_idxToDel != -1)
{
socket.playerData.currentRoom.currentPlayer.splice(_idxToDel, 1);
socket.playerData.currentRoom.currentPlayer[_idxToDel].isAlive = false;
socket.playerData.currentRoom.currentPlayer[_idxToDel].rank = socket.playerData.currentRoom.nextRank--;
socket.playerData.currentRoom.currentSocket.splice(_idxToDel, 1);
}
}
}
......
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