This commit is contained in:
aozhiwei 2022-03-22 14:24:51 +08:00
parent b75c7cee45
commit ce11647e13

View File

@ -147,10 +147,68 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg)
MatchMgr::Instance()->_CMJoin(hdr, msg);
return;
}
std::vector<std::shared_ptr<cs::CMJoin>> join_msgs;
std::shared_ptr<cs::CMJoin> join_msg = std::make_shared<cs::CMJoin>();
*join_msg = msg;
std::vector<std::shared_ptr<cs::CMJoin>> join_msgs{join_msg};
auto ip_saddr = hdr.ip_saddr;
auto socket_handle = hdr.socket_handle;
auto cb =
[] (std::vector<std::tuple<int, std::string>>&)
[ip_saddr, socket_handle, join_msg] (std::vector<std::tuple<int, std::string>>& results)
{
cs::CMJoin& msg = *join_msg;
if (RoomMgr::Instance()->IsLimitJoin()) {
RoomMgr::Instance()->JoinErrorHandle(msg, 2, socket_handle);
return;
}
int game_times = 0;
RoomType_e self_room_type = GetHumanRoomType(msg, game_times);
if (self_room_type < RT_OldBrid1) {
self_room_type = RT_OldBrid1;
}
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
(
msg,
self_room_type,
game_times,
register_time,
proto_version,
channel
);
if (!room) {
RoomMgr::Instance()->JoinErrorHandle(msg, 3, socket_handle);
return;
}
Player* hum = room->NewPlayer();
hum->ProcPreSettlementInfo(msg.pre_settlement_info());
PlayerMgr::Instance()->
CreatePlayerByCMJoin(hum,
ip_saddr,
socket_handle,
msg
);
hum->meta = MetaMgr::Instance()->GetPlayer(msg.hero_id());
if (!hum->meta) {
hum->meta = MetaMgr::Instance()->human_meta;
}
hum->room = room;
room->AddPlayer(hum);
hum->ProcPrepareItems(msg.prepare_items());
hum->ProcPrepareItems2(msg.prepare_items2());
hum->ProcSkillList(msg.skill_list());
PlayerMgr::Instance()->IncAccountNum(msg.account_id());
if (JsonDataMgr::Instance()->channel != 0 &&
JsonDataMgr::Instance()->channel != channel) {
a8::UdpLog::Instance()->Warning
("join room channel not match channel:%d account_id:%s",
{
JsonDataMgr::Instance()->channel,
msg.account_id()
});
}
RoomMgr::Instance()->OnJoinRoomOk(msg, hum);
};
SendGetBattleData(join_msgs, cb);
}