Skip to content

Commit b620839

Browse files
committed
converted tic-tac-toe to single room mode
1 parent 9b6c37e commit b620839

15 files changed

Lines changed: 329 additions & 288 deletions

File tree

common/config/rush/pnpm-lock.yaml

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/monopoly/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"@prisel/monopoly-common": "^0.0.0",
3333
"@prisel/server": "^0.1.3",
3434
"@prisel/protos": "^0.1.3",
35-
"@prisel/state": "~0.0.13",
35+
"@prisel/state": "~0.0.14",
3636
"lowdb": "3.0.0"
3737
},
3838
"devDependencies": {

packages/server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"preset": "@prisel/jest-preset"
3737
},
3838
"dependencies": {
39-
"@prisel/state": "~0.0.13",
39+
"@prisel/state": "~0.0.14",
4040
"@prisel/protos": "^0.1.3",
4141
"@prisel/common": "^0.1.3",
4242
"debug": "^4.3.3",

packages/server/src/events.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Packet, Request, Response } from '@prisel/common';
22
import { priselpb } from '@prisel/protos';
3-
import { getAmbient, hasAmbient, newEvent } from '@prisel/state';
3+
import { getAmbient, newEvent } from '@prisel/state';
44
import { getPlayerAmbient, roomIdAmbient } from './ambients';
55
import { Socket } from './objects';
66
import { Player } from './player';
@@ -66,11 +66,17 @@ export const customActionPacketEvent = (action: string) =>
6666
.filter(isCustomAction(action));
6767

6868
export function isInRoom(data: { player: Player }) {
69-
return hasAmbient(roomIdAmbient) && data.player.getRoomId() === getAmbient(roomIdAmbient);
69+
return data.player.getRoomId() === getAmbient(roomIdAmbient);
7070
}
7171

7272
export function isSystemAction(systemActionType: priselpb.SystemActionType) {
7373
return ({ packet }: { packet: Packet }) => {
7474
return Request.isRequest(packet) && Packet.getSystemAction(packet) === systemActionType;
7575
};
7676
}
77+
78+
const [playerExitEvent, _emitPlayerExitEvent] = newEvent<Player>('player-exit');
79+
export const emitPlayerExitEvent = _emitPlayerExitEvent;
80+
export const playerExitRoomEvent = playerExitEvent.filter(
81+
(player) => player.getRoomId() === getAmbient(roomIdAmbient),
82+
);

packages/server/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export * as Messages from './message';
99
export * from './objects/index';
1010
export { newPlayer } from './player';
1111
export type { Player, PlayerId, PlayerOption } from './player';
12+
export { newRoomEvent, playerJoinEvent, playerLeaveEvent } from './roomEvent';
1213
export type { CreateGame, RoomType } from './serverConfig';
1314
export { Server } from './serverState';
1415
export { broadcast } from './utils/broadcast';

packages/server/src/roomEvent.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { Emitter, Event, getAmbient, newEvent } from '@prisel/state';
2+
import { roomIdAmbient } from './ambients';
3+
import { Player } from './player';
4+
5+
export function newRoomEvent<T = void>(name: string): [Event<T>, Emitter<T>] {
6+
const [event, emitter] = newEvent<{ roomId: string; value: T }>(name);
7+
8+
return [
9+
event.filter((e) => e.roomId === getAmbient(roomIdAmbient)).map((e) => e.value),
10+
{
11+
ref: event.ref,
12+
send: ((event?: any) =>
13+
emitter.send({
14+
roomId: getAmbient(roomIdAmbient),
15+
value: event,
16+
})) as Emitter<T>['send'],
17+
},
18+
];
19+
}
20+
21+
/**
22+
* Event fired when a player joins the room.
23+
*/
24+
export const [playerJoinEvent, emitPlayerJoinEvent] = newRoomEvent<Player>('player-join-room');
25+
/**
26+
* Event fired when a player leaves the room.
27+
*/
28+
export const [playerLeaveEvent, emitPlayerLeaveEvent] = newRoomEvent<Player>('player-leave-room');

0 commit comments

Comments
 (0)