trucoshi 0.0.19 → 0.0.20

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.
@@ -172,16 +172,16 @@ function Hand(match, deck, idx) {
172
172
  play: function () {
173
173
  return (0, Play_1.PlayInstance)(hand, match.teams);
174
174
  },
175
- use: function (idx) {
175
+ use: function (idx, card) {
176
176
  var player = hand.currentPlayer;
177
177
  var round = hand.currentRound;
178
178
  if (!player || !round) {
179
179
  return null;
180
180
  }
181
- var card = player.useCard(idx);
182
- if (card) {
181
+ var playerCard = player.useCard(idx, card);
182
+ if (playerCard) {
183
183
  hand.nextTurn();
184
- return round.use((0, Deck_1.PlayedCard)(player, card));
184
+ return round.use((0, Deck_1.PlayedCard)(player, playerCard));
185
185
  }
186
186
  return null;
187
187
  },
@@ -14,8 +14,8 @@ function PlayInstance(hand, teams) {
14
14
  player: hand.currentPlayer,
15
15
  commands: [],
16
16
  rounds: hand.rounds,
17
- use: function (idx) {
18
- return hand.use(idx);
17
+ use: function (idx, card) {
18
+ return hand.use(idx, card);
19
19
  },
20
20
  say: function (command) {
21
21
  var _a;
@@ -39,11 +39,11 @@ function Player(id, teamIdx) {
39
39
  player.usedHand = [];
40
40
  return hand;
41
41
  },
42
- useCard: function (idx) {
43
- if (player.hand[idx]) {
44
- var card = player.hand.splice(idx, 1)[0];
45
- player.usedHand.push(card);
46
- return card;
42
+ useCard: function (idx, card) {
43
+ if (player.hand[idx] && player.hand[idx] === card) {
44
+ var card_1 = player.hand.splice(idx, 1)[0];
45
+ player.usedHand.push(card_1);
46
+ return card_1;
47
47
  }
48
48
  return null;
49
49
  },
@@ -28,7 +28,7 @@ export interface IPlayer {
28
28
  disable(): void;
29
29
  setReady(ready: boolean): void;
30
30
  setHand(hand: Array<ICard>): Array<ICard>;
31
- useCard(idx: number): ICard | null;
31
+ useCard(idx: number, card: ICard): ICard | null;
32
32
  }
33
33
  export interface ITeam {
34
34
  _players: Map<string, IPlayer>;
@@ -111,7 +111,7 @@ export interface IPlayInstance {
111
111
  player: IPlayer | null;
112
112
  commands: Array<ECommand> | null;
113
113
  rounds: Array<IRound> | null;
114
- use(idx: number): ICard | null;
114
+ use(idx: number, card: ICard): ICard | null;
115
115
  say(command: ECommand): ECommand | null;
116
116
  }
117
117
  export declare enum EHandState {
@@ -139,7 +139,7 @@ export interface IHand {
139
139
  finished: () => boolean;
140
140
  play(): IPlayInstance | null;
141
141
  nextTurn(): void;
142
- use(idx: number): ICard | null;
142
+ use(idx: number, card: ICard): ICard | null;
143
143
  pushRound(round: IRound): IRound;
144
144
  setTurn(turn: number): IPlayer;
145
145
  addPoints(team: 0 | 1, points: number): void;
@@ -82,6 +82,15 @@ var getTable = function (matchSessionId) {
82
82
  io.on("connection", function (_socket) {
83
83
  var socket = _socket;
84
84
  console.log("New socket", socket.id);
85
+ socket.on("disconnect", function (_reason) {
86
+ try {
87
+ var user = getUser(socket.session);
88
+ user.matchSocketIds.forEach(function (sockets) { return sockets.delete(socket.id); });
89
+ }
90
+ catch (e) {
91
+ console.error(e);
92
+ }
93
+ });
85
94
  var getTableSockets = function (table, callback) {
86
95
  return new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () {
87
96
  var sockets, _i, sockets_1, playerSocket;
@@ -158,43 +167,43 @@ io.on("connection", function (_socket) {
158
167
  callback({ success: false, error: new Error("Can't create match without an ID") });
159
168
  });
160
169
  var sendWaitingForPlay = function (table, play) { return __awaiter(void 0, void 0, void 0, function () {
170
+ var player, sock;
161
171
  return __generator(this, function (_a) {
162
- switch (_a.label) {
163
- case 0: return [4 /*yield*/, getTableSockets(table, function (playerSocket) {
164
- return new Promise(function (resolve) {
165
- var _a;
172
+ player = null;
173
+ sock = null;
174
+ return [2 /*return*/, new Promise(function (resolve, reject) {
175
+ return getTableSockets(table, function (playerSocket) { return __awaiter(void 0, void 0, void 0, function () {
176
+ var _a;
177
+ return __generator(this, function (_b) {
166
178
  if (playerSocket.session && playerSocket.session === ((_a = play.player) === null || _a === void 0 ? void 0 : _a.session)) {
179
+ sock = playerSocket.id;
180
+ player = play.player;
167
181
  playerSocket.emit(types_1.EServerEvent.WAITING_PLAY, table.getPublicMatch(playerSocket.session), function (data) {
168
182
  if (!data) {
169
- return;
183
+ return reject(new Error("Callback returned empty"));
170
184
  }
171
- var cardIdx = data.cardIdx, command = data.command;
172
- if (cardIdx !== undefined) {
173
- var playedCard = play.use(cardIdx);
185
+ var cardIdx = data.cardIdx, card = data.card, command = data.command;
186
+ if (cardIdx !== undefined && card) {
187
+ var playedCard = play.use(cardIdx, card);
174
188
  if (playedCard) {
175
189
  return resolve();
176
190
  }
177
- return console.error("ERROR", new Error("Couldnt play card"));
191
+ return reject(new Error("Invalid Card"));
178
192
  }
179
193
  if (command) {
180
194
  var saidCommand = play.say(command);
181
195
  if (saidCommand) {
182
196
  return resolve();
183
197
  }
184
- return console.error("ERROR", new Error("Couldnt say command"));
198
+ return reject(new Error("Invalid Command"));
185
199
  }
186
- return console.error("ERROR", new Error("Play callback didn't have data"));
200
+ return reject(new Error("Invalid Callback response"));
187
201
  });
188
202
  }
189
- else {
190
- resolve();
191
- }
203
+ return [2 /*return*/];
192
204
  });
193
- })];
194
- case 1:
195
- _a.sent();
196
- return [2 /*return*/];
197
- }
205
+ }); });
206
+ })];
198
207
  });
199
208
  }); };
200
209
  var startMatch = function (tableId) { return __awaiter(void 0, void 0, void 0, function () {
@@ -207,7 +216,7 @@ io.on("connection", function (_socket) {
207
216
  .startMatch()
208
217
  .onTurn(function (play) {
209
218
  return new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () {
210
- var session, user, e_1;
219
+ var session, user, e_1, e_2;
211
220
  var _a;
212
221
  return __generator(this, function (_b) {
213
222
  switch (_b.label) {
@@ -216,7 +225,7 @@ io.on("connection", function (_socket) {
216
225
  turns.set(table_1.matchSessionId, { play: play, resolve: resolve });
217
226
  _b.label = 1;
218
227
  case 1:
219
- _b.trys.push([1, 4, , 5]);
228
+ _b.trys.push([1, 7, , 8]);
220
229
  session = (_a = play.player) === null || _a === void 0 ? void 0 : _a.session;
221
230
  if (!session || !play) {
222
231
  throw new Error("Unexpected Error");
@@ -228,15 +237,23 @@ io.on("connection", function (_socket) {
228
237
  return [4 /*yield*/, emitMatchUpdate(table_1)];
229
238
  case 2:
230
239
  _b.sent();
231
- return [4 /*yield*/, sendWaitingForPlay(table_1, play)];
240
+ _b.label = 3;
232
241
  case 3:
233
- _b.sent();
234
- return [2 /*return*/, resolve()];
242
+ _b.trys.push([3, 5, , 6]);
243
+ return [4 /*yield*/, sendWaitingForPlay(table_1, play)];
235
244
  case 4:
245
+ _b.sent();
246
+ return [3 /*break*/, 6];
247
+ case 5:
236
248
  e_1 = _b.sent();
237
- console.error("ERROR", e_1);
238
- return [3 /*break*/, 5];
239
- case 5: return [2 /*return*/];
249
+ console.error(e_1);
250
+ return [2 /*return*/];
251
+ case 6: return [2 /*return*/, resolve()];
252
+ case 7:
253
+ e_2 = _b.sent();
254
+ console.error("ERROR", e_2);
255
+ return [3 /*break*/, 8];
256
+ case 8: return [2 /*return*/];
240
257
  }
241
258
  });
242
259
  }); });
@@ -267,7 +284,12 @@ io.on("connection", function (_socket) {
267
284
  }
268
285
  });
269
286
  var addSocketToUser = function (session, socketId, table) {
287
+ var _a;
270
288
  var user = getUser(session);
289
+ var socketIds = (_a = user.matchSocketIds) === null || _a === void 0 ? void 0 : _a.get(table.matchSessionId);
290
+ if (socketIds && socketIds.has(socketId)) {
291
+ return;
292
+ }
271
293
  console.log("User got new match socket", { socketId: socketId, session: session, matchId: table.matchSessionId });
272
294
  var currentMatchSockets = user.matchSocketIds.has(table.matchSessionId)
273
295
  ? user.matchSocketIds.get(table.matchSessionId)
@@ -331,7 +353,7 @@ io.on("connection", function (_socket) {
331
353
  if (!play) {
332
354
  throw new Error("Unexpected Error");
333
355
  }
334
- sendWaitingForPlay(currentTable, play).then(resolve);
356
+ sendWaitingForPlay(currentTable, play).then(resolve).catch(console.error);
335
357
  }
336
358
  catch (e) {
337
359
  console.error("ERROR", e);
@@ -1,5 +1,5 @@
1
1
  import { Socket } from "socket.io";
2
- import { ECommand } from "../lib/types";
2
+ import { ECommand, ICard } from "../lib/types";
3
3
  export declare enum EClientEvent {
4
4
  PING = "PING",
5
5
  PLAY = "PLAY",
@@ -25,9 +25,11 @@ export declare enum ETrucoshiMatchState {
25
25
  }
26
26
  export type IWaitingPlayData = {
27
27
  cardIdx: number;
28
+ card: ICard;
28
29
  command?: undefined;
29
30
  } | {
30
31
  cardIdx?: undefined;
32
+ card?: undefined;
31
33
  command: ECommand;
32
34
  };
33
35
  export type IWaitingPlayCallback = (data: IWaitingPlayData) => void | null;
@@ -68,7 +68,7 @@ var lib_1 = require("../lib");
68
68
  : "");
69
69
  randomIdx = Math.round(Math.random() * (play.player.hand.length - 1));
70
70
  handString = JSON.stringify(play.player.hand);
71
- card = play.use(randomIdx);
71
+ card = play.use(randomIdx, play.player.hand[randomIdx]);
72
72
  console.log("\n".concat(handString, "\nUsing ").concat(card));
73
73
  console.log(play.rounds && play.rounds.length
74
74
  ? play.rounds.map(function (round) {
package/dist/test/play.js CHANGED
@@ -113,14 +113,15 @@ var command = function (title, onLine) {
113
113
  var playCommand = function (play) {
114
114
  var _a, _b, _d;
115
115
  return command("".concat((_a = play.player) === null || _a === void 0 ? void 0 : _a.id, " elije una carta [").concat((_b = play.player) === null || _b === void 0 ? void 0 : _b.hand.map(function (_c, i) { return i + 1; }), "]: ").concat(JSON.stringify((_d = play.player) === null || _d === void 0 ? void 0 : _d.hand), "\n"), function (idx) { return __awaiter(void 0, void 0, void 0, function () {
116
- var playedCard, handString;
117
- var _a;
118
- return __generator(this, function (_b) {
119
- playedCard = play.use(Number(idx) - 1);
116
+ var card, playedCard, handString;
117
+ var _a, _b;
118
+ return __generator(this, function (_d) {
119
+ card = (_a = play.player) === null || _a === void 0 ? void 0 : _a.hand[Number(idx) - 1];
120
+ playedCard = play.use(Number(idx) - 1, card);
120
121
  if (!playedCard) {
121
122
  return [2 /*return*/, Promise.reject()];
122
123
  }
123
- handString = JSON.stringify((_a = play.player) === null || _a === void 0 ? void 0 : _a.hand);
124
+ handString = JSON.stringify((_b = play.player) === null || _b === void 0 ? void 0 : _b.hand);
124
125
  console.log("\n".concat(handString, "\nUsing ").concat(playedCard));
125
126
  console.log(play.rounds && play.rounds.length
126
127
  ? play.rounds.map(function (round) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trucoshi",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "main": "build/lib/trucoshi.js",
5
5
  "license": "GPL-3.0",
6
6
  "scripts": {