forked from mirror/misskey
wip
This commit is contained in:
parent
4e1fb618b8
commit
36450d7fac
@ -197,9 +197,9 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit {
|
|||||||
if (o.isEnded) {
|
if (o.isEnded) {
|
||||||
let winner;
|
let winner;
|
||||||
if (o.winner === true) {
|
if (o.winner === true) {
|
||||||
winner = freshGame.black == 1 ? freshGame.user1Id : freshGame.user2Id;
|
winner = freshGame.black === 1 ? freshGame.user1Id : freshGame.user2Id;
|
||||||
} else if (o.winner === false) {
|
} else if (o.winner === false) {
|
||||||
winner = freshGame.black == 1 ? freshGame.user2Id : freshGame.user1Id;
|
winner = freshGame.black === 1 ? freshGame.user2Id : freshGame.user1Id;
|
||||||
} else {
|
} else {
|
||||||
winner = null;
|
winner = null;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,8 @@ import { AntennaChannelService } from './channels/antenna.js';
|
|||||||
import { DriveChannelService } from './channels/drive.js';
|
import { DriveChannelService } from './channels/drive.js';
|
||||||
import { HashtagChannelService } from './channels/hashtag.js';
|
import { HashtagChannelService } from './channels/hashtag.js';
|
||||||
import { RoleTimelineChannelService } from './channels/role-timeline.js';
|
import { RoleTimelineChannelService } from './channels/role-timeline.js';
|
||||||
|
import { ReversiChannelService } from './channels/reversi.js';
|
||||||
|
import { ReversiGameChannelService } from './channels/reversi-game.js';
|
||||||
import { type MiChannelService } from './channel.js';
|
import { type MiChannelService } from './channel.js';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@ -38,6 +40,8 @@ export class ChannelsService {
|
|||||||
private serverStatsChannelService: ServerStatsChannelService,
|
private serverStatsChannelService: ServerStatsChannelService,
|
||||||
private queueStatsChannelService: QueueStatsChannelService,
|
private queueStatsChannelService: QueueStatsChannelService,
|
||||||
private adminChannelService: AdminChannelService,
|
private adminChannelService: AdminChannelService,
|
||||||
|
private reversiChannelService: ReversiChannelService,
|
||||||
|
private reversiGameChannelService: ReversiGameChannelService,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,6 +62,8 @@ export class ChannelsService {
|
|||||||
case 'serverStats': return this.serverStatsChannelService;
|
case 'serverStats': return this.serverStatsChannelService;
|
||||||
case 'queueStats': return this.queueStatsChannelService;
|
case 'queueStats': return this.queueStatsChannelService;
|
||||||
case 'admin': return this.adminChannelService;
|
case 'admin': return this.adminChannelService;
|
||||||
|
case 'reversi': return this.reversiChannelService;
|
||||||
|
case 'reversiGame': return this.reversiGameChannelService;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new Error(`no such channel: ${name}`);
|
throw new Error(`no such channel: ${name}`);
|
||||||
|
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: syuilo and other misskey contributors
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
|
import * as CRC32 from 'crc-32';
|
||||||
|
import type { MiReversiGame, MiUser, ReversiGamesRepository } from '@/models/_.js';
|
||||||
|
import type { Packed } from '@/misc/json-schema.js';
|
||||||
|
import { DI } from '@/di-symbols.js';
|
||||||
|
import { bindThis } from '@/decorators.js';
|
||||||
|
import { ReversiService } from '@/core/ReversiService.js';
|
||||||
|
import Channel, { type MiChannelService } from '../channel.js';
|
||||||
|
|
||||||
|
class ReversiChannel extends Channel {
|
||||||
|
public readonly chName = 'reversi';
|
||||||
|
public static shouldShare = true;
|
||||||
|
public static requireCredential = true as const;
|
||||||
|
public static kind = 'read:account';
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private reversiService: ReversiService,
|
||||||
|
private reversiGamesRepository: ReversiGamesRepository,
|
||||||
|
|
||||||
|
id: string,
|
||||||
|
connection: Channel['connection'],
|
||||||
|
) {
|
||||||
|
super(id, connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@bindThis
|
||||||
|
public async init(params: any) {
|
||||||
|
this.subscriber.on(`reversiStream:${this.user.id}`, this.send);
|
||||||
|
}
|
||||||
|
|
||||||
|
@bindThis
|
||||||
|
public async async onMessage(type: string, body: any) {
|
||||||
|
switch (type) {
|
||||||
|
case 'ping': {
|
||||||
|
if (body.id == null) return;
|
||||||
|
const matching = await ReversiMatchings.findOne({
|
||||||
|
parentId: this.user!.id,
|
||||||
|
childId: body.id,
|
||||||
|
});
|
||||||
|
if (matching == null) return;
|
||||||
|
publishMainStream(matching.childId, 'reversiInvited', await ReversiMatchings.pack(matching, { id: matching.childId }));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@bindThis
|
||||||
|
public dispose() {
|
||||||
|
// Unsubscribe events
|
||||||
|
this.subscriber.off(`reversiStream:${this.user.id}`, this.send);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class ReversiChannelService implements MiChannelService<true> {
|
||||||
|
public readonly shouldShare = ReversiChannel.shouldShare;
|
||||||
|
public readonly requireCredential = ReversiChannel.requireCredential;
|
||||||
|
public readonly kind = ReversiChannel.kind;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
@Inject(DI.reversiGamesRepository)
|
||||||
|
private reversiGamesRepository: ReversiGamesRepository,
|
||||||
|
|
||||||
|
private reversiService: ReversiService,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@bindThis
|
||||||
|
public create(id: string, connection: Channel['connection']): ReversiChannel {
|
||||||
|
return new ReversiChannel(
|
||||||
|
this.reversiService,
|
||||||
|
this.reversiGamesRepository,
|
||||||
|
id,
|
||||||
|
connection,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user