From 0fef2ada520d9df391f3e3cf30d2d5e47458354d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 4 Nov 2023 10:59:27 +0800 Subject: [PATCH] 1 --- server/gameserver/app.cc | 12 +++--- server/gameserver/app.h | 6 +-- server/gameserver/framemaker.cc | 54 ++++++++++++------------- server/gameserver/human.cc | 2 +- server/gameserver/pbutils.cc | 2 +- server/gameserver/player.cc | 2 +- server/gameserver/roommgr.cc | 71 ++++++++++++++++----------------- server/gameserver/roommgr.h | 42 +++++++++---------- server/gameserver/team.cc | 2 +- 9 files changed, 95 insertions(+), 98 deletions(-) diff --git a/server/gameserver/app.cc b/server/gameserver/app.cc index 643d4900..3637a4ca 100644 --- a/server/gameserver/app.cc +++ b/server/gameserver/app.cc @@ -154,9 +154,9 @@ bool App::Init(int argc, char* argv[]) debug_mode }); - loop_mutex_ = new std::mutex(); - loop_cond_ = new std::condition_variable(); - msg_mutex_ = new std::mutex(); + loop_mutex_ = std::make_shared(); + loop_cond_ = std::make_shared(); + msg_mutex_ = std::make_shared(); srand(time(nullptr)); InitLog(); @@ -252,9 +252,9 @@ void App::UnInit() UnInitLog(); FreeSocketMsgQueue(); - A8_SAFE_DELETE(msg_mutex_); - A8_SAFE_DELETE(loop_cond_); - A8_SAFE_DELETE(loop_mutex_); + msg_mutex_ = nullptr; + loop_cond_ = nullptr; + loop_mutex_ = nullptr; } int App::Run() diff --git a/server/gameserver/app.h b/server/gameserver/app.h index 06ce1faa..ce8e8f88 100644 --- a/server/gameserver/app.h +++ b/server/gameserver/app.h @@ -88,10 +88,10 @@ private: a8::uuid::SnowFlake uuid_; long long last_run_tick_ = 0; - std::mutex *loop_mutex_ = nullptr; - std::condition_variable *loop_cond_ = nullptr; + std::shared_ptr loop_mutex_; + std::shared_ptr loop_cond_; - std::mutex *msg_mutex_ = nullptr; + std::shared_ptr msg_mutex_; MsgNode* top_node_ = nullptr; MsgNode* bot_node_ = nullptr; MsgNode* work_node_ = nullptr; diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index 9df61e5d..c88ddd42 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -93,36 +93,34 @@ void FrameMaker::Debug_OutObject(Human* hum) cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum) { FrameData* framedata = &hum->GetFrameData(); - cs::SMUpdate* msg = new cs::SMUpdate; + auto msg = std::make_shared(); Room* room = hum->room; - PreProcess(msg, room, hum, framedata); - SerializeLootObjects(msg, room, hum, framedata); - SerializeNewObjects(msg, room, hum, framedata); - SerializeImageObjects(msg, room, hum, framedata); - SerializePartObjects(msg, room, hum, framedata); - SerializeDelObjects(msg, room, hum, framedata); - SerializeOutObjects(msg, room, hum, framedata); - SerializeShots(msg, room, hum, framedata); - SerializeEmotes(msg, room, hum, framedata); - SerializeBullets(msg, room, hum, framedata); - SerializePlaySkills(msg, room, hum, framedata); - SerializeExplosions(msg, room, hum, framedata); - SerializeChgedBuffs(msg, room, hum, framedata); - SerializeChgedEffects(msg, room, hum, framedata); - SerializeChgedBulletNums(msg, room, hum, framedata); - SerializeChgedHps(msg, room, hum, framedata); - SerializeChgedSkillCds(msg, room, hum, framedata); - SerializeChgedSkillCurrTimes(msg, room, hum, framedata); - SerializeChgedItems(msg, room, hum, framedata); - SerializeChgedWeaponAmmo(msg, room, hum, framedata); - SerializeDeadAliveObjs(msg, room, hum, framedata); - SerializeChgedCars(msg, room, hum, framedata); - SerializeChgedProps(msg, room, hum, framedata); - SerializeDelBullets(msg, room, hum, framedata); - PostProcess(msg, room, hum, framedata); - - return msg; + PreProcess(msg.get(), room, hum, framedata); + SerializeLootObjects(msg.get(), room, hum, framedata); + SerializeNewObjects(msg.get(), room, hum, framedata); + SerializeImageObjects(msg.get(), room, hum, framedata); + SerializePartObjects(msg.get(), room, hum, framedata); + SerializeDelObjects(msg.get(), room, hum, framedata); + SerializeOutObjects(msg.get(), room, hum, framedata); + SerializeShots(msg.get(), room, hum, framedata); + SerializeEmotes(msg.get(), room, hum, framedata); + SerializeBullets(msg.get(), room, hum, framedata); + SerializePlaySkills(msg.get(), room, hum, framedata); + SerializeExplosions(msg.get(), room, hum, framedata); + SerializeChgedBuffs(msg.get(), room, hum, framedata); + SerializeChgedEffects(msg.get(), room, hum, framedata); + SerializeChgedBulletNums(msg.get(), room, hum, framedata); + SerializeChgedHps(msg.get(), room, hum, framedata); + SerializeChgedSkillCds(msg.get(), room, hum, framedata); + SerializeChgedSkillCurrTimes(msg.get(), room, hum, framedata); + SerializeChgedItems(msg.get(), room, hum, framedata); + SerializeChgedWeaponAmmo(msg.get(), room, hum, framedata); + SerializeDeadAliveObjs(msg.get(), room, hum, framedata); + SerializeChgedCars(msg.get(), room, hum, framedata); + SerializeChgedProps(msg.get(), room, hum, framedata); + SerializeDelBullets(msg.get(), room, hum, framedata); + PostProcess(msg.get(), room, hum, framedata); } void FrameMaker::PreProcess(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index b0768ff6..3bbda9ff 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1460,7 +1460,7 @@ void Human::SendBattleReport() "" }); } - Room* room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); + auto room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); if (!room) { return; } diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index bc63d405..46ff64e7 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1670,7 +1670,7 @@ void Human::SendBattleSettlement() [room_uuid, tmp_account_id, data] (bool ok, a8::XObject* rsp_obj, f8::HttpContext* ctx) { - Room* room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); + auto room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); if (!room) { return; } diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 62cbcfe9..115f694c 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1332,7 +1332,7 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg) [room_uuid, account_id = account_id, target_uniid] (bool ok, a8::XObject* rsp_obj, f8::HttpContext* ctx) { - Room* room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); + auto room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); if (!room) { return; } diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index e819511f..3987db37 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -85,19 +85,19 @@ void RoomMgr::UnInit() { for (auto& pair : room_hash_) { pair.second->UnInit(); - delete pair.second; } for (auto& pair : over_room_hash_) { pair.second->UnInit(); - delete pair.second; } + room_hash_.clear(); + over_room_hash_.clear(); } void RoomMgr::Update(int delta_time) { long long real_alive_count = 0; for (auto& pair : room_hash_) { - Room* room = pair.second; + auto& room = pair.second; room->Update(delta_time); real_alive_count += room->RealAliveCount(); } @@ -160,7 +160,7 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) time_t register_time = f8::ExtractRegisterTimeFromSessionId(msg.session_id()); int proto_version = msg.proto_version(); int channel = f8::ExtractChannelIdFromAccountId(msg.account_id()); - Room* room = RoomMgr::Instance()->GetJoinableRoom + std::shared_ptr room = RoomMgr::Instance()->GetJoinableRoom ( msg, self_room_type, @@ -194,7 +194,7 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) if (!hum->meta) { hum->meta = mt::Param::s().human_meta; } - hum->room = room; + hum->room = room.get(); hum->SetBattleContext(results.at(0)); hum->GetBattleContext()->Init(hum); { @@ -235,7 +235,7 @@ void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) ); }; - Room* room = GetRoomByUuid(a8::XValue(msg.room_uuid())); + auto room = GetRoomByUuid(a8::XValue(msg.room_uuid())); if (!room) { send_reconnect_failed(hdr.socket_handle, 1, TEXT("battle_server_reconnect_failreason_room_destoryed", "房间已销毁")); @@ -278,20 +278,20 @@ int RoomMgr::OverRoomNum() return over_room_hash_.size(); } -Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, - const RoomType_e self_room_type, - int game_times, - int creator_register_time, - int proto_version, - int channel - ) +std::shared_ptr RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, + const RoomType_e self_room_type, + int game_times, + int creator_register_time, + int proto_version, + int channel + ) { - std::vector> group_rooms; + std::vector>> group_rooms; for (int i = 0; i < RoomType_Max; ++i) { - group_rooms.push_back(std::vector()); + group_rooms.push_back(std::vector>()); } for (auto& pair : inactive_room_hash_) { - Room* room = pair.second; + auto& room = pair.second; if (!room->GetCustomBattle() && room->CanJoin(msg.account_id(), self_room_type, @@ -338,10 +338,10 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, nullptr); } -Room* RoomMgr::GetJoinableRoom(MatchTeam* team) +std::shared_ptr RoomMgr::GetJoinableRoom(MatchTeam* team) { for (auto& pair : inactive_room_hash_) { - Room* room = pair.second; + auto room = pair.second; if (room->CanJoin(team)) { return room; } @@ -362,13 +362,13 @@ Room* RoomMgr::GetJoinableRoom(MatchTeam* team) nullptr); } -Room* RoomMgr::GetRoomByUuid(long long room_uuid) +std::shared_ptr RoomMgr::GetRoomByUuid(long long room_uuid) { auto itr = room_hash_.find(room_uuid); return itr != room_hash_.end() ? itr->second : nullptr; } -Room* RoomMgr::GetRoomByIdx(int room_idx) +std::shared_ptr RoomMgr::GetRoomByIdx(int room_idx) { auto itr = room_idx_hash_.find(room_idx); return itr != room_idx_hash_.end() ? itr->second : nullptr; @@ -380,7 +380,7 @@ void RoomMgr::AddOverRoom(long long room_uuid) [room_uuid] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { - Room* room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); + auto room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); if (room) { RoomMgr::Instance()->room_hash_.erase(room->GetRoomUuid()); RoomMgr::Instance()->over_room_hash_[room->GetRoomUuid()] = room; @@ -390,7 +390,7 @@ void RoomMgr::AddOverRoom(long long room_uuid) }; inactive_room_hash_.erase(room_uuid); - Room* room = GetRoomByUuid(room_uuid); + auto room = GetRoomByUuid(room_uuid); if (room) { room->added_to_over_room = true; f8::Timer::Instance()->SetIntervalEx @@ -474,7 +474,6 @@ void RoomMgr::FreeOverRoom(long long room_uuid) --PerfMonitor::Instance()->room_num[itr->second->GetRoomType()]; itr->second->UnInit(); room_idx_hash_.erase(itr->second->GetRoomIdx()); - delete itr->second; over_room_hash_.erase(itr); } } @@ -528,14 +527,14 @@ int RoomMgr::AllocRoomIdx() return current_room_idx_; } -Room* RoomMgr::CreateRoom(const cs::CMJoin& msg, - RoomType_e room_type, - int game_times, - int creator_register_time, - int creator_proto_version, - int creator_channel, - int map_id, - std::shared_ptr custom_battle) +std::shared_ptr RoomMgr::CreateRoom(const cs::CMJoin& msg, + RoomType_e room_type, + int game_times, + int creator_register_time, + int creator_proto_version, + int creator_channel, + int map_id, + std::shared_ptr custom_battle) { int room_idx = AllocRoomIdx(); if (room_idx < 1) { @@ -563,8 +562,8 @@ Room* RoomMgr::CreateRoom(const cs::CMJoin& msg, A8_ABORT(); } } - Room* room = new Room(); - MapMgr::Instance()->AttachRoom(room, init_info); + auto room = std::make_shared(); + MapMgr::Instance()->AttachRoom(room.get(), init_info); room->InitData(init_info); room->Init(); inactive_room_hash_[room->GetRoomUuid()] = room; @@ -619,7 +618,7 @@ bool RoomMgr::IsGM(const std::string& account_id) void RoomMgr::JoinTeam(MatchTeam* team) { - Room* room = GetJoinableRoom(team); + auto room = GetJoinableRoom(team); if (!room) { return; } @@ -959,7 +958,7 @@ void RoomMgr::_CMJoinCustomBattle(f8::MsgHdr& hdr, const cs::CMJoin& msg) time_t register_time = f8::ExtractRegisterTimeFromSessionId(msg.session_id()); int proto_version = msg.proto_version(); int channel = f8::ExtractChannelIdFromAccountId(msg.account_id()); - Room* room = RoomMgr::Instance()->CreateRoom + auto room = RoomMgr::Instance()->CreateRoom (*join_msg, self_room_type, game_times, @@ -968,7 +967,7 @@ void RoomMgr::_CMJoinCustomBattle(f8::MsgHdr& hdr, const cs::CMJoin& msg) channel, msg.mapid(), p); - p->SetRoom(room); + p->SetRoom(room.get()); } Player* hum = p->GetRoom()->NewPlayer(); hum->room = p->GetRoom(); diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index aa5b8e75..a0a36a38 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -78,7 +78,7 @@ class RoomMgr : public a8::Singleton void ActiveRoom(long long room_uuid); int RoomNum(); int OverRoomNum(); - Room* GetRoomByUuid(long long uuid); + std::shared_ptr GetRoomByUuid(long long uuid); void AddOverRoom(long long room_uuid); bool IsGM(const std::string& account_id); void JoinTeam(MatchTeam* team); @@ -91,27 +91,27 @@ class RoomMgr : public a8::Singleton private: void InstallReportStateTimer(); - Room* GetRoomByIdx(int room_idx); - Room* GetJoinableRoom(const cs::CMJoin& msg, - const RoomType_e self_room_type, - int game_times, - int creator_register_time, - int proto_version, - int channel); - Room* GetJoinableRoom(MatchTeam* team); + std::shared_ptr GetRoomByIdx(int room_idx); + std::shared_ptr GetJoinableRoom(const cs::CMJoin& msg, + const RoomType_e self_room_type, + int game_times, + int creator_register_time, + int proto_version, + int channel); + std::shared_ptr GetJoinableRoom(MatchTeam* team); void ReportServerState(int instance_id, const std::string& host, int port); void FreeOverRoom(long long room_uuid); bool IsLimitJoin(); int AllocRoomIdx(); - Room* CreateRoom(const cs::CMJoin& msg, - RoomType_e room_type, - int game_times, - int creator_register_time, - int creator_proto_version, - int creator_channel, - int map_id, - std::shared_ptr custom_battle); + std::shared_ptr CreateRoom(const cs::CMJoin& msg, + RoomType_e room_type, + int game_times, + int creator_register_time, + int creator_proto_version, + int creator_channel, + int map_id, + std::shared_ptr custom_battle); void JoinErrorHandle(const cs::CMJoin& msg, int error_code, int socket_handle); std::string GenTeamHashData(const std::string& team_uuid, std::map* team_hash); void OnJoinRoomOk(const cs::CMJoin& msg, Player* hum); @@ -127,10 +127,10 @@ class RoomMgr : public a8::Singleton int current_room_idx_ = 0; int match_mode_ = 0; - std::map inactive_room_hash_; - std::map room_hash_; - std::map room_idx_hash_; - std::map over_room_hash_; + std::map> inactive_room_hash_; + std::map> room_hash_; + std::map> room_idx_hash_; + std::map> over_room_hash_; f8::Attacher reportstate_timer_attacher_; std::map gm_hash_; std::map> team_room_hash_; diff --git a/server/gameserver/team.cc b/server/gameserver/team.cc index a350ea64..24bdd703 100644 --- a/server/gameserver/team.cc +++ b/server/gameserver/team.cc @@ -252,7 +252,7 @@ void Team::SendTeamBattleReport(Human* sender) [room_uuid, team_id] (bool ok, a8::XObject* rsp_obj, f8::HttpContext* ctx) { - Room* room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); + auto room = RoomMgr::Instance()->GetRoomByUuid(room_uuid); if (room) { Team* team = room->GetTeam(team_id); if (team) {