예제 #1
0
파일: server_conn.cpp 프로젝트: ACEZLY/gim
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;
}
예제 #3
0
파일: test.cpp 프로젝트: CharmingZhou/gim
    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;
    }
예제 #4
0
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;
}
예제 #5
0
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 ) );
}
예제 #6
0
파일: test.cpp 프로젝트: ACEZLY/gim
	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;
	}
예제 #7
0
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());
    }
  }
}
예제 #8
0
//连接网关服务器成功后,服务器自动推送消息,返回网关服务器列表
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;
}