trucoshi 0.0.17 → 0.0.19
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/Player.d.ts +1 -1
- package/dist/lib/classes/Player.js +11 -0
- 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 +8 -3
- package/dist/server/classes/MatchTable.d.ts +8 -5
- package/dist/server/classes/MatchTable.js +40 -15
- package/dist/server/index.js +14 -8
- package/package.json +29 -28
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { IPlayer } from "../types";
|
|
2
|
-
export type IPublicPlayer = Pick<IPlayer, "id" | "disabled" | "ready" | "hand" | "usedHand" | "teamIdx" | "session">;
|
|
2
|
+
export type IPublicPlayer = Pick<IPlayer, "id" | "disabled" | "ready" | "hand" | "usedHand" | "prevHand" | "teamIdx" | "session">;
|
|
3
3
|
export declare function Player(id: string, teamIdx: number): IPlayer;
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
3
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
4
|
+
if (ar || !(i in from)) {
|
|
5
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
6
|
+
ar[i] = from[i];
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
exports.Player = void 0;
|
|
4
13
|
function Player(id, teamIdx) {
|
|
@@ -9,6 +18,7 @@ function Player(id, teamIdx) {
|
|
|
9
18
|
hand: [],
|
|
10
19
|
commands: [],
|
|
11
20
|
usedHand: [],
|
|
21
|
+
prevHand: [],
|
|
12
22
|
disabled: false,
|
|
13
23
|
ready: false,
|
|
14
24
|
setSession: function (session) {
|
|
@@ -24,6 +34,7 @@ function Player(id, teamIdx) {
|
|
|
24
34
|
player.ready = ready;
|
|
25
35
|
},
|
|
26
36
|
setHand: function (hand) {
|
|
37
|
+
player.prevHand = __spreadArray([], player.usedHand, true);
|
|
27
38
|
player.hand = hand;
|
|
28
39
|
player.usedHand = [];
|
|
29
40
|
return hand;
|
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
|
@@ -20,6 +20,7 @@ export interface IPlayer {
|
|
|
20
20
|
hand: Array<ICard>;
|
|
21
21
|
commands: Array<ECommand>;
|
|
22
22
|
usedHand: Array<ICard>;
|
|
23
|
+
prevHand: Array<ICard>;
|
|
23
24
|
disabled: boolean;
|
|
24
25
|
ready: boolean;
|
|
25
26
|
setSession(session: string): void;
|
|
@@ -151,20 +152,24 @@ export interface IHand {
|
|
|
151
152
|
export interface IPrivateLobby {
|
|
152
153
|
gameLoop?: IGameLoop;
|
|
153
154
|
lastTeamIdx: 0 | 1;
|
|
154
|
-
_players:
|
|
155
|
+
_players: Array<IPlayer | {
|
|
156
|
+
id?: undefined;
|
|
157
|
+
session?: undefined;
|
|
158
|
+
}>;
|
|
155
159
|
get players(): Array<IPlayer>;
|
|
156
160
|
teams: Array<ITeam>;
|
|
157
161
|
maxPlayers: number;
|
|
158
162
|
table: ITable | null;
|
|
159
|
-
ready: boolean;
|
|
160
163
|
full: boolean;
|
|
164
|
+
ready: boolean;
|
|
165
|
+
started: boolean;
|
|
161
166
|
addPlayer(id: string, session: string, teamIdx?: 0 | 1): IPlayer;
|
|
162
167
|
removePlayer(id: string): ILobby;
|
|
163
168
|
calculateReady(): boolean;
|
|
164
169
|
calculateFull(): boolean;
|
|
165
170
|
startMatch(matchPoint?: 9 | 12 | 15): IGameLoop;
|
|
166
171
|
}
|
|
167
|
-
export interface ILobby extends Pick<IPrivateLobby, "addPlayer" | "removePlayer" | "startMatch" | "ready" | "full" | "teams" | "players" | "gameLoop" | "table"> {
|
|
172
|
+
export interface ILobby extends Pick<IPrivateLobby, "addPlayer" | "removePlayer" | "startMatch" | "ready" | "full" | "started" | "teams" | "players" | "gameLoop" | "table" | "calculateReady"> {
|
|
168
173
|
}
|
|
169
174
|
export interface ITable {
|
|
170
175
|
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 && rounds[0].length === 0
|
|
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
|
});
|
|
@@ -143,7 +144,7 @@ io.on("connection", function (_socket) {
|
|
|
143
144
|
});
|
|
144
145
|
}
|
|
145
146
|
var table = (0, MatchTable_1.MatchTable)(socket.session);
|
|
146
|
-
table.lobby.addPlayer(user.id, socket.session);
|
|
147
|
+
table.lobby.addPlayer(user.id, socket.session, 0);
|
|
147
148
|
socket.join(socket.session);
|
|
148
149
|
addSocketToUser(socket.session, socket.id, table);
|
|
149
150
|
tables.set(socket.session, table);
|
|
@@ -202,7 +203,6 @@ io.on("connection", function (_socket) {
|
|
|
202
203
|
try {
|
|
203
204
|
table_1 = getTable(tableId);
|
|
204
205
|
if (table_1 && !table_1.lobby.gameLoop) {
|
|
205
|
-
table_1.setState(MatchTable_1.EMatchTableState.STARTED);
|
|
206
206
|
table_1.lobby
|
|
207
207
|
.startMatch()
|
|
208
208
|
.onTurn(function (play) {
|
|
@@ -277,15 +277,21 @@ io.on("connection", function (_socket) {
|
|
|
277
277
|
/**
|
|
278
278
|
* Join Match
|
|
279
279
|
*/
|
|
280
|
-
socket.on(types_1.EClientEvent.JOIN_MATCH, function (matchSessionId, callback) {
|
|
280
|
+
socket.on(types_1.EClientEvent.JOIN_MATCH, function (matchSessionId, teamIdx, callback) {
|
|
281
281
|
if (!socket.session) {
|
|
282
282
|
return callback({ success: false });
|
|
283
283
|
}
|
|
284
284
|
var user = getUser(socket.session);
|
|
285
285
|
var table = tables.get(matchSessionId);
|
|
286
|
-
if (table
|
|
286
|
+
if (table) {
|
|
287
|
+
try {
|
|
288
|
+
table.lobby.addPlayer(user.id || "satoshi", socket.session, teamIdx);
|
|
289
|
+
}
|
|
290
|
+
catch (e) {
|
|
291
|
+
console.error(e);
|
|
292
|
+
return callback({ success: false });
|
|
293
|
+
}
|
|
287
294
|
socket.join(matchSessionId);
|
|
288
|
-
table.lobby.addPlayer(user.id || "satoshi", socket.session);
|
|
289
295
|
addSocketToUser(socket.session, socket.id, table);
|
|
290
296
|
emitMatchUpdate(table);
|
|
291
297
|
return callback({ success: true, match: table.getPublicMatch(socket.session) });
|
|
@@ -348,7 +354,7 @@ io.on("connection", function (_socket) {
|
|
|
348
354
|
socket.on(types_1.EClientEvent.SET_PLAYER_READY, function (matchSessionId, ready) {
|
|
349
355
|
try {
|
|
350
356
|
var table = getTable(matchSessionId);
|
|
351
|
-
var player = table.lobby.players.find(function (player) { return player.session === socket.session; });
|
|
357
|
+
var player = table.lobby.players.find(function (player) { return player && player.session === socket.session; });
|
|
352
358
|
if (player) {
|
|
353
359
|
player.setReady(ready);
|
|
354
360
|
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.19",
|
|
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
|
+
}
|