Files
FrozenFriendsYume/packages/backend/built/server/api/stream/channels/shogi-game.js
T
2026-07-26 18:25:37 +09:00

42 lines
1.4 KiB
JavaScript

import Channel from "../channel.js";
import { cancelGame, gameReady, putMove } from "../../../../services/shogi/index.js";
export default class extends Channel {
chName = "shogiGame";
static shouldShare = false;
static requireCredential = false;
gameId = null;
constructor(id, connection){
super(id, connection);
this.onEvent = this.onEvent.bind(this);
}
async init(params) {
if (typeof params.gameId !== "string") return;
this.gameId = params.gameId;
this.subscriber.on(`shogiGameStream:${this.gameId}`, this.onEvent);
}
onEvent(data) {
this.send(data);
}
onMessage(type, body) {
if (!this.gameId) return;
switch(type){
case "ready":
if (this.user && typeof body === "boolean") gameReady(this.gameId, this.user, body);
break;
case "cancel":
if (this.user) cancelGame(this.gameId, this.user);
break;
case "move":
if (this.user && body && typeof body.usi === "string") {
putMove(this.gameId, this.user, body.usi, typeof body.id === "string" ? body.id : null);
}
break;
}
}
dispose() {
if (this.gameId) {
this.subscriber.off(`shogiGameStream:${this.gameId}`, this.onEvent);
}
}
}