1
This commit is contained in:
parent
b75c7cee45
commit
ce11647e13
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user