|
Member
|
12-23-2016
, 19:45
Re: [CS:GO] Check different server info
|
#4
|
Use socket to send mesage and get return.
Take it
Spoiler
public Action LoadServersInfo(int client, int args)
{
PrintToChat(client, " \x02[NAPI] \x04In Progress..");
Handle Socket_svr = SocketCreate(SOCKET_UDP, OnSocketError);
SocketSetArg(Socket_svr, client);
SocketConnect(Socket_svr, OnSocketConnected, OnSocketReceive, OnSocketDisconnected, IP_Adress, Port);
}
public OnSocketConnected(Handle sock, any i)
{
char requestStr[25];
Format(requestStr, sizeof(requestStr), "%s", "\xFF\xFF\xFF\xFF\x54Source Engine Query");
SocketSend(sock, requestStr, 25);
}
public OnSocketReceive_DR(Handle sock, char[] receiveData, const dataSize, any i )
{
char srvName[160];
char srvMap[64];
char gameDir[160];
char gameDesc[160];
int players;
int maxplayers;
int offset = 2;
srvName = GetString(receiveData, dataSize, offset);
offset += strlen(srvName) + 1;
srvMap = GetString(receiveData, dataSize, offset);
offset += strlen(DR_Mapa) + 1;
gameDir = GetString(receiveData, dataSize, offset);
offset += strlen(gameDir)+ 1;
gameDesc = GetString( receiveData, dataSize, offset);
offset += strlen(gameDesc) + 1;
offset += 2;
players = GetByte(receiveData, offset);
offset++;
maxplayers = GetByte(receiveData, offset);
CloseHandle(sock);
}
public OnSocketDisconnected( Handle:sock, any:i )
{
CloseHandle(sock);
}
public OnSocketError(Handle sock, const errorType, const errorNum, any i )
{
CloseHandle(sock);
}
stock int GetByte(char[] receiveData, int offset )
{
return receiveData[offset];
}
stock char GetString(char[] receiveData, int dataSize, int offset)
{
char serverStr[160] = "";
int j = 0;
for(int i = offset; i < dataSize; i++)
{
serverStr[j] = receiveData[i];
j++;
if(receiveData[i] == '\x0')
{
break;
}
}
return serverStr;
}
|
|
|
|