From 7fb1ed3a5ff5ec04b60d98e526f553ca138234c8 Mon Sep 17 00:00:00 2001 From: zhl Date: Fri, 30 Apr 2021 13:09:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8A=A0=E5=85=A5=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/controllers/puzzle.controller.ts | 32 +++++++++++++++++++----- src/models/match/PuzzleSession.ts | 4 +++ src/services/GameLogic.ts | 2 ++ src/services/WsSvr.ts | 10 ++++++++ 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/api/controllers/puzzle.controller.ts b/src/api/controllers/puzzle.controller.ts index 7273209..b1c30b3 100644 --- a/src/api/controllers/puzzle.controller.ts +++ b/src/api/controllers/puzzle.controller.ts @@ -9,7 +9,7 @@ import { ZError } from '../../common/ZError' import { BaseConst } from '../../constants/BaseConst' import { mission_vo } from '../../config/parsers/mission_vo' import { - createRoom, + createRoom, joinRoom, updateScore } from '../../services/WsSvr' import { RoomState } from '../../services/RoomState' @@ -160,13 +160,31 @@ class PuzzleController extends BaseController { throw new RoomLockErr('') } new RoomState().lock(shop) - let history = await PuzzleSession.findOne({ shop, status: 0, type: 1 }) + let history = await PuzzleSession.findOne({ shop, status: {$in: [0, 1]}, type: 1 }) if (history && !history.hasExpired()) { - new RoomState().unlock(shop) beginTime = history.begin - history.members.set(accountid, new PuzzleStatusClass()) - await history.save() - return roomId = history.room + if (!history.members.has(accountid)) { + let rsp = await joinRoom(data) + if (rsp.status != 200) { + new RoomState().unlock(shop) + throw new ZError(11, 'error create room') + } + let memberData = new PuzzleStatusClass() + sessionId = rsp.data?.sessionId + memberData.sessionId = sessionId + history.members.set(accountid, memberData) + history.markModified('members') + await history.save() + new RoomState().unlock(shop) + return roomId = history.room + } else { + let memberData = history.members.get(accountid) + sessionId = memberData.sessionId + roomId = history.room + new RoomState().unlock(shop) + return + } + } else { let rsp = await createRoom(data) if (rsp.status != 200) { @@ -176,6 +194,8 @@ class PuzzleController extends BaseController { roomId = rsp.data?.room?.roomId sessionId = rsp.data?.sessionId history = new PuzzleSession({shop, status: 0, type: 1}) + let memberData = new PuzzleStatusClass() + memberData.sessionId = sessionId history.members.set(accountid, new PuzzleStatusClass()) history.room = roomId //TODO: 根据配置赋值 diff --git a/src/models/match/PuzzleSession.ts b/src/models/match/PuzzleSession.ts index b1b943f..1000673 100644 --- a/src/models/match/PuzzleSession.ts +++ b/src/models/match/PuzzleSession.ts @@ -37,6 +37,10 @@ export class PuzzleStatusClass { */ @prop({default: 0}) maxCombo: number + + @prop() + sessionId: string + } // @ts-ignore export interface PuzzleSessionClass extends Base, TimeStamps { diff --git a/src/services/GameLogic.ts b/src/services/GameLogic.ts index 260febe..816c9f2 100644 --- a/src/services/GameLogic.ts +++ b/src/services/GameLogic.ts @@ -60,6 +60,8 @@ export async function sendOneQuestion(history: any) { new Schedule().stopSchedule(history.scheduleKey) if (history.current >= history.questions.length) { console.log('match over') + history.status = 9 + await history.save() await endGame(roomId, {}) return } diff --git a/src/services/WsSvr.ts b/src/services/WsSvr.ts index 8ce51d6..8539b1a 100644 --- a/src/services/WsSvr.ts +++ b/src/services/WsSvr.ts @@ -110,6 +110,16 @@ export async function createRoom(data) { return axios.post(url, data) } +/** + * 加入房间 + * @param data + * @return {Promise>} + */ +export async function joinRoom(data) { + const url = `${apiBase}/matchmake/joinById/puzzle_room` + return axios.post(url, data) +} + /** * 发送一条问题 * @param {string} roomId