From 45c356bbfaa4269a10da7c0e655e5413cd7f110b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 17 Sep 2019 16:52:19 +0800 Subject: [PATCH] 1 --- server/gameserver/GCListener.cc | 6 +++++- server/gameserver/GCListener.h | 6 +++--- server/gameserver/global.cc | 6 +++--- server/gameserver/playermgr.cc | 15 ++++++++++----- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/server/gameserver/GCListener.cc b/server/gameserver/GCListener.cc index 9931736..2806f9a 100644 --- a/server/gameserver/GCListener.cc +++ b/server/gameserver/GCListener.cc @@ -232,10 +232,14 @@ void GCListener::SetKey(int sockhandle, const std::string& key) tcp_listener_->UnLockClients(); } -void GCListener::InternalSendMsg(int socket_handle, int msgid, google::protobuf::Message& msg) +void GCListener::InternalSendMsg(int socket_handle, int msgid, google::protobuf::Message& msg, int guess_size) { unsigned short packlen = 2 + CustomPbSerializeSize(&msg); + if (guess_size > 0 && packlen - 2 < guess_size) { + packlen = guess_size + 2; + } char* buff = (char*)malloc(sizeof(ServerPktHeader) + packlen); + memset(buff, 0, sizeof(ServerPktHeader) + packlen); ServerPktHeader* head = (ServerPktHeader*)buff; head->cmd = msgid; head->size = (packlen << 8) + (packlen >> 8); diff --git a/server/gameserver/GCListener.h b/server/gameserver/GCListener.h index 9024705..1a68f06 100644 --- a/server/gameserver/GCListener.h +++ b/server/gameserver/GCListener.h @@ -33,11 +33,11 @@ class GCListener : public a8::Singleton void UnInit(); template - void SendMsg(int socket_handle, T& msg) + void SendMsg(int socket_handle, T& msg, int guess_size = 0) { static int msgid = f8::Net_GetMessageId(msg); - InternalSendMsg(socket_handle, msgid, msg); + InternalSendMsg(socket_handle, msgid, msg, guess_size); } void SendText(int sockhandle, const std::string& text); @@ -47,7 +47,7 @@ class GCListener : public a8::Singleton void SetKey(int sockhandle, const std::string& key); private: - void InternalSendMsg(int socket_handle, int msgid, google::protobuf::Message& msg); + void InternalSendMsg(int socket_handle, int msgid, google::protobuf::Message& msg, int guess_size); private: a8::TcpListener *tcp_listener_ = nullptr; diff --git a/server/gameserver/global.cc b/server/gameserver/global.cc index 6a8c7f9..4f96c65 100755 --- a/server/gameserver/global.cc +++ b/server/gameserver/global.cc @@ -177,7 +177,7 @@ bool CustomPbSerialize(char* buf, int& offset, int buflen, const google::protobu if (offset + sizeof(long long) > (size_t)buflen) { abort(); } - long long val = reflection->GetUInt64(*msg, field_desc); + long long val = reflection->GetInt64(*msg, field_desc); memmove(buf + offset, &val, sizeof(val)); offset += sizeof(val); } @@ -216,7 +216,7 @@ bool CustomPbSerialize(char* buf, int& offset, int buflen, const google::protobu { if (field_desc->is_repeated()) { int field_size = reflection->FieldSize(*msg, field_desc); - assert(fixed_len > 0 && field_size == field_size); + assert(fixed_len <= 0 || field_size == field_size); for (int i = 0; i < field_size; ++i) { const google::protobuf::Message* val = &reflection->GetRepeatedMessage(*msg, field_desc, i); CustomPbSerialize(buf, offset, buflen, val); @@ -283,7 +283,7 @@ int CustomPbSerializeSize(const google::protobuf::Message* msg) { if (field_desc->is_repeated()) { int field_size = reflection->FieldSize(*msg, field_desc); - assert(fixed_len > 0 && field_size == field_size); + assert(fixed_len <= 0 || field_size == field_size); for (int i = 0; i < field_size; ++i) { const google::protobuf::Message* val = &reflection->GetRepeatedMessage(*msg, field_desc, i); byte_size += CustomPbSerializeSize(val); diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index 509c0b8..a43bf0d 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -30,6 +30,11 @@ void PlayerMgr::_CMAuthSession(f8::MsgHdr& hdr, const cs::CMAuthSession& msg) cs::SMAuthResponse respmsg; respmsg.set_errcode(AUTH_OK); GCListener::Instance()->SendMsg(hdr.socket_handle, respmsg); + if (!GetTempSessionBySocket(hdr.socket_handle)) { + TempSession* tmp_session = new TempSession(); + tmp_session->account_id = DBEngine::Instance()->GetValue(0); + tmp_session_hash_[hdr.socket_handle] = tmp_session; + } } void PlayerMgr::_CMCharEnum(f8::MsgHdr& hdr, const cs::CMCharEnum& msg) @@ -40,9 +45,9 @@ void PlayerMgr::_CMCharEnum(f8::MsgHdr& hdr, const cs::CMCharEnum& msg) "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.playerBytes, characters.playerBytes2, characters.level, " "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, guild_member.guildid, characters.playerFlags, " "characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache " - "FROM characters LEFT JOIN character_pet ON characters.guid=character_pet.owner AND character_pet.slot='%u' " - "LEFT JOIN guild_member ON characters.guid = guild_member.guid " - "WHERE characters.account = '%u' ORDER BY characters.guid"; + "FROM zero_characters.characters LEFT JOIN zero_characters.character_pet ON characters.guid=character_pet.owner AND character_pet.slot='%d' " + "LEFT JOIN zero_characters.guild_member ON characters.guid = guild_member.guid " + "WHERE zero_characters.characters.account = '%d' ORDER BY characters.guid"; int ret = DBEngine::Instance()->ExecQuery( sql.c_str(), { @@ -67,7 +72,7 @@ void PlayerMgr::_CMCharEnum(f8::MsgHdr& hdr, const cs::CMCharEnum& msg) char_info->set_z(DBEngine::Instance()->GetValue(12).GetDouble()); char_info->set_guild_id(DBEngine::Instance()->GetValue(13)); char_info->set_char_flags(DBEngine::Instance()->GetValue(14)); - //first_login + char_info->set_first_login(0); //pet_display_id //pet_level //pet_family @@ -78,7 +83,7 @@ void PlayerMgr::_CMCharEnum(f8::MsgHdr& hdr, const cs::CMCharEnum& msg) DBEngine::Instance()->Next(); } } - GCListener::Instance()->SendMsg(hdr.socket_handle, respmsg); + GCListener::Instance()->SendMsg(hdr.socket_handle, respmsg, 100); } int PlayerMgr::OnlineNum()