trucoshi 0.0.17 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/classes/Team.js +2 -2
- package/dist/lib/constants.d.ts +2 -1
- package/dist/lib/constants.js +3 -11
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +58 -17
- package/dist/lib/types.d.ts +7 -3
- package/dist/server/classes/MatchTable.d.ts +8 -5
- package/dist/server/classes/MatchTable.js +40 -15
- package/dist/server/index.js +26 -9
- package/package.json +29 -28
package/dist/lib/classes/Team.js
CHANGED
|
@@ -17,7 +17,7 @@ function Team(players) {
|
|
|
17
17
|
},
|
|
18
18
|
disable: function (player) {
|
|
19
19
|
var _a;
|
|
20
|
-
(_a = team._players.get(player.
|
|
20
|
+
(_a = team._players.get(player.session)) === null || _a === void 0 ? void 0 : _a.disable();
|
|
21
21
|
return team.isTeamDisabled();
|
|
22
22
|
},
|
|
23
23
|
addPoints: function (matchPoint, points) {
|
|
@@ -36,7 +36,7 @@ function Team(players) {
|
|
|
36
36
|
return team.points;
|
|
37
37
|
},
|
|
38
38
|
};
|
|
39
|
-
players.forEach(function (player) { return team._players.set(player.
|
|
39
|
+
players.forEach(function (player) { return team._players.set(player.session, player); });
|
|
40
40
|
return team;
|
|
41
41
|
}
|
|
42
42
|
exports.Team = Team;
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -41,9 +41,10 @@ export declare const CARDS: {
|
|
|
41
41
|
"4b": number;
|
|
42
42
|
"4c": number;
|
|
43
43
|
};
|
|
44
|
-
export declare const COLORS: string[];
|
|
45
44
|
export declare const TEAM_SIZE_VALUES: number[];
|
|
46
45
|
export declare enum GAME_ERROR {
|
|
46
|
+
MATCH_ALREADY_STARTED = "MATCH_ALREADY_STARTED",
|
|
47
|
+
LOBBY_IS_FULL = "LOBBY_IS_FULL",
|
|
47
48
|
UNEXPECTED_TEAM_SIZE = "UNEXPECTED_TEAM_SIZE",
|
|
48
49
|
TEAM_NOT_READY = "TEAM_NOT_READY",
|
|
49
50
|
TEAM_IS_FULL = "TEAM_IS_FULL"
|
package/dist/lib/constants.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.EnvidoCalculator = exports.GAME_ERROR = exports.TEAM_SIZE_VALUES = exports.
|
|
4
|
+
exports.EnvidoCalculator = exports.GAME_ERROR = exports.TEAM_SIZE_VALUES = exports.CARDS = void 0;
|
|
5
5
|
var types_1 = require("./types");
|
|
6
6
|
var utils_1 = require("./utils");
|
|
7
7
|
exports.CARDS = {
|
|
@@ -46,19 +46,11 @@ exports.CARDS = {
|
|
|
46
46
|
"4b": 0,
|
|
47
47
|
"4c": 0,
|
|
48
48
|
};
|
|
49
|
-
exports.COLORS = [
|
|
50
|
-
"#9b111",
|
|
51
|
-
"#17c6c6",
|
|
52
|
-
"#8c1d1d",
|
|
53
|
-
"#9f9b9b",
|
|
54
|
-
"#a5a5a5",
|
|
55
|
-
"#f5a623",
|
|
56
|
-
"#f44336",
|
|
57
|
-
"#c2185b",
|
|
58
|
-
];
|
|
59
49
|
exports.TEAM_SIZE_VALUES = [1, 2, 3];
|
|
60
50
|
var GAME_ERROR;
|
|
61
51
|
(function (GAME_ERROR) {
|
|
52
|
+
GAME_ERROR["MATCH_ALREADY_STARTED"] = "MATCH_ALREADY_STARTED";
|
|
53
|
+
GAME_ERROR["LOBBY_IS_FULL"] = "LOBBY_IS_FULL";
|
|
62
54
|
GAME_ERROR["UNEXPECTED_TEAM_SIZE"] = "UNEXPECTED_TEAM_SIZE";
|
|
63
55
|
GAME_ERROR["TEAM_NOT_READY"] = "TEAM_NOT_READY";
|
|
64
56
|
GAME_ERROR["TEAM_IS_FULL"] = "TEAM_IS_FULL";
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export interface IGameLoop {
|
|
|
8
8
|
_onWinner: IWinnerCallback;
|
|
9
9
|
teams: Array<ITeam>;
|
|
10
10
|
hands: Array<IHand>;
|
|
11
|
+
winner: ITeam | null;
|
|
11
12
|
onTurn: (callback: ITurnCallback) => IGameLoop;
|
|
12
13
|
onWinner: (callback: IWinnerCallback) => IGameLoop;
|
|
13
14
|
onTruco: (callback: ITrucoCallback) => IGameLoop;
|
package/dist/lib/index.js
CHANGED
|
@@ -49,6 +49,7 @@ var GameLoop = function (match) {
|
|
|
49
49
|
_onTurn: function () { return Promise.resolve(); },
|
|
50
50
|
_onWinner: function () { return Promise.resolve(); },
|
|
51
51
|
teams: [],
|
|
52
|
+
winner: null,
|
|
52
53
|
hands: [],
|
|
53
54
|
onTruco: function (callback) {
|
|
54
55
|
gameloop._onTruco = callback;
|
|
@@ -89,7 +90,9 @@ var GameLoop = function (match) {
|
|
|
89
90
|
_a.sent();
|
|
90
91
|
return [3 /*break*/, 1];
|
|
91
92
|
case 5: return [3 /*break*/, 1];
|
|
92
|
-
case 6:
|
|
93
|
+
case 6:
|
|
94
|
+
gameloop.winner = match.winner;
|
|
95
|
+
return [4 /*yield*/, gameloop._onWinner(match.winner, match.teams)];
|
|
93
96
|
case 7:
|
|
94
97
|
_a.sent();
|
|
95
98
|
return [2 /*return*/];
|
|
@@ -103,66 +106,104 @@ var GameLoop = function (match) {
|
|
|
103
106
|
function Lobby(teamSize) {
|
|
104
107
|
var lobby = {
|
|
105
108
|
lastTeamIdx: 1,
|
|
106
|
-
_players:
|
|
109
|
+
_players: [],
|
|
107
110
|
get players() {
|
|
108
|
-
return
|
|
111
|
+
return lobby._players.filter(function (player) { return Boolean(player && player.id); });
|
|
109
112
|
},
|
|
110
113
|
teams: [],
|
|
111
114
|
table: null,
|
|
112
115
|
maxPlayers: teamSize ? teamSize * 2 : 6,
|
|
113
116
|
full: false,
|
|
114
117
|
ready: false,
|
|
118
|
+
started: false,
|
|
115
119
|
gameLoop: undefined,
|
|
116
120
|
calculateReady: function () {
|
|
117
|
-
|
|
121
|
+
var allPlayersReady = lobby.players.reduce(function (prev, curr) { return Boolean(prev && curr && curr.ready); }, true);
|
|
122
|
+
var teamsSameSize = lobby.players.filter(function (player) { return player.teamIdx === 0; }).length ===
|
|
123
|
+
lobby.players.filter(function (player) { return player.teamIdx === 1; }).length;
|
|
124
|
+
var allTeamsComplete = lobby.players.length % 2 === 0;
|
|
125
|
+
lobby.ready = allPlayersReady && allTeamsComplete && teamsSameSize;
|
|
118
126
|
return lobby.ready;
|
|
119
127
|
},
|
|
120
128
|
calculateFull: function () {
|
|
121
|
-
lobby.full = lobby.
|
|
129
|
+
lobby.full = lobby.players.length >= lobby.maxPlayers;
|
|
122
130
|
return lobby.full;
|
|
123
131
|
},
|
|
124
132
|
addPlayer: function (id, session, teamIdx) {
|
|
133
|
+
var exists = lobby.players.find(function (player) { return player.session === session; });
|
|
134
|
+
if (exists) {
|
|
135
|
+
if (exists.teamIdx === teamIdx) {
|
|
136
|
+
return exists;
|
|
137
|
+
}
|
|
138
|
+
console.log({ session: session, ex: exists.session });
|
|
139
|
+
lobby.removePlayer(exists.session);
|
|
140
|
+
}
|
|
141
|
+
if (lobby.started) {
|
|
142
|
+
throw new Error(constants_1.GAME_ERROR.MATCH_ALREADY_STARTED);
|
|
143
|
+
}
|
|
144
|
+
if (lobby.full) {
|
|
145
|
+
throw new Error(constants_1.GAME_ERROR.LOBBY_IS_FULL);
|
|
146
|
+
}
|
|
125
147
|
var maxSize = teamSize ? teamSize : 3;
|
|
126
|
-
if (lobby.full ||
|
|
148
|
+
if (lobby.full ||
|
|
149
|
+
lobby.players.filter(function (player) { return player.teamIdx === teamIdx; }).length > maxSize) {
|
|
127
150
|
throw new Error(constants_1.GAME_ERROR.TEAM_IS_FULL);
|
|
128
151
|
}
|
|
129
152
|
var player = (0, Player_1.Player)(id, teamIdx !== undefined ? teamIdx : Number(!lobby.lastTeamIdx));
|
|
130
153
|
player.setSession(session);
|
|
131
154
|
lobby.lastTeamIdx = Number(!lobby.lastTeamIdx);
|
|
132
|
-
lobby._players.
|
|
155
|
+
for (var i = 0; i < lobby._players.length; i++) {
|
|
156
|
+
if (!lobby._players[i].id) {
|
|
157
|
+
if (player.teamIdx === 0 && i % 2 === 0) {
|
|
158
|
+
lobby._players[i] = player;
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
if (player.teamIdx === 1 && i % 2 !== 0) {
|
|
162
|
+
lobby._players[i] = player;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
133
167
|
lobby.calculateFull();
|
|
134
168
|
lobby.calculateReady();
|
|
135
169
|
return player;
|
|
136
170
|
},
|
|
137
|
-
removePlayer: function (
|
|
138
|
-
lobby._players.
|
|
139
|
-
|
|
140
|
-
|
|
171
|
+
removePlayer: function (session) {
|
|
172
|
+
var idx = lobby._players.findIndex(function (player) { return player && player.session === session; });
|
|
173
|
+
if (idx !== -1) {
|
|
174
|
+
lobby._players[idx] = {};
|
|
175
|
+
lobby.calculateFull();
|
|
176
|
+
lobby.calculateReady();
|
|
177
|
+
}
|
|
141
178
|
return lobby;
|
|
142
179
|
},
|
|
143
180
|
startMatch: function (matchPoint) {
|
|
144
181
|
if (matchPoint === void 0) { matchPoint = 9; }
|
|
145
182
|
lobby.calculateReady();
|
|
146
|
-
var
|
|
147
|
-
if (!constants_1.TEAM_SIZE_VALUES.includes(
|
|
183
|
+
var actualTeamSize = lobby.players.length / 2;
|
|
184
|
+
if (!constants_1.TEAM_SIZE_VALUES.includes(actualTeamSize)) {
|
|
148
185
|
throw new Error(constants_1.GAME_ERROR.UNEXPECTED_TEAM_SIZE);
|
|
149
186
|
}
|
|
150
187
|
if (!lobby.ready) {
|
|
151
188
|
throw new Error(constants_1.GAME_ERROR.TEAM_NOT_READY);
|
|
152
189
|
}
|
|
153
190
|
lobby.teams = [
|
|
154
|
-
(0, Team_1.Team)(lobby.players.filter(function (
|
|
155
|
-
(0, Team_1.Team)(lobby.players.filter(function (
|
|
191
|
+
(0, Team_1.Team)(lobby.players.filter(function (player) { return player.teamIdx === 0; })),
|
|
192
|
+
(0, Team_1.Team)(lobby.players.filter(function (player) { return player.teamIdx === 1; })),
|
|
156
193
|
];
|
|
157
|
-
if (lobby.teams[0].players.length !==
|
|
158
|
-
lobby.teams[1].players.length !==
|
|
194
|
+
if (lobby.teams[0].players.length !== actualTeamSize ||
|
|
195
|
+
lobby.teams[1].players.length !== actualTeamSize) {
|
|
159
196
|
throw new Error(constants_1.GAME_ERROR.UNEXPECTED_TEAM_SIZE);
|
|
160
197
|
}
|
|
161
198
|
lobby.table = (0, Table_1.Table)(lobby.players, lobby.teams);
|
|
162
199
|
lobby.gameLoop = GameLoop((0, Match_1.Match)(lobby.table, lobby.teams, matchPoint));
|
|
200
|
+
lobby.started = true;
|
|
163
201
|
return lobby.gameLoop;
|
|
164
202
|
},
|
|
165
203
|
};
|
|
204
|
+
for (var i = 0; i < lobby.maxPlayers; i++) {
|
|
205
|
+
lobby._players.push({});
|
|
206
|
+
}
|
|
166
207
|
return lobby;
|
|
167
208
|
}
|
|
168
209
|
exports.Lobby = Lobby;
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -151,20 +151,24 @@ export interface IHand {
|
|
|
151
151
|
export interface IPrivateLobby {
|
|
152
152
|
gameLoop?: IGameLoop;
|
|
153
153
|
lastTeamIdx: 0 | 1;
|
|
154
|
-
_players:
|
|
154
|
+
_players: Array<IPlayer | {
|
|
155
|
+
id?: undefined;
|
|
156
|
+
session?: undefined;
|
|
157
|
+
}>;
|
|
155
158
|
get players(): Array<IPlayer>;
|
|
156
159
|
teams: Array<ITeam>;
|
|
157
160
|
maxPlayers: number;
|
|
158
161
|
table: ITable | null;
|
|
159
|
-
ready: boolean;
|
|
160
162
|
full: boolean;
|
|
163
|
+
ready: boolean;
|
|
164
|
+
started: boolean;
|
|
161
165
|
addPlayer(id: string, session: string, teamIdx?: 0 | 1): IPlayer;
|
|
162
166
|
removePlayer(id: string): ILobby;
|
|
163
167
|
calculateReady(): boolean;
|
|
164
168
|
calculateFull(): boolean;
|
|
165
169
|
startMatch(matchPoint?: 9 | 12 | 15): IGameLoop;
|
|
166
170
|
}
|
|
167
|
-
export interface ILobby extends Pick<IPrivateLobby, "addPlayer" | "removePlayer" | "startMatch" | "ready" | "full" | "teams" | "players" | "gameLoop" | "table"> {
|
|
171
|
+
export interface ILobby extends Pick<IPrivateLobby, "addPlayer" | "removePlayer" | "startMatch" | "ready" | "full" | "started" | "teams" | "players" | "gameLoop" | "table" | "calculateReady"> {
|
|
168
172
|
}
|
|
169
173
|
export interface ITable {
|
|
170
174
|
forehandIdx: number;
|
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import { IPublicPlayer } from "../../lib/classes/Player";
|
|
2
2
|
import { IPublicTeam } from "../../lib/classes/Team";
|
|
3
|
-
import { ILobby, IPlayedCard } from "../../lib/types";
|
|
3
|
+
import { ILobby, IPlayedCard, ITeam } from "../../lib/types";
|
|
4
4
|
export interface IPublicMatch {
|
|
5
|
+
winner: ITeam | null;
|
|
5
6
|
matchSessionId: string;
|
|
6
7
|
teams: Array<IPublicTeam>;
|
|
7
8
|
players: Array<IPublicPlayer>;
|
|
9
|
+
me: IPublicPlayer;
|
|
8
10
|
rounds: IPlayedCard[][];
|
|
11
|
+
prevRounds: IPlayedCard[][] | null;
|
|
9
12
|
state: EMatchTableState;
|
|
10
13
|
}
|
|
11
14
|
export interface IMatchTable {
|
|
12
15
|
matchSessionId: string;
|
|
13
16
|
currentPlayer: IPublicPlayer | null;
|
|
14
17
|
lobby: ILobby;
|
|
15
|
-
state: EMatchTableState;
|
|
16
|
-
setState(state: EMatchTableState): void;
|
|
18
|
+
state(): EMatchTableState;
|
|
17
19
|
setCurrentPlayer(player: IPublicPlayer): void;
|
|
18
20
|
isSessionPlaying(session: string): IPublicPlayer | null;
|
|
19
21
|
getPublicMatch(session?: string): IPublicMatch;
|
|
20
22
|
}
|
|
21
23
|
export declare enum EMatchTableState {
|
|
22
24
|
UNREADY = 0,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
READY = 1,
|
|
26
|
+
STARTED = 2,
|
|
27
|
+
FINISHED = 3
|
|
25
28
|
}
|
|
26
29
|
export declare function MatchTable(matchSessionId: string, teamSize?: 1 | 2 | 3): IMatchTable;
|
|
@@ -16,41 +16,66 @@ var lib_1 = require("../../lib");
|
|
|
16
16
|
var EMatchTableState;
|
|
17
17
|
(function (EMatchTableState) {
|
|
18
18
|
EMatchTableState[EMatchTableState["UNREADY"] = 0] = "UNREADY";
|
|
19
|
-
EMatchTableState[EMatchTableState["
|
|
20
|
-
EMatchTableState[EMatchTableState["
|
|
19
|
+
EMatchTableState[EMatchTableState["READY"] = 1] = "READY";
|
|
20
|
+
EMatchTableState[EMatchTableState["STARTED"] = 2] = "STARTED";
|
|
21
|
+
EMatchTableState[EMatchTableState["FINISHED"] = 3] = "FINISHED";
|
|
21
22
|
})(EMatchTableState = exports.EMatchTableState || (exports.EMatchTableState = {}));
|
|
22
23
|
function MatchTable(matchSessionId, teamSize) {
|
|
23
24
|
var matchTable = {
|
|
24
25
|
matchSessionId: matchSessionId,
|
|
25
26
|
currentPlayer: null,
|
|
26
27
|
lobby: (0, lib_1.Lobby)(teamSize),
|
|
27
|
-
state:
|
|
28
|
-
|
|
29
|
-
matchTable.
|
|
28
|
+
state: function () {
|
|
29
|
+
var _a;
|
|
30
|
+
matchTable.lobby.calculateReady();
|
|
31
|
+
if ((_a = matchTable.lobby.gameLoop) === null || _a === void 0 ? void 0 : _a.winner) {
|
|
32
|
+
return EMatchTableState.FINISHED;
|
|
33
|
+
}
|
|
34
|
+
if (matchTable.lobby.started) {
|
|
35
|
+
return EMatchTableState.STARTED;
|
|
36
|
+
}
|
|
37
|
+
if (matchTable.lobby.ready) {
|
|
38
|
+
return EMatchTableState.READY;
|
|
39
|
+
}
|
|
40
|
+
return EMatchTableState.UNREADY;
|
|
30
41
|
},
|
|
31
42
|
setCurrentPlayer: function (player) {
|
|
32
43
|
matchTable.currentPlayer = player;
|
|
33
44
|
},
|
|
34
45
|
isSessionPlaying: function (session) {
|
|
35
46
|
var lobby = matchTable.lobby;
|
|
36
|
-
var search = lobby.players.find(function (player) { return player.session === session; });
|
|
47
|
+
var search = lobby.players.find(function (player) { return player && player.session === session; });
|
|
37
48
|
return search || null;
|
|
38
49
|
},
|
|
39
50
|
getPublicMatch: function (userSession) {
|
|
40
|
-
var _a, _b, _c;
|
|
51
|
+
var _a, _b, _c, _d, _e, _f;
|
|
41
52
|
var lobby = matchTable.lobby;
|
|
42
|
-
var
|
|
43
|
-
var
|
|
53
|
+
var winner = ((_a = lobby.gameLoop) === null || _a === void 0 ? void 0 : _a.winner) || null;
|
|
54
|
+
var lastHandIdx = (((_b = lobby.gameLoop) === null || _b === void 0 ? void 0 : _b.hands.length) || 1) - 1;
|
|
55
|
+
var rounds = (_d = (_c = lobby.gameLoop) === null || _c === void 0 ? void 0 : _c.hands[lastHandIdx]) === null || _d === void 0 ? void 0 : _d.rounds.map(function (round) { return round.cards; });
|
|
56
|
+
var prevHandIdx = lastHandIdx - 1;
|
|
57
|
+
var prevRounds = prevHandIdx !== -1
|
|
58
|
+
? (_f = (_e = lobby.gameLoop) === null || _e === void 0 ? void 0 : _e.hands[prevHandIdx]) === null || _f === void 0 ? void 0 : _f.rounds.map(function (round) { return round.cards; })
|
|
59
|
+
: null;
|
|
60
|
+
var players = lobby.players.filter(function (player) { return Boolean(player); });
|
|
61
|
+
var currentPlayerIdx = players.findIndex(function (player) { return player && player.session === userSession; });
|
|
62
|
+
var me = players[currentPlayerIdx];
|
|
63
|
+
var cut = players.slice(currentPlayerIdx, players.length);
|
|
64
|
+
var end = players.slice(0, currentPlayerIdx);
|
|
65
|
+
var publicPlayers = cut.concat(end).map(function (player) {
|
|
66
|
+
return (player === null || player === void 0 ? void 0 : player.session) === userSession
|
|
67
|
+
? player
|
|
68
|
+
: __assign(__assign({}, player), { session: undefined, hand: player === null || player === void 0 ? void 0 : player.hand.map(function () { return "xx"; }) });
|
|
69
|
+
});
|
|
44
70
|
return {
|
|
71
|
+
me: me,
|
|
72
|
+
winner: winner,
|
|
45
73
|
matchSessionId: matchTable.matchSessionId,
|
|
46
|
-
state: matchTable.state,
|
|
74
|
+
state: matchTable.state(),
|
|
47
75
|
teams: [],
|
|
48
|
-
players:
|
|
49
|
-
return player.session === userSession
|
|
50
|
-
? player
|
|
51
|
-
: __assign(__assign({}, player), { hand: player.hand.map(function () { return "xx"; }) });
|
|
52
|
-
}),
|
|
76
|
+
players: publicPlayers,
|
|
53
77
|
rounds: rounds || [[]],
|
|
78
|
+
prevRounds: prevRounds || null,
|
|
54
79
|
};
|
|
55
80
|
},
|
|
56
81
|
};
|
package/dist/server/index.js
CHANGED
|
@@ -53,11 +53,12 @@ var socket_io_1 = require("socket.io");
|
|
|
53
53
|
var MatchTable_1 = require("./classes/MatchTable");
|
|
54
54
|
var User_1 = require("./classes/User");
|
|
55
55
|
var types_1 = require("./types");
|
|
56
|
-
var PORT = 4001;
|
|
56
|
+
var PORT = process.env.NODE_PORT || 4001;
|
|
57
|
+
var ORIGIN = process.env.NODE_ORIGIN || "http://localhost:3000";
|
|
57
58
|
var httpServer = (0, http_1.createServer)();
|
|
58
59
|
var io = new socket_io_1.Server(httpServer, {
|
|
59
60
|
cors: {
|
|
60
|
-
origin:
|
|
61
|
+
origin: ORIGIN,
|
|
61
62
|
methods: ["GET", "POST"],
|
|
62
63
|
},
|
|
63
64
|
});
|
|
@@ -114,8 +115,19 @@ io.on("connection", function (_socket) {
|
|
|
114
115
|
return __generator(this, function (_a) {
|
|
115
116
|
switch (_a.label) {
|
|
116
117
|
case 0: return [4 /*yield*/, getTableSockets(table, function (playerSocket) { return __awaiter(void 0, void 0, void 0, function () {
|
|
118
|
+
var tmp, save;
|
|
117
119
|
return __generator(this, function (_a) {
|
|
118
|
-
|
|
120
|
+
tmp = table.getPublicMatch(playerSocket.session);
|
|
121
|
+
save = function () { return playerSocket.emit(types_1.EServerEvent.UPDATE_MATCH, tmp); };
|
|
122
|
+
// if (tmp.prevRounds && tmp.rounds[0].length === 0) {
|
|
123
|
+
// playerSocket.emit(EServerEvent.UPDATE_MATCH, {
|
|
124
|
+
// ...tmp,
|
|
125
|
+
// rounds: tmp.prevRounds,
|
|
126
|
+
// })
|
|
127
|
+
// setTimeout(save, 4500)
|
|
128
|
+
// return
|
|
129
|
+
// }
|
|
130
|
+
save();
|
|
119
131
|
return [2 /*return*/];
|
|
120
132
|
});
|
|
121
133
|
}); })];
|
|
@@ -143,7 +155,7 @@ io.on("connection", function (_socket) {
|
|
|
143
155
|
});
|
|
144
156
|
}
|
|
145
157
|
var table = (0, MatchTable_1.MatchTable)(socket.session);
|
|
146
|
-
table.lobby.addPlayer(user.id, socket.session);
|
|
158
|
+
table.lobby.addPlayer(user.id, socket.session, 0);
|
|
147
159
|
socket.join(socket.session);
|
|
148
160
|
addSocketToUser(socket.session, socket.id, table);
|
|
149
161
|
tables.set(socket.session, table);
|
|
@@ -202,7 +214,6 @@ io.on("connection", function (_socket) {
|
|
|
202
214
|
try {
|
|
203
215
|
table_1 = getTable(tableId);
|
|
204
216
|
if (table_1 && !table_1.lobby.gameLoop) {
|
|
205
|
-
table_1.setState(MatchTable_1.EMatchTableState.STARTED);
|
|
206
217
|
table_1.lobby
|
|
207
218
|
.startMatch()
|
|
208
219
|
.onTurn(function (play) {
|
|
@@ -277,15 +288,21 @@ io.on("connection", function (_socket) {
|
|
|
277
288
|
/**
|
|
278
289
|
* Join Match
|
|
279
290
|
*/
|
|
280
|
-
socket.on(types_1.EClientEvent.JOIN_MATCH, function (matchSessionId, callback) {
|
|
291
|
+
socket.on(types_1.EClientEvent.JOIN_MATCH, function (matchSessionId, teamIdx, callback) {
|
|
281
292
|
if (!socket.session) {
|
|
282
293
|
return callback({ success: false });
|
|
283
294
|
}
|
|
284
295
|
var user = getUser(socket.session);
|
|
285
296
|
var table = tables.get(matchSessionId);
|
|
286
|
-
if (table
|
|
297
|
+
if (table) {
|
|
298
|
+
try {
|
|
299
|
+
table.lobby.addPlayer(user.id || "satoshi", socket.session, teamIdx);
|
|
300
|
+
}
|
|
301
|
+
catch (e) {
|
|
302
|
+
console.error(e);
|
|
303
|
+
return callback({ success: false });
|
|
304
|
+
}
|
|
287
305
|
socket.join(matchSessionId);
|
|
288
|
-
table.lobby.addPlayer(user.id || "satoshi", socket.session);
|
|
289
306
|
addSocketToUser(socket.session, socket.id, table);
|
|
290
307
|
emitMatchUpdate(table);
|
|
291
308
|
return callback({ success: true, match: table.getPublicMatch(socket.session) });
|
|
@@ -348,7 +365,7 @@ io.on("connection", function (_socket) {
|
|
|
348
365
|
socket.on(types_1.EClientEvent.SET_PLAYER_READY, function (matchSessionId, ready) {
|
|
349
366
|
try {
|
|
350
367
|
var table = getTable(matchSessionId);
|
|
351
|
-
var player = table.lobby.players.find(function (player) { return player.session === socket.session; });
|
|
368
|
+
var player = table.lobby.players.find(function (player) { return player && player.session === socket.session; });
|
|
352
369
|
if (player) {
|
|
353
370
|
player.setReady(ready);
|
|
354
371
|
emitMatchUpdate(table);
|
package/package.json
CHANGED
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "trucoshi",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"main": "build/lib/trucoshi.js",
|
|
5
|
-
"license": "GPL-3.0",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"test:
|
|
11
|
-
"test:
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "trucoshi",
|
|
3
|
+
"version": "0.0.18",
|
|
4
|
+
"main": "build/lib/trucoshi.js",
|
|
5
|
+
"license": "GPL-3.0",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"start": "node ./dist/server/index.js",
|
|
8
|
+
"prepublishOnly": "yarn build",
|
|
9
|
+
"dev": "nodemon",
|
|
10
|
+
"test:autoplay": "yarn run ts-node src/test/autoplay",
|
|
11
|
+
"test:play": "yarn run ts-node src/test/play",
|
|
12
|
+
"test:legacy": "yarn run ts-node src/test/legacy",
|
|
13
|
+
"build": "yarn run rimraf ./dist && yarn run tsc --project ."
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@types/node": "^18.11.18",
|
|
17
|
+
"nodemon": "^2.0.20"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"rimraf": "^4.1.1",
|
|
24
|
+
"socket.io": "^4.5.4",
|
|
25
|
+
"ts-node": "^10.9.1",
|
|
26
|
+
"tsc": "^2.0.4",
|
|
27
|
+
"typescript": "^4.9.4"
|
|
28
|
+
}
|
|
29
|
+
}
|