diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2024-01-19 20:51:49 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2024-01-19 20:51:49 +0900 |
| commit | a637b4e28259e89285fc1c67589c731a053f5562 (patch) | |
| tree | bda9783430b2e75e14484d0bd0ef0541c160c09e /packages/backend/src/core/GlobalEventService.ts | |
| parent | Enhance(frontend): MFMの属性にオートコンプリートが利用でき... (diff) | |
| download | sharkey-a637b4e28259e89285fc1c67589c731a053f5562.tar.gz sharkey-a637b4e28259e89285fc1c67589c731a053f5562.tar.bz2 sharkey-a637b4e28259e89285fc1c67589c731a053f5562.zip | |
feat: reversi
Resolve #12962
Diffstat (limited to 'packages/backend/src/core/GlobalEventService.ts')
| -rw-r--r-- | packages/backend/src/core/GlobalEventService.ts | 57 |
1 files changed, 56 insertions, 1 deletions
diff --git a/packages/backend/src/core/GlobalEventService.ts b/packages/backend/src/core/GlobalEventService.ts index d175f21f2f..11a8935be2 100644 --- a/packages/backend/src/core/GlobalEventService.ts +++ b/packages/backend/src/core/GlobalEventService.ts @@ -18,7 +18,7 @@ import type { MiSignin } from '@/models/Signin.js'; import type { MiPage } from '@/models/Page.js'; import type { MiWebhook } from '@/models/Webhook.js'; import type { MiMeta } from '@/models/Meta.js'; -import { MiAvatarDecoration, MiRole, MiRoleAssignment } from '@/models/_.js'; +import { MiAvatarDecoration, MiReversiGame, MiRole, MiRoleAssignment } from '@/models/_.js'; import type { Packed } from '@/misc/json-schema.js'; import { DI } from '@/di-symbols.js'; import type { Config } from '@/config.js'; @@ -159,6 +159,43 @@ export interface AdminEventTypes { comment: string; }; } + +export interface ReversiEventTypes { + matched: { + game: Packed<'ReversiGameDetailed'>; + }; + invited: { + user: Packed<'User'>; + }; +} + +export interface ReversiGameEventTypes { + changeReadyStates: { + user1: boolean; + user2: boolean; + }; + updateSettings: { + userId: MiUser['id']; + key: string; + value: any; + }; + putStone: { + at: number; + color: boolean; + pos: number; + next: boolean; + }; + syncState: { + crc32: string; + }; + started: { + game: Packed<'ReversiGameDetailed'>; + }; + ended: { + winnerId: MiUser['id'] | null; + game: Packed<'ReversiGameDetailed'>; + }; +} //#endregion // 辞書(interface or type)から{ type, body }ユニオンを定義 @@ -249,6 +286,14 @@ export type GlobalEvents = { name: 'notesStream'; payload: Serialized<Packed<'Note'>>; }; + reversi: { + name: `reversiStream:${MiUser['id']}`; + payload: EventUnionFromDictionary<SerializedAll<ReversiEventTypes>>; + }; + reversiGame: { + name: `reversiGameStream:${MiReversiGame['id']}`; + payload: EventUnionFromDictionary<SerializedAll<ReversiGameEventTypes>>; + }; }; // API event definitions @@ -338,4 +383,14 @@ export class GlobalEventService { public publishAdminStream<K extends keyof AdminEventTypes>(userId: MiUser['id'], type: K, value?: AdminEventTypes[K]): void { this.publish(`adminStream:${userId}`, type, typeof value === 'undefined' ? null : value); } + + @bindThis + public publishReversiStream<K extends keyof ReversiEventTypes>(userId: MiUser['id'], type: K, value?: ReversiEventTypes[K]): void { + this.publish(`reversiStream:${userId}`, type, typeof value === 'undefined' ? null : value); + } + + @bindThis + public publishReversiGameStream<K extends keyof ReversiGameEventTypes>(gameId: MiReversiGame['id'], type: K, value?: ReversiGameEventTypes[K]): void { + this.publish(`reversiGameStream:${gameId}`, type, typeof value === 'undefined' ? null : value); + } } |