コード例 #1
0
ファイル: register.cpp プロジェクト: peerswu/Jump
void Register::SetProfile(int32_t uid)
{
	//初始化账号信息
	PReginfo reginfo;
	InitReginfo(reginfo, uid);

	string reginfo_key = REGINFOPREFIX + _req.account();
	string reginfo_value = reginfo.SerializeAsString();


	//初始化profile
	InitProfile(uid);

	PPlayerId *player_id = _p_profile->mutable_player_id();
	//string profile_key = PROFILEPREFIX + I2S(player_id->uid()) + "_" + I2S(player_id->zone_id());
	string profile_key = CommFunc::getProfileKey(player_id->uid(), player_id->zone_id());
	string profile_value = _p_profile->SerializeAsString();


	auto got_reply = [&](Command<string>& c)
	{
		if(c.ok())
		{
			_pkg_head.ret = RET_OK;
			PProfile *rsp_profile = _rsp.mutable_profile();
			*rsp_profile = *_p_profile;

			//给客户端回包,流程结束
			Send2Client(_pkg_head, _rsp);
		}
		else
		{
			PPlayerId *player_id = _p_profile->mutable_player_id();
			PlayerID id;
			id.Init(*player_id);
			PlayerDataMgr::getInstance().Del(id);

			LOG_ERROR(_ctx, "SetProfile failed. cmd:%s status:%d", c.cmd().c_str(), c.status());

			//给客户端回包,流程结束
			_pkg_head.ret = RET_REDIS_ERR_SET;
			Send2Client(_pkg_head, _rsp);
		}

	};


	ServerEnv::getInstance().getRdx().command<string>({"MSET", reginfo_key, reginfo_value, profile_key, profile_value}, got_reply);

}
コード例 #2
0
void GUIAPI UpdateTopmostLayer (const RECT* dirty_rc)
{
    MSG msg = {0, MSG_PAINT, 0, 0, __mg_timer_counter};

    if (!mgIsServer)
        return;

    CHANGE_TOPMOST_LAYER(mgTopmostLayer);

    if (dirty_rc) {
        RECT eff_rc;
        IntersectRect (&eff_rc, dirty_rc, &g_rcScr);
        msg.wParam = MAKELONG (eff_rc.left, eff_rc.top);
        msg.lParam = MAKELONG (eff_rc.right, eff_rc.bottom);
    }

    Send2Client (&msg, CLIENTS_TOPMOST);

    PostMessage (HWND_DESKTOP, MSG_ERASEDESKTOP, 0, 0);
    SendMessage (HWND_DESKTOP, MSG_PAINT, 0, 0);
}
コード例 #3
0
ファイル: register.cpp プロジェクト: peerswu/Jump
void Register::GetUid()
{
	auto got_reply = [&](Command<int32_t>& c1)
	{
		if(c1.ok())
		{
			int32_t uid = UIDBASE + c1.reply();
			SetProfile(uid);
		}
		else
		{
			LOG_ERROR(_ctx, "GetUid failed. cmd:%s status:%d", c1.cmd().c_str(), c1.status());

			//给客户端回包,流程结束
			_pkg_head.ret = RET_REDIS_ERR_INCR;
			Send2Client(_pkg_head, _rsp);
		}


	};

	string key = UIDKEY;
	ServerEnv::getInstance().getRdx().command<int32_t>({"INCR", key}, got_reply);
}
コード例 #4
0
ファイル: register.cpp プロジェクト: peerswu/Jump
int32_t Register::Enter()
{
	LOG_DEBUG(_ctx, "cmd:0x%x body_len:%d client_fd:%d\n", _pkg_head.cmd, _pkg_head.body_len, _pkg_head.client_fd);

	__BEGIN_PROC__

	if(Init() != 0)
	{
		break;
	}

//	for(int32_t j=0; j<10000000; ++j)
//	{
//		PlayerID id;
//		id._uid = j;
//		id._zone_id = 1;
//		bool exist;
//		PProfile *p_profile = PlayerDataMgr::getInstance().Add(id, exist);
//		p_profile->Clear();
//
//		PTokenMoney *token_money = p_profile->mutable_token_money();
//		for(int32_t i=0; i<10000; ++i)
//		{
//			token_money->add_testfield(i);
//		}
//
//		if(j%10000 == 0)
//		{
//			printf("mem pool add repeated ok\n");
//		}
//		PlayerDataMgr::getInstance().Del(id);
//
//		if(j%10000 == 0)
//		{
//			printf("mem pool del ok\n");
//		}
//	}
//
//	return 0;


	//从redis拉取uid, uid和昵称全局唯一
	{
		//验证name是否唯一
		auto got_name_reply = [&](Command<string>& c)
		{

			if(c.status() == c.NIL_REPLY)
			{
				//name不存在,获取uid
				GetUid();

			}
			else
			{
				if(c.ok())
				{
					//昵称已被使用,给客户端回包,流程结束
					LOG_DEBUG(_ctx, "name duplicate. %s", _req.name().c_str());

					_pkg_head.ret = RET_REG_ERR_DUPLICATE_NAME;
				}
				else
				{
					//给客户端回包,流程结束
					LOG_ERROR(_ctx, "get name err. cmd:%s status:%d", c.cmd().c_str(), c.status());

					_pkg_head.ret =  RET_REDIS_ERR_GET;
				}

				Send2Client(_pkg_head, _rsp);
			}

		};

		string key = NICKPREFIX + _req.name();
		string value = "1";
		ServerEnv::getInstance().getRdx().command<string>({"GETSET", key, value}, got_name_reply);
	}



	__END_PROC__

	LOG_DEBUG(_ctx, "reg_req:\n%s", _req.DebugString().c_str());

	return 0;
}