Skip to content

Commit 6befd40

Browse files
committed
버그픽스
1 parent 90c0ed2 commit 6befd40

File tree

6 files changed

+76
-30
lines changed

6 files changed

+76
-30
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"express-session": "^1.14.1",
1717
"express-socket.io-session": "^1.3.1",
1818
"fibers": "^1.0.14",
19+
"mongodb": "^2.2.10",
1920
"morgan": "~1.6.1",
2021
"serve-favicon": "~2.3.0",
2122
"socket.io": "^1.4.8"

public/resources/js/render.js

+10-6
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,18 @@ socket.on('throw yut', function(){
103103

104104
socket.on('chat team', function(data){
105105
addToTeamChat(data);
106+
teamchat.animate({ scrollTop: teamchat[0].scrollHeight}, 100);
106107
});
107108

108109
socket.on('chat all', function(data){
109110
addToAllChat(data);
111+
allchat.animate({ scrollTop: allchat[0].scrollHeight}, 100);
110112
});
111113

112114
socket.on('finished piece', function(data){
113-
115+
var piece = players[data.player].pieces[data.id];
116+
piece.finished = true;
117+
drawnPieces[piece.key].finished = true;
114118
});
115119

116120
socket.on('piece move', function(data){
@@ -140,15 +144,15 @@ socket.emit('log all');
140144
if(permission) socket.emit('log team');
141145

142146
function addThrowView(){
143-
selectView.innerHTML = '<div class="row">' +
147+
selectView[0].innerHTML = '<div class="row">' +
144148
'<button type="button" onclick="throwYut(true)" class="btn"><img src="/resources/img/yut-stick-front.svg" style="height: 100px;"></button>' +
145149
'<button type="button" onclick="throwYut(false)" class="btn"><img src="/resources/img/yut-stick-back.svg" style="height: 100px;"></button>' +
146150
'</div>';
147151
}
148152

149153
function addSelectView(data){
150154
doRender = false;
151-
var myColor = players[username].color;
155+
var myColor = players[myName].color;
152156
ctx.clearRect(0, 0, canvas.width, canvas.height);
153157
drawBoard();
154158
players[myName].pieces.forEach(function(v){
@@ -161,15 +165,15 @@ function addSelectView(data){
161165
});
162166

163167
var htmlString = '<div class="row">';
164-
data.forEach(function(v){
168+
data.data.forEach(function(v){
165169
htmlString += '<button type="button" onclick="selectPiece(' + v.id + ')" class="btn"><img src="/piece/' + myColor + '/for/' + v.id + '" style="height: 100px;"></button>'
166170
});
167171
if(data.groupnizable) htmlString += '</div><div class="row">' +
168172
'<button type="button" onclick="selectPiece(2)" class="btn">' +
169173
'<img src="/piece/' + myColor + '/for/0" style="height: 100px;">' +
170174
'<img src="/piece/' + myColor + '/for/1" style="height: 100px;"></button>'
171175

172-
selectView.innerHTML = htmlString + '</div>';
176+
selectView[0].innerHTML = htmlString + '</div>';
173177
}
174178

175179
function selectPiece(num){
@@ -180,7 +184,7 @@ function selectPiece(num){
180184

181185
function removeSelectView(){
182186
doRender = true;
183-
selectView.innerHTML = '';
187+
selectView[0].innerHTML = '';
184188
}
185189

186190
function throwYut(isFront){

src/game.js

+51-18
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,18 @@ class Game{
160160
1: []
161161
};
162162
this.sockets = {};
163+
this.status = 'wait-for-player';
164+
this.processTurn();
163165
}
164166

165167
attachPlayerAndSocket(playerName, socket){
166168
this.players[playerName].socket = socket;
169+
if(this.status === 'wait-for-player') return;
170+
if(typeof this.status === 'string') socket.emit(this.status);
171+
else{
172+
if(this.status.name !== undefined && this.status.name !== playerName) return;
173+
socket.emit(this.status.content, this.status.data);
174+
}
167175
}
168176

169177
detachPlayerAndSocket(playerName, socket){
@@ -181,7 +189,7 @@ class Game{
181189
}
182190

183191
getPieceInTile(piecePosition){
184-
this.players.map((v) => v.pieces).map((v) => {
192+
return Object.keys(this.players).map((v) => this.players[v].pieces).map((v) => {
185193
return v.filter((v) => {
186194
return !v.finished && v.pos === piecePosition;
187195
});
@@ -249,7 +257,7 @@ class Game{
249257
sleep(500);
250258
}
251259
var movementPoint = 1;
252-
while(movementPoint !== 1){
260+
while(movementPoint >= 1){
253261
this.requestThrowYut();
254262

255263
var frontStatus = 0;
@@ -280,17 +288,8 @@ class Game{
280288
this.players[k].yutStatus = undefined;
281289
});
282290

283-
var turnPlayer = Object.keys(this.players)[this.turn];
291+
var turnPlayer = this.players[Object.keys(this.players)[this.turn]];
284292
var groupnizable = (turnPlayer.getAvailablePieces().length === 2) && (turnPlayer.pieces[0].pos === turnPlayer.pieces[1].pos) && turnPlayer.pieces[0].pos !== 0;
285-
if(turnPlayer.socket !== undefined) turnPlayer.socket.emit('select piece', {
286-
data: turnPlayer.getAvailablePieces().map((v) => {
287-
return {
288-
id: v.pieceId,
289-
pos: v.pos
290-
};
291-
}),
292-
groupnizable: groupnizable
293-
});
294293

295294
var waitAmount = 0;
296295

@@ -301,15 +300,42 @@ class Game{
301300
turnPlayer.selectedPiece = turnPlayer.getAvailablePieces()[0].pieceIndex;
302301
}
303302

304-
while(turnPlayer.selectedPiece !== undefined){
303+
this.status = {
304+
name: turnPlayer,
305+
content: 'select piece',
306+
data: {
307+
data: turnPlayer.getAvailablePieces().map((v) => {
308+
return {
309+
id: v.pieceId,
310+
pos: v.pos
311+
};
312+
}),
313+
groupnizable: groupnizable
314+
}
315+
};
316+
317+
if(turnPlayer.socket !== undefined) turnPlayer.socket.emit('select piece', {
318+
data: turnPlayer.getAvailablePieces().map((v) => {
319+
return {
320+
id: v.pieceId,
321+
pos: v.pos
322+
};
323+
}),
324+
groupnizable: groupnizable
325+
});
326+
327+
var selectWait = 0;
328+
while(turnPlayer.selectedPiece === undefined){
305329
sleep(500);
306-
waitAmount++;
307-
if(waitAmount > 40){
330+
selectWait++;
331+
if(selectWait > 40){
308332
turnPlayer.selectedPiece = Math.round(Math.random());
309333
break;
310334
}
311335
}
312336

337+
this.status = 'wait-for-player';
338+
313339
if(!(turnPlayer.selectedPiece === 2 && groupnizable) && turnPlayer.pieces[turnPlayer.selectedPiece] === undefined){
314340
turnPlayer.selectedPiece = turnPlayer.getAvailablePieces()[0].pieceIndex;
315341
}
@@ -323,7 +349,8 @@ class Game{
323349
})[0];
324350

325351
var handleMovement = (nextTile, piece) => {
326-
piece.pos = nextTile.getId();
352+
piece.pos = nextTile;
353+
nextTile = this.map[nextTile];
327354
piece.movementStack.push(piece.pos);
328355
this.broadcastPacket('piece move', {
329356
player: turnPlayer.name,
@@ -342,6 +369,7 @@ class Game{
342369
return false;
343370
};
344371

372+
var currTile = this.map[piece.pos];
345373
if(movementAmount >= 1){
346374
handleMovement(currTile.getConnected(piece.movementStack.slice(-1).pop()), piece);
347375
if(group) handleMovement(currTile.getBack(piece.movementStack.slice(-1).pop()), anotherPiece);
@@ -355,7 +383,6 @@ class Game{
355383
sleep(1000);
356384
}
357385

358-
var currTile = this.map[piece.pos];
359386
if(movementAmount === -1){
360387
handleMovement(currTile.getBack(piece.movementStack.slice(-1).pop()), piece);
361388
if(group) handleMovement(currTile.getBack(piece.movementStack.slice(-1).pop()), anotherPiece);
@@ -383,7 +410,7 @@ class Game{
383410

384411
this.turn++;
385412
setTimeout(this.processTurn, 0);
386-
});
413+
}).run();
387414
}
388415

389416
getAnotherTeamPlayer(player){
@@ -400,6 +427,7 @@ class Game{
400427
}
401428

402429
requestThrowYut(){
430+
this.status = 'throw yut';
403431
this.broadcastPacketToPlayers('throw yut');
404432
while(!this.allThrowed()){
405433
sleep(500);
@@ -408,15 +436,20 @@ class Game{
408436

409437
save(){
410438
var saveData = {};
439+
var sockets = {};
411440
Object.keys(this.players).forEach((k) => {
412441
var v = this.players[k];
413442
v.pieces.forEach((v) => {
414443
v.player = undefined;
415444
});
445+
sockets[k] = this.players[k].socket;
446+
this.players[k].socket = undefined;
416447
});
448+
417449
saveData.players = JSON.stringify(this.players);
418450
Object.keys(this.players).forEach((k) => {
419451
var v = this.players[k];
452+
this.players[k].socket = sockets[k];
420453
v.pieces.forEach((v2) => {
421454
v2.player = v;
422455
});

src/network/select-piece.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class SelectPiecePacket extends PlayerPacket{
44
constructor(){
55
super('select piece', (username, socket, data) => {
66
if(game.players[username] === undefined) return;
7-
if(typeof data !== number) return;
7+
if(typeof data !== 'number') return;
88
game.handleSelect(username, data);
99
});
1010
}

src/network/throw-yut.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class ThrowYutPacket extends PlayerPacket{
44
constructor(){
55
super('throw yut', (username, socket, data) => {
66
if(game.players[username] === undefined) return;
7-
if(typeof data !== boolean) return;
7+
if(typeof data !== 'boolean') return;
88
game.handleThrow(username, data);
99
});
1010
}

src/start.js

+12-4
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,17 @@ MongoClient.connect(url, (err, client) => {
8282
new v().listenToSocket(socket);
8383
});
8484

85-
var socketId = game.addSocket(socket);
86-
socket.on('disconnect', () => {
87-
game.removeSocket(socketId);
88-
});
85+
var username = socket.handshake.session.username;
86+
if(socket.handshake.session.permission && game.players[username] !== undefined){
87+
game.attachPlayerAndSocket(username, socket);
88+
socket.on('disconnect', () => {
89+
game.detachPlayerAndSocket(username, socket);
90+
});
91+
}else{
92+
var socketId = game.addSocket(socket);
93+
socket.on('disconnect', () => {
94+
game.removeSocket(socketId);
95+
});
96+
}
8997
});
9098
});

0 commit comments

Comments
 (0)