1
This commit is contained in:
parent
23481dd384
commit
45c356bbfa
@ -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);
|
||||
|
@ -33,11 +33,11 @@ class GCListener : public a8::Singleton<GCListener>
|
||||
void UnInit();
|
||||
|
||||
template <typename T>
|
||||
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<GCListener>
|
||||
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;
|
||||
|
@ -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);
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user