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; }
int main(int argc, char * argv[]) { try { Options options; options.descriptions.add_options() ("show-urls", "Show all the capability URLs") ; if (!options.ParseCommandLine(argc, argv)) { return 0; } RetsSessionPtr session = options.RetsLogin(); if (!session) { cout << "Login failed\n"; return -1; } cout << "Logged in\n"; LoginResponse * login = session->GetLoginResponse(); CapabilityUrls * urls = session->GetCapabilityUrls(); cout << "Member name: " << login->GetMemberName() << endl; cout << "Search URL: " << urls->GetSearchUrl() << endl; cout << "Action:\n" << session->GetAction() << endl; if (session->GetDetectedRetsVersion() >= RETS_1_8) { try { cout << "User ID:" << login->GetUserID() << endl; cout << "User Class: " << login->GetUserClass() << endl; cout << "User Level: " << login->GetUserLevel() << endl; cout << "Agent Code: " << login->GetAgentCode() << endl; if (options.count("verbose")) { cout << "Broker Code: " << login->GetBrokerCode() << endl; cout << "Broker Branch: " << login->GetBrokerBranch() << endl; cout << "Metadata ID: " << login->GetMetadataID() << endl; cout << "Metadata Version: " << login->GetMetadataVersion() << endl; cout << "Metadata Timestamp: " << login->GetMetadataTimestamp() << endl; cout << "Min Metadata Timestamp: " << login->GetMinMetadataTimestamp() << endl; cout << "Balance: " << login->GetBalance() << endl; cout << "Timeout Seconds: " << login->GetTimeout() << endl; cout << "Password Expiration: " << login->GetPasswordExpire() << endl; cout << "Password Expiration Warn: " << login->GetWarnPasswordExpirationDays() << endl; cout << "OfficeList: " << login->GetOfficeList() << endl; cout << "Standard Names Version: " << login->GetStandardNamesVersion() << endl; cout << "Vendor Name: " << login->GetVendorName() << endl; cout << "Server Product Name: " << login->GetServerProductName() << endl; cout << "Operator Name: " << login->GetOperatorName() << endl; cout << "Role Name: " << login->GetRoleName() << endl; cout << "Support Contact Information: " << login->GetSupportContactInformation() << endl; } } catch (RetsException & e) { /* * The ServerInformation Transaction is not supported. * Continue silently. */ } } if (options.count("show-urls")) { /* * Action and Search URLs unconditionally shown above. */ cout << "Change Password URL: " << urls->GetChangePasswordUrl() << endl; cout << "GetObject URL: " << urls->GetGetObjectUrl() << endl; cout << "Login Complete URL: " << urls->GetLoginCompleteUrl() << endl; cout << "Logout URL: " << urls->GetLogoutUrl() << endl; cout << "GetMetadata URL: " << urls->GetGetMetadataUrl() << endl; cout << "ServerInformation URL: " << urls->GetServerInformationUrl() << endl; cout << "Update URL: " << urls->GetUpdateUrl() << endl; if (session->GetDetectedRetsVersion() >= RETS_1_8) { cout << "Payload List URL: " << urls->GetPayloadListUrl() << endl; } cout << endl; } if (session->GetDetectedRetsVersion() == RETS_1_7) { try { ServerInformationResponseAPtr serverInfo = session->GetServerInformation(); if (serverInfo.get()) { StringVector parameters = serverInfo->GetParameters(); StringVector::const_iterator i; for (i = parameters.begin(); i != parameters.end(); i++) { if (i->empty()) { continue; } cout << *i << ": " << serverInfo->GetValue(*i) << endl; } } } catch (RetsException & e) { /* * The ServerInformation Transaction is not supported. * Continue silently. */ } } if (session->GetDetectedRetsVersion() >= RETS_1_8) { try { PayloadListResultSetAPtr payloadList = session->GetPayloadList(""); if (options.count("verbose")) { cout << setw(15) << "Class" << ": " << setw(0) << payloadList->GetPayloadClass() << endl; cout << setw(15) << "Resource" << ": " << setw(0) << payloadList->GetPayloadResource() << endl; cout << setw(15) << "Date" << ": " << setw(0) << payloadList->GetPayloadDate() << endl; cout << setw(15) << "Version" << ": " << setw(0) << payloadList->GetPayloadVersion() << endl << endl; } while (payloadList->HasNext()) { StringVector columns = payloadList->GetColumns(); StringVector::const_iterator i; for (i = columns.begin(); i != columns.end(); i++) { string column = *i; cout << setw(15) << column << ": " << setw(0) << payloadList->GetString(column) << endl; } cout << endl; } } catch (RetsException & e) { /* * The GetPayloadList Transaction is not supported. */ cout << e.what() << endl; } } LogoutResponseAPtr logout = session->Logout(); cout << "Logged out\n"; if (logout.get()) { cout << "Billing information: " << logout->GetBillingInfo() << endl; cout << "Connect time: " << logout->GetConnectTime() << endl; cout << "Message: " << logout->GetLogoutMessage() << endl; } } catch (RetsException & e) { e.PrintFullReport(cerr); return 1; } catch (exception & e) { cerr << e.what() << endl; return 2; } return 0; }
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; }
int CliCon::handleLoginRequest(const head& h, const string& req, string& resp){ TimeRecorder t("CliCon::handleLoginRequest"); int ret = 0; int i = 0; LoginRequest lgreq; LoginResponse lgresp; string tk; string sessid; string enctk; if(!lgreq.ParseFromArray(req.data(), req.size())){ ret = INPUT_FORMAT_ERROR; goto exit; } //if login, return the sessid if(m_status == STATUS_LOGIN){ goto exit; } m_login_time = time(NULL); m_sess.set_id(lgreq.id()); m_sess.set_type(lgreq.type()); m_sess.set_consvid(m_serv->getConfig().ID); m_sess.set_version(lgreq.version()); ret = checkType(lgreq.type()); if(ret < 0){ ret = INVALID_TYPE; goto exit; } decorationName(m_serv->getConfig().ID, getId(), lgreq.id(), sessid); m_sess.set_sessid(sessid); for(; i < lgreq.kvs_size(); ++i){ *(m_sess.add_kvs()) = lgreq.kvs(i); } if(lgreq.type() > 0){ TypeMap::addServer(this); } ret = updateSession(); if(ret < 0){ ret = CREATE_SESSION_FAIL; } exit: if(ret < 0){ lgresp.set_status(ret); }else{ m_status = STATUS_LOGIN; lgresp.set_status(0); } lgresp.set_sessid(m_sess.sessid()); lgresp.SerializeToString(&resp); ALogError("ConnectServer") << "<action:client_login> <id:" << m_sess.id() << "> <version:" << lgreq.version() << "> <type:" << lgreq.type() << "> <token:" << lgreq.token() << "> <sessid:" << m_sess.sessid() << "> <status:" << ret << "> <errstr:" << getErrStr(ret) << ">"; return ret; }
void MainWindow::onLoginComplete ( QString inst, LoginResponse response ) { QMessageBox::information ( this, "Login Successful", QString ( "Logged in as %1 with session ID %2. Instance: %3" ). arg ( response.username(), response.sessionID(), inst ) ); }
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; }
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()); } } }
//连接网关服务器成功后,服务器自动推送消息,返回网关服务器列表 bool LoginLayerUC::ProcessMsg(int type, google::protobuf::Message *msg) { m_iCurrentType = type; switch (type) { case ServerListMsg: { unschedule(schedule_selector(LoginLayerUC::scheduleForConnectGateServer)); CCLOG("ServerListMsg"); ServerList* serverInfo = (ServerList*)msg; m_serverInfo = *serverInfo; m_pLoading->setVisible(false); //没有服务器列表弹框提示 if(m_serverInfo.server_list().size()<=0) { ShowPopTextTip(GETLANGSTR(207)); return false; } //读取上一次登录选择的服务器 std::string sServerGame = CCUserDefault::sharedUserDefault()->getStringForKey(SERVER_FOR_GAME); m_iSelectServerIndex = getServerIndex(sServerGame); //读取更新服务器列表 std::string sUpdateServer = serverInfo->update_server(); if(sUpdateServer.compare("") != 0) { CCUserDefault::sharedUserDefault()->setStringForKey(SERVER_FOR_UPDATE, sUpdateServer); CCUserDefault::sharedUserDefault()->flush(); } //版本更新 bool bUpdate = GamePlatformMgr->VersionUpdateWithPlatform( serverInfo->game_version() ); if(!bUpdate) { initLogin(); } } break; case LoginResponseMsg: { LoginResponse *loginResponse = (LoginResponse *)msg; printf("%d,%d,",loginResponse->authrecode(),loginResponse->hasrole()); printf("\n name = %s ,...", loginResponse->GetDescriptor()->name().c_str()); int res =loginResponse->authrecode(); //登录成功, if (res==0) { if (loginResponse->hasrole()) { for (int i=0; i<loginResponse->rolelist_size();i++) { protos::common::Role role = loginResponse->rolelist(i); printf("role id:%d rolename:%s, rolelv: %d", role.roleid(), U8(role.rolename().c_str()),role.rolelv()); CNetClient::getShareInstance()->sendInGameReq(role.roleid()); break; } } else { m_armature->getAnimation()->play("enter"); this->runAction(CCSequence::createWithTwoActions(CCDelayTime::create(0.7f), CCCallFunc::create(this, callfunc_selector(LoginLayerUC::callbackForSound)))); removeLogin(); } } //0x01服务器人数上限,0x02账号禁止登录,0x03账号验证错误) else if (res==1) { ShowTexttip(GETLANGSTR(227),RGB_RED,0,ccp(VCENTER.x,VCENTER.y+150),0.0f,2.0f,0.0f,20.0f); } else if (res==2) { ShowTexttip(GETLANGSTR(228),RGB_RED,0,ccp(VCENTER.x,VCENTER.y+150),0.0f,2.0f,0.0f,20.0f); } else if (res==3) { ShowTexttip(GETLANGSTR(165),RGB_RED,0,ccp(VCENTER.x,VCENTER.y+150),0.0f,2.0f,0.0f,20.0f); } else if(res==4) { ShowTexttip(GETLANGSTR(1155),RGB_RED,0,ccp(VCENTER.x,VCENTER.y+150),0.0f,2.0f,0.0f,20.0f); } return true; } break; //进入游戏 case InGameResponseMsg: { InGameResponse *inRespon = (InGameResponse*)msg; protos::common::Role role = inRespon->myrole(); printf("role id:%d rolename:%s, rolelv: %d", role.roleid(), U8(role.rolename().c_str()),role.rolelv()); UserData* userData = DataCenter::sharedData()->getUser()->getUserData(); userData->setRaceType(role.rolenation()); userData->setAliveID(role.roleid()); userData->setRoleID(role.roleid()); userData->setLevel(role.rolelv()); userData->setName(role.rolename().c_str()); userData->setCoin(role.rolecoin()); userData->setExp(role.roleexp()); userData->setNextExp(role.nextexp()); userData->setRoleAction(role.roleaction()); userData->setRoleGold(role.rolegold()); userData->read(role); m_armature->getAnimation()->play("enter"); this->runAction(CCSequence::createWithTwoActions(CCDelayTime::create(0.7f), CCCallFunc::create(this, callfunc_selector(LoginLayerUC::callbackForSound)))); removeLogin(); return true; } break; default: break; } return false; }