From 9367ae90981e6c5dc76c3e8a0fbc68d4d7fdd8ac Mon Sep 17 00:00:00 2001 From: waterfast <1301917161@qq.com> Date: Sat, 4 Oct 2025 14:18:08 +0800 Subject: [PATCH 1/2] 10/4/update --- src/server/room/room.cpp | 27 ++++++++++++++++++++++++++- src/server/room/room.h | 2 ++ src/server/user/player.cpp | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/server/room/room.cpp b/src/server/room/room.cpp index 89c4cca..604dfe8 100644 --- a/src/server/room/room.cpp +++ b/src/server/room/room.cpp @@ -666,6 +666,11 @@ void Room::_gameOver() { addRunRate(p->getId(), mode); } + //游戏结束变回来? + if (p->getState() == Player::Trust) { + p->setState(Player::Online); + } + // 踢了并非人类,但是注意下面的两个kick不会释放player if (!p->isOnline()) { if (p->getState() == Player::Offline) { @@ -826,6 +831,26 @@ void Room::kickPlayer(Player &player, const Packet &pkt) { }); } +void Room::trust(Player &player, const Packet &pkt) { + // 仅在对局中允许托管 + if (!isStarted()) return; + // 将玩家置为托管,但保留 socket,使其留在房间内观战,若已托管则改为在线 + if (player.getState() != Player::Trust){ + player.setState(Player::Trust); + }else{ + player.setState(Player::Online); + } + //神秘代码 + if (player.thinking()) { + auto thread = this->thread().lock(); + if (thread) thread->wakeUp(id, "player_trust"); + } + + + +} + + void Room::ready(Player &player, const Packet &) { setPlayerReady(player, !player.isReady()); } @@ -853,9 +878,9 @@ void Room::handlePacket(Player &sender, const Packet &packet) { {"KickPlayer", &Room::kickPlayer}, {"Ready", &Room::ready}, {"StartGame", &Room::startGame}, + {"Trust", &Room::trust}, {"Chat", &Room::chat}, }; - if (packet.command == "PushRequest") { std::string_view sv; auto ret = cbor_stream_decode( diff --git a/src/server/room/room.h b/src/server/room/room.h index ee992b2..25cdb6b 100644 --- a/src/server/room/room.h +++ b/src/server/room/room.h @@ -135,4 +135,6 @@ private: void kickPlayer(Player &, const Packet &); void ready(Player &, const Packet &); void startGame(Player &, const Packet &); + void trust(Player &, const Packet &); + }; diff --git a/src/server/user/player.cpp b/src/server/user/player.cpp index 75335a5..85d06aa 100644 --- a/src/server/user/player.cpp +++ b/src/server/user/player.cpp @@ -211,7 +211,7 @@ std::string Player::waitForReply(int timeout) { } void Player::doNotify(const std::string_view &command, const std::string_view &data) { - if (getState() != Player::Online) + if (getState() != Player::Online && getState() != Player::Trust ) return; // spdlog::debug("[TX](id={} connId={} state={} Room={}): {} {}", id, connId, getStateString(), roomId, command, toHex(data)); -- Gitee From ec1084426b555126aca5046019db7fb15d02960f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AF=A5=E8=B4=A6=E5=8F=B7=E5=B7=B2=E6=B3=A8=E9=94=80?= <1301917161@qq.com> Date: Sat, 4 Oct 2025 13:54:04 +0000 Subject: [PATCH 2/2] =?UTF-8?q?10/4=E4=BC=98=E5=8C=96=E5=98=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/room/room.cpp | 19 ++++++++----------- src/server/user/player.cpp | 2 +- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/server/room/room.cpp b/src/server/room/room.cpp index 604dfe8..f53ce60 100644 --- a/src/server/room/room.cpp +++ b/src/server/room/room.cpp @@ -666,9 +666,9 @@ void Room::_gameOver() { addRunRate(p->getId(), mode); } - //游戏结束变回来? + // 游戏结束变回来 if (p->getState() == Player::Trust) { - p->setState(Player::Online); + p->setState(Player::Online); } // 踢了并非人类,但是注意下面的两个kick不会释放player @@ -834,20 +834,17 @@ void Room::kickPlayer(Player &player, const Packet &pkt) { void Room::trust(Player &player, const Packet &pkt) { // 仅在对局中允许托管 if (!isStarted()) return; - // 将玩家置为托管,但保留 socket,使其留在房间内观战,若已托管则改为在线 - if (player.getState() != Player::Trust){ + + // 将玩家置为托管 + if (player.getState() != Player::Trust) { player.setState(Player::Trust); - }else{ - player.setState(Player::Online); - } - //神秘代码 if (player.thinking()) { auto thread = this->thread().lock(); if (thread) thread->wakeUp(id, "player_trust"); } - - - + } else { + player.setState(Player::Online); + } } diff --git a/src/server/user/player.cpp b/src/server/user/player.cpp index 85d06aa..c97ffab 100644 --- a/src/server/user/player.cpp +++ b/src/server/user/player.cpp @@ -211,7 +211,7 @@ std::string Player::waitForReply(int timeout) { } void Player::doNotify(const std::string_view &command, const std::string_view &data) { - if (getState() != Player::Online && getState() != Player::Trust ) + if (!isOnline()) return; // spdlog::debug("[TX](id={} connId={} state={} Room={}): {} {}", id, connId, getStateString(), roomId, command, toHex(data)); -- Gitee