
-- 2012 Gru 03 12:35 --
man rodos cia kazkur reiktu pakeist kad padaryti visi mire ir spec mato info visalaika. ar klystu?:)
Code: Select all
/// <summary>Sends the information query packets to all other servers.</summary>/// <summary>This sends the UDP server information query packets in old and new style HL format to all servers in the list.</summary>/// <summary>Receiving of server data is handled by <seealso name="receive_serverquery_answers"/>.</summary>/// <seealso name="receive_serverquery_answers"/>public query_servers(){ new nCheckMethod = get_pcvar_num(cvar_check_method) if (nCheckMethod == 0) return PLUGIN_HANDLED new socket_error new sOldRequest[12] new sNewRequest[26] if (nCheckMethod == 1) { // we don't know what server it is so send both old and new style query format(sOldRequest, 8, "%c%c%c%c%s", 255, 255, 255, 255, "ping") format(sNewRequest, 5, "%c%c%c%c%c", 255, 255, 255, 255, 105) } else if (nCheckMethod == 2) { // we don't know what server it is so send both old and new style query format(sOldRequest, 11, "%c%c%c%c%s", 255, 255, 255, 255, "details") format(sNewRequest, 25, "%c%c%c%c%c%s%c", 255, 255, 255, 255, 84, "Source Engine Query", 0) } new nServerCount = 0 new nQuerySocket new nCmdBackup new nSendCount while (nServerCount < g_nServerCount) { if (nServerCount != g_nOwnServer) { nQuerySocket = g_naServerSockets[nServerCount] // first we clear the current receive buffer - we are sending a new request and don't care for old data anymore if (nQuerySocket > 0) { new sEmptyBufferDummy[512] new nEndlessProtection = 0 while ((socket_change(nQuerySocket, 1)) && (nEndlessProtection < 500)) { //log_amx("emptying socket %i (%s)", nQuerySocket, g_saServerNames[nServerCount]) socket_recv(nQuerySocket, sEmptyBufferDummy, 512) nEndlessProtection++ } if (nEndlessProtection >= 500) { socket_close(nQuerySocket) log_amx("WARNING: endless protection triggered for socket %i (%s)", nQuerySocket, g_saServerNames[nServerCount]) } } else { // socket debug //log_amx("opening socket for server %i (%s)", nServerCount, g_saServerNames[nServerCount]) if (!equal(g_saServerLocalAddresses[nServerCount], "")) nQuerySocket = socket_open(g_saServerLocalAddresses[nServerCount], g_naServerPorts[nServerCount], SOCKET_UDP, socket_error) else nQuerySocket = socket_open(g_saServerAddresses[nServerCount], g_naServerPorts[nServerCount], SOCKET_UDP, socket_error) // socket debug //log_amx("opened socket %i for server %i (%s)", nQuerySocket, nServerCount, g_saServerNames[nServerCount]) } if ((nQuerySocket > 0) && (socket_error == 0)) { g_naServerSockets[nServerCount] = nQuerySocket nCmdBackup = g_naServerCmdBackup[nServerCount] // socket debug //log_amx("sending query on socket %i for server %i (%s)", nQuerySocket, nServerCount, g_saServerNames[nServerCount]) if (nCheckMethod == 1) { for (nSendCount = -1; nSendCount < nCmdBackup; nSendCount++) socket_send2(nQuerySocket, sOldRequest, 8) for (nSendCount = -1; nSendCount < nCmdBackup; nSendCount++) socket_send2(nQuerySocket, sNewRequest, 5) } else if (nCheckMethod == 2) { for (nSendCount = -1; nSendCount < nCmdBackup; nSendCount++) socket_send2(nQuerySocket, sOldRequest, 11) for (nSendCount = -1; nSendCount < nCmdBackup; nSendCount++) socket_send2(nQuerySocket, sNewRequest, 25) } } else { g_naServerSockets[nServerCount] = 0 log_amx("%L", LANG_SERVER, "MSG_SOCKET_ERROR", socket_error, nServerCount) } } nServerCount++ } set_task(QUERY_TIMEOUT, "receive_serverquery_answers", TASKID_QUERY_RECEIVE) return PLUGIN_HANDLED}