int SvCon::processRegisterResponse(const char* respbody, int len){ int ret = 0; ef::TimeRecorder t("SvCon::handleRegisterResponse"); LoginResponse lgresp; lgresp.ParseFromArray(respbody, len); if(lgresp.status()){ //reg fail disconnect(); ALogError(m_serv->getConfig().LogName) << "<action:server_register_resp> " "<event_loop:" << getEventLoop() << "> <conid:" << getId() << "> <con_serv_id:" << m_con_serv_id << "> <status:" << lgresp.status() << ">"; return ret; } m_status = STATUS_LOGIN; m_sessid = lgresp.sessid(); ALogError(m_serv->getConfig().LogName) << "<action:server_register_resp> " "<event_loop:" << getEventLoop() << "> <conid:" << getId() << "> <con_serv_id:" << m_con_serv_id << "> <status:0> <sessid:" << m_sessid << ">"; return ret; }
void LoginResponse::MergeFrom(const LoginResponse& from) { GOOGLE_CHECK_NE(&from, this); if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { if (from.has_status()) { set_status(from.status()); } if (from.has_address()) { mutable_address()->::message::NetAddress::MergeFrom(from.address()); } if (from.has_dailyrewarddata()) { mutable_dailyrewarddata()->::message::DailyRewardSystemData::MergeFrom(from.dailyrewarddata()); } if (from.has_olduid()) { set_olduid(from.olduid()); } if (from.has_version()) { set_version(from.version()); } if (from.has_gamename()) { set_gamename(from.gamename()); } if (from.has_gamedownload()) { set_gamedownload(from.gamedownload()); } } }
int32 login(const std::string& cid, const std::string& pwd, int enc, const std::string& version) { int32 ret = 0; LoginRequest lgr; lgr.set_cid(cid); lgr.set_enc(enc); lgr.set_version(version); std::string s = cid + pwd + version + ef::itostr(time(NULL)); std::string tk; ef::MD5Hex(tk, (const ef::uint8*)s.data(), s.size()); lgr.set_token(tk); m_cid = cid; m_pwd = pwd; LoginResponse lgresp; std::string req; lgr.SerializeToString(&req); std::string rsp; ret = send_req(100, req); if(ret < 0) { LOG_OUT << "test_login send fail, cid:" << m_cid << std::endl; return ret; } int32 cmd = 0; ret = recv_resp(cmd, rsp); if(ret <= 0) { LOG_OUT << "login recv_resp fail, cid:" << m_cid << std::endl; return ret; } //redirect if(cmd == 1001) { RedirectResponse rdresp; rdresp.ParseFromString(rsp); disconnect(); if(rdresp.status() != 0 || !rdresp.addrs_size()) { return -1; } int i = 0; for(; i < rdresp.addrs_size(); ++i) { const Address& a = rdresp.addrs(i); LOG_OUT << "test_login redirect, cid:" << m_cid << ", addr:" << a.ip() << ", port:" << a.port() << std::endl; ret = bind_connect(a.ip(), a.port(), m_local_ip, m_local_port); if(ret < 0) { LOG_OUT << "test_login redirect fail, cid:" << m_cid << std::endl; } else { break; } } if(i < rdresp.addrs_size()) return login(m_cid, pwd, enc, version); } lgresp.ParseFromString(rsp); if(lgresp.status() == 0) { LOG_OUT << "test_login success: cid:" << m_cid << ", sessid:" << lgresp.sessid() << std::endl; } else { LOG_OUT << "test_login fail: cid:" << m_cid << ", status:" << lgresp.status() << std::endl; return -1; } m_sessid = lgresp.sessid(); ++success_count; return ret; }
int32 login(const std::string& cid, const std::string& version, const std::string& token){ int32 ret = 0; LoginRequest lgr; string enctk; if(token.size()){ ef::encrypt(token, enctk); } lgr.set_id(cid); lgr.set_type(-1); lgr.set_version(version); lgr.set_token(enctk); m_cid = cid; m_token = token; LoginResponse lgresp; std::string req; lgr.SerializeToString(&req); std::string rsp; ret = send_req(100, req); if(ret < 0){ LOG_OUT << "test_login send fail, cid:" << m_cid << std::endl; return ret; } int32 cmd = 0; ret = recv_resp(cmd, rsp); if(ret <= 0){ LOG_OUT << "login recv_resp fail, cid:" << m_cid << std::endl; return ret; } //redirect if(cmd == 1001){ RedirectResponse rdresp; rdresp.ParseFromString(rsp); disconnect(); if(rdresp.status() != 0 || !rdresp.addrs_size()){ return -1; } int i = 0; for(; i < rdresp.addrs_size(); ++i){ const Address& a = rdresp.addrs(i); LOG_OUT << "test_login redirect, cid:" << m_cid << ", addr:" << a.ip() << ", port:" << a.port() << std::endl; ret = bind_connect(a.ip(), a.port(), m_local_ip, m_local_port); if(ret < 0){ LOG_OUT << "test_login redirect fail, cid:" << m_cid << std::endl; }else{ break; } } if(i < rdresp.addrs_size()) return login(m_cid, version, token); } lgresp.ParseFromString(rsp); if(lgresp.status() == 0){ LOG_OUT << "test_login success: cid:" << m_cid << ", sessid:" << lgresp.sessid() << std::endl; }else{ LOG_OUT << "test_login fail: cid:" << m_cid << ", status:" << lgresp.status() << std::endl; return -1; } m_sessid = lgresp.sessid(); ++success_count; if(token.size()){ m_key = token + m_sessid; } return ret; }