示例#1
0
ProcessProperties ProcessInfo::GetProcessProperties(DWORD processId, const std::string& processName)
{
	auto uid = GetUid(processId, processName);
	ProcessProperties props(m_processProperties[uid]);
	props.uid = uid;
	return props;
}
示例#2
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;
}
示例#3
0
int main(int argc, char *argv[])
{
#ifdef _WIN32
	nodaemon = 1;
	WSADATA wsadata;
	WSAStartup(0x0202, &wsadata);
#endif

	SOCKET s = INVALID_SOCKET;

	s = socket(AF_INET6, SOCK_STREAM, 0);

	if (s != INVALID_SOCKET)
	{
		HaveIPv6Stack = 1;
		close(s);
		s = INVALID_SOCKET;
	}

	s = socket(AF_INET, SOCK_STREAM, 0);

	if (s != INVALID_SOCKET)
	{
		HaveIPv4Stack = 1;
		close(s);
	}

	int o;
	const static char* const optstring = "u:g:L:p:i:P:l:r:feD46";
	
	for (opterr = 0; ( o = getopt(argc, argv, optstring) ) > 0; ) switch (o)
	{
		case '4':
			if (!HaveIPv4Stack)
			{
				fprintf(stderr, "Fatal: Your system does not support %s.\n", cIPv4);
				return !0;
			}
			v4required = 1;
			break;
		case '6':
			if (!HaveIPv6Stack)
			{
				fprintf(stderr, "Fatal: Your system does not support %s.\n", cIPv6);
				return !0;
			}
			v6required = 1;
			break;
		case 'p':
			fn_pid = optarg;
			break;
		case 'i':
			fn_ini = optarg;
			break;
		case 'l':
			fn_log = optarg;
			break;
		case 'L':
			maxsockets++;
			break;
		case 'f':
			nodaemon = 1;
			logstdout = 1;
			break;
		case 'D':
			nodaemon = 1;
			break;
		case 'e':
			logstdout = 1;
			break;
		case 'r':
			RandomizationLevel = atoi(optarg);
			if (RandomizationLevel < 0 || RandomizationLevel > 2) RandomizationLevel = 1;
			break;
		case 'g':
			if (GetGid()) return !0;
			break;
		case 'u':
			if (GetUid()) return !0;
			break;
		case 'P':
			break;
		default:
			Usage(argv[0]);
			return !0;
	}

	if (optind != argc)
	{
		Usage(argv[0]);
		return !0;
	}

	int allocsockets = maxsockets ? maxsockets : 2;
	SocketList = malloc(allocsockets * sizeof(SOCKET));

#if defined(__BSD__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__)
	optind = 1;
	optreset = 1; // Makes BSD getopt happy
#else
	optind = 0; // Makes GLIBC getopt happy
#endif

	for (opterr = 0; ( o = getopt(argc, argv, optstring) ) > 0; ) switch (o)
	{
		case 'L':
			AddSocketAddress(optarg);
			break;
		case 'P':
			defaultport = optarg;
			break;
		default:
			break;
	}

	if (!maxsockets)
	{
		if (HaveIPv6Stack && (v6required || !v4required)) AddSocketAddress("::");
		if (HaveIPv4Stack && (v4required || !v6required)) AddSocketAddress("0.0.0.0");
	}

	if (!numsockets)
	{
		fprintf(stderr, "Fatal: Could not listen on any socket.\n");
		return !0;
	}

#ifndef _WIN32
	if ((gid != INVALID_GID && setgid(gid)) || (uid != INVALID_GID && setuid(uid)))
	{
		fprintf(stderr, "Fatal: setgid/setuid for %s failed.\n", optarg);
		return !0;
	}

#endif

	if (RandomizationLevel == 1)
	{
		int i;
		srand((unsigned int)time(NULL));
		int serverType = rand() % _countof(HostOS);
		int16_t lang = LcidList[rand() % _countof(LcidList)];

		for (i = 0; i < _countof(RandomPid); i++)
		{
			GenerateRandomPid(AppList[i].guid, RandomPid[i], serverType, lang);
		}
	}

#ifndef _WIN32 // Windows has no fork or signal handling
	if ( !nodaemon) if (daemon(!0, logstdout))
	{
		fprintf(stderr, "Fatal: Could not daemonize to background.\n");
		return errno;
	}

	{
		struct sigaction sa =
		{
			.sa_handler = SIG_IGN,
			.sa_flags   = SA_NOCLDWAIT
		};

		if ( sigemptyset(&sa.sa_mask) || sigaction(SIGCHLD, &sa, 0) )
			return errno;
	}
#endif

	logger("KMS emulator started successfully\n");

	if (fn_pid)
	{
		FILE *_f = fopen(fn_pid, "w");

		if ( _f ) {
			fprintf(_f, "%u", getpid());
			fclose(_f);
		}
		else
		{
			logger("Warning: Cannot write pid file.\n");
		}
	}

	srand( (int)time(NULL) );

	RpcAssocGroup = rand();

	for (;;)
	{
		socklen_t len;
		struct sockaddr_storage addr;
		SOCKET s_client;

		for (;;) if ( (s_client = network_accept_any(SocketList, numsockets, NULL, NULL)) < 0 )
		{
			if ( errno != EINTR )
				return errno;
		}
		else break;

		RpcAssocGroup++;
		len = sizeof addr;

		if (getsockname(s_client, (struct sockaddr*)&addr, &len) ||
				getnameinfo((struct sockaddr*)&addr, len, NULL, 0, RpcSecondaryAddress, sizeof(RpcSecondaryAddress), NI_NUMERICSERV))
		{
			strcpy(RpcSecondaryAddress, "1688"); // In case of failure use default port (doesn't seem to break activation)
		}

		RpcSecondaryAddressLength = LE16(strlen(RpcSecondaryAddress) + 1);

#ifndef _WIN32
		int pid;
		if ( (pid = fork()) < 0 )
			return errno;

		else if ( pid )
			close(s_client);

		else
#endif
		{
			char ipstr[256], text[256];

			struct timeval to = {
				.tv_sec  = 60,
				.tv_usec = 0
			};

			setsockopt(s_client, SOL_SOCKET, SO_RCVTIMEO, (char*)&to, sizeof(to));
			setsockopt(s_client, SOL_SOCKET, SO_SNDTIMEO, (char*)&to, sizeof(to));
			len = sizeof addr;

			if (getpeername(s_client, (struct sockaddr*)&addr, &len) ||
					!ip2str(ipstr, sizeof(ipstr), (struct sockaddr*)&addr, len))
			{
				*ipstr = 0;
			}

			char *connection_type = addr.ss_family == AF_INET6 ? cIPv6 : cIPv4;
			static char *const cAccepted = "accepted";
			static char *const cClosed = "closed";
			static char *const fIP = "%s connection %s: %s.\n";

			CloseAllListeningSockets();
			sprintf(text, fIP, connection_type, cAccepted, ipstr);
			if (*ipstr) logger(text);
			RpcServer(s_client);
#ifdef _WIN32
			shutdown(s_client, SD_BOTH);
#endif
			close(s_client);

			sprintf(text, fIP, connection_type, cClosed, ipstr);
			if (*ipstr) logger(text);
#ifndef _WIN32
			return 0;
#endif
		}
	}

	unlink(fn_pid);
	CloseAllListeningSockets();
	return 0;
}