Resultados Sockets Async
#1
Todo bien hasta la hora de obtener los datos,

Cita:HTTP/1.1 200 OK
Date: Mon, 22 Apr 2019 03:27:50 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.27
Vary: Accept-Encoding
Content-Length: 164
Content-Type: text/html

Los datos
Solo quiero "Los datos y omitir lo de arriba"
Código PHP:
public fw_sockConnected(SOCKET:socketcustomID)
{
    
server_print("*[%s]: Connection successful."sockets_name[customID])

    switch(
customID)
    {
        case 
SOCK_DOWNLOAD:
        {
            new 
data[256]
            
            
formatex(datacharsmax(data),
                
"GET %s HTTP/1.1^r^nHost: %s^r^n^r^n",
                
download_scriptdownload_host)

            new 
len socket_send(socketdata)
            
server_print("*[%s]: Send Packet: %d/%d"sockets_name[customID], lenstrlen(data))

            
g_write_download fopen(download_savefile"wb")
        }
    }
}

public 
fw_sockReadable(SOCKET:socketcustomIDtype)
{
    
server_print("*[%s]: Ready to read data - type:(%d)"sockets_name[customID], type)
    
    new 
data[1024], len
    
    
if(type == SOCK_TYPE_TCP)
    {
        do {
            
len socket_recv(socketdatacharsmax(data))

            if(
len <= 0)
            {
                if(
len == -1)
                
server_print("*ERROR [%s]: Recv: error"sockets_name[customID])
                else {
                    
server_print("*ERROR [%s]: Recv: No data: Close socket"sockets_name[customID])
                    
socket_close(socket)
                }
                break
            }

            if(
customID == SOCK_DOWNLOAD)
            {
                
server_print("*[%s]: Recv: size:(%d) - strlen(%d)",
                    
sockets_name[customID], lenstrlen(data))

                
fwrite_blocks(g_write_downloaddatalenBLOCK_BYTE)
            }
            else {
                
server_print("*[%s]: Recv: size:(%d) - strlen(%d) - packet:[%s]",
                    
sockets_name[customID], lenstrlen(data), data)
            }

        } 
        while(
len == charsmax(data))
    }

[Imagen: 76561198090851442.png]
Responder
#2
Añade un separador, y lo utilizas con un explode

ejemplo: (no sirve el codigo de redirección por la actualizacion del 20 de marzo 2019)
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <sockets_async>
#include <chatcolor>

#pragma semicolon 1

new const PluginInfo[][] = { "[MXS] Servidores""v1.0""totopizza" };

//Datos del Socket
new SOCKET:iSocket;
enum {
    
SOCKET:SOCK_GET_SERVERS,
    
SOCK_CLIENT
}
new const 
SOCK_HOSTNAME[] = "www.mexicanservers.com";
const 
SOCK_PORT 443;

//Datos de la lista de servers;
#define MAX_SERVER 32
new bool:is_load_server;

new const 
filename[] = "extra/cs/servers.txt";

new 
TempList[] = "addons/amxmodx/data/servers.txt";
new 
TempListDebug[] = "addons/amxmodx/data/servers_debug.txt";

new const 
szServers[MAX_SERVER][64];
new const 
szServersIP[MAX_SERVER][40];


enum ServerStatus {
    
Off=0,
    
On,
    
Closed
};

new 
ServerStatus:iServersStatus[MAX_SERVER];
new 
total_servers;

//Datos del server
new szIP[40];
new 
serverid=-1;


#define TAG "[MXS]"
#define PREFIX "^4[MXS]^3"


new const szServerCommand[][] = {
    
"say /servers""say /server""say /servidores",
    
"say_team /servers""say_team /server""say_team /servidores"
};

new 
Float:g_timewait;
public 
plugin_init() {
    
register_plugin(PluginInfo[0], PluginInfo[1], PluginInfo[2]);    
    
total_servers 0;
    
    
get_user_ip(0szIPcharsmax(szIP));
    
set_task(2.0"create_sokets");
    
    for(new 
i=0sizeof szServerCommandi++)
        
register_clcmd(szServerCommand[i], "clcmdServer");
        
    
set_task(300.0"task_message", .flags="b");
    
    
register_clcmd("mxs_reload_servers""clcmdReloadServers");
}

public 
clcmdReloadServers(id)
{
    if(!(
get_user_flags(id) & ADMIN_CVAR))
    {
        
console_print(id"[MXS] No tienes acceso a este comando.");
        return 
PLUGIN_HANDLED;
    }
    
    if(
g_timewait get_gametime())
    {
        
console_print(id"[MXS] Este comando ya se ha usado anteriormente.");
        
console_print(id"[MXS] Debes esperar %d segundo%s"floatround(g_timewait-get_gametime()),
            
floatround(g_timewait-get_gametime()) == "":"s");
            
        return 
PLUGIN_HANDLED;
    }
    
    
g_timewait get_gametime()+180;
    
total_servers 0;
    
szServers[0][0] = '^0';
    
console_print(id"[MXS] Tiempo estimado: 5 segundos...");
    
set_task(2.0"create_sokets");
    
set_task(5.0"show_msg"id);
    
    new 
name[32];
    
get_user_name(idname31);
    
log_amx("[MXS] %s ejecuto el comando para volver a cargar la lista de servidores."name);
    
    return 
PLUGIN_HANDLED;
}

public 
show_msg(id)
{
    
console_print(id"[MXS] El comando se ha ejecutado correctamente..");
    
console_print(id"[MXS] Verifica que se haya cargado la nueva lista..");
}
public 
clcmdServer(id)
{
    if(
equal(szServers[0], ""))
        
client_print_color(idid"%s No hay servidores en la lista..."PREFIX);
    else if(
is_load_server)
    {
        new 
szText[128];
        
        
formatex(szTextcharsmax(szText), "\r%s \yLista de Servidores"TAG);
        new 
menu menu_create(szText"menu_servers_mxs");
        for(new 
i=0total_serversi++)
        {
            if(
== serverid)
                
formatex(szTextcharsmax(szText), "\r%s \d%s \y| Mexican Servers | \dACTUAL"TAGszServers[i]);
            else
            {
                switch(
iServersStatus[i])
                {
                    case 
Offformatex(szTextcharsmax(szText), "\r%s \d%s | Mexican Servers | \rSERVIDOR OFF"TAGszServers[i]);
                    case 
Onformatex(szTextcharsmax(szText), "\r%s \y%s | Mexican Servers |"TAGszServers[i]);
                    case 
Closedformatex(szTextcharsmax(szText), "\r%s \d%s | Mexican Servers |\r EN MANTENIMIENTO"TAGszServers[i]);
                }
            }
            
            
menu_additem(menuszText"");
        }
        
        
menu_setprop(menuMPROP_EXITNAME"\rSalir");
        
menu_setprop(menuMPROP_NUMBER_COLOR"\w");
        
        
menu_display(idmenu0);
    }
    else
        
client_print_color(idid"%s Ocurrio un error al obtener la lista de servidores.");
}

public 
menu_servers_mxs(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        return;
    }
    
    
menu_destroy(menu);
    if(
item == serverid)
    {
        
client_print_color(idid"%s Ya estas en el servidor:^1 %s"PREFIXszServers[item]);
        
clcmdServer(id);
    }
    else
    {
        if(
iServersStatus[item] == Off)
        {
            
client_print_color(idid"%s Este servidor esta APAGADO:^1 %s"PREFIXszServers[item]);
            return;
        }
        else if(
iServersStatus[item] == Closed)
        {
            
client_print_color(idid"%s Este servidor esta en MANTENIMIENTO:^1 %s"PREFIXszServers[item]);
            return;
        }
        
        new 
szNick[32];
        
get_user_name(idszNick31);
        
        
client_cmd(id"setinfo ^"ysv^" ^"%d^""serverid);
        
client_print_color(00"%s^1 %s^3 ha sido enviado al servidor:^1 %s"PREFIXszNickszServers[item]);
        
client_cmd(id"echo ^"Enviando al Servidor %Mexican Servers |.^";^"connect^"%s"szServers[item], szServersIP[item]);
    }
    
    return;    
}
public 
client_putinserver(id)
{
    static 
redirect_info[2];
    
get_user_info(id"ysv"redirect_info1);
    
    if (
equal(redirect_info"")) // Si esta vacio no continuamos
        
return;
    
    
// Obtener nick
    
new szNick[32];
    
get_user_name(idszNickcharsmax(szNick));
    
    new 
bool:server_registered=false;
    if(
str_to_num(redirect_info) > && str_to_num(redirect_info) <= (total_servers-1))
        
server_registered true;
        
    
client_print_color(00"%s^1 %s^3 ha sido redirigido aqui desde el servidor:^1 %s",
        
PREFIXszNick, (server_registered szServers[str_to_num(redirect_info)]: "(Desconocido)"));
    
set_task(1.0"TaskResetInfo"id);
}

public 
TaskResetInfo(id)
{
    if(
is_user_connected(id))
        
client_cmd(id"setinfo ^"ysv^" ^"^""); // Lo vaciamos
}
public 
task_message()
{
    if(
total_servers)
        
client_print_color(00"%s Escribe^4 /servers^3 para visitar cualquiera de nuestros^4 %d ^3servidores."PREFIXtotal_servers);
    else
        
client_print_color(00"%s Contacta a un miembro del ^x04 Staff^x01 para cargar la lista de servers."PREFIX);
}
public 
create_sokets()
{
    new 
result;
    
    
iSocket socket_create(SOCK_TYPE_TCPSOCK_GET_SERVERS);
    
    if(!
iSocket)
    {
        
log_to_file("socket.txt""*ERROR: Failed to create socket (SERVERS).");
        return;
    }
    
    
result socket_connect(iSocketSOCK_HOSTNAMESOCK_PORT);
    
check_connect_error(result);
}

check_connect_error(result)
{
    if(
result 0) return;
    
    if(
result == 0)
        
log_to_file("socket.txt""*ERROR: Failed to connect (SERVERS).");
    else
        
log_to_file("socket.txt""*ERROR: Invalid Hostname/IP (SERVERS).");
}

public 
fw_sockConnected(SOCKET:socketcustomID)
{
    
//log_to_file("socket.txt", "*SERVERS: Connection successful.");
    
    
new szQuery[1000];
    
formatex(szQuerycharsmax(szQuery),
    
"GET /%s HTTP/1.1^r^n\
    Host: https://%s^r^n\
    Connection: close^r^n^r^n"
,
    
filename,
    
SOCK_HOSTNAME
    
);
    
    
socket_send(iSocketszQuery);
    
//log_to_file("socket.txt", "*SERVERS: Send Packet: %d/%d", len, strlen(szQuery));
}

public 
fw_sockClosed(SOCKET:socketcustomIDerror)
{
    
//log_to_file("socket.txt", "*SERVERS: Connection closed, error num(%d)", error);
}

public 
fw_sockReadable(SOCKET:socketcustomIDtype)
{
    if(
type == SOCK_TYPE_TCP)
    {
        new 
szData[1024], len;
        
        
len socket_recv(socketszDatacharsmax(szData));
        
        if(
len <= 0)
        {
            if(
len == -1)
                
log_to_file("socket.txt""*ERROR: Recv: error (SERVERS).");
            else
            {
                
log_to_file("socket.txt""*ERROR: Recv: No Data: Close socket (SERVERS).");
                
socket_close(socket);
            }
            return;
        }
        
        if(
customID == SOCK_GET_SERVERS)
        {    
            
CreateTempList(szData);
            
socket_close(socket);
        }
    }
}

CreateTempList(szData[])
{
    if(
file_exists(TempList))
        
delete_file(TempList);
    
    new 
explode[2+1][500];
    new 
total=1total += ExplodeString(explode2charsmax(explode[]), szData'|');
    
    
write_file(TempListexplode[1]);
    
    
write_file(TempListDebugszData);
    
CreateListServer();
    
}

CreateListServer()
{
    new 
file fopen(TempList"r");
    new 
line[120];
    new 
servername[64], serverip[35], serverstatus[10];
    
    while(
file && !feof(file))
    {
        
fgets(filelinecharsmax(line));
        
        if(
line[0] == ';' || line[0] == '/' && line[1] == '/' || trim2(line))
            continue;
        
        
parse(lineservernamecharsmax(servername), serveripcharsmax(serverip), serverstatus9);
        
        
copy(szServers[total_servers], charsmax(szServers[]), servername);
        
copy(szServersIP[total_servers], charsmax(szServersIP[]), serverip);
        
        if(
equali(serverstatus"Off"))
            
iServersStatus[total_servers] = Off;
        else if(
equali(serverstatus"On"))
            
iServersStatus[total_servers] = On;
        else if(
equali(serverstatus"Closed"))
            
iServersStatus[total_servers] = Closed;
        else
            
iServersStatus[total_servers] = Off;
            
        if(
equal(serveripszIP))
            
serverid total_servers;
            
        
total_servers++;
    }
    
fclose(file);
    
delete_file(TempList);
    
    if(
total_servers)
    {
        if(
equal(szServers[0], ""))
        {
            
set_task(5.0"create_sokets");
            
log_amx("No se encontro ningun servidor, re-intentando en 5 segundos..."total_servers);
            
total_servers 0;
        }
        else
        {
            
log_amx("Servidores cargados correctamente: TOTAL CARGADOS: %d"total_servers);
            
is_load_server true;
        }
    }
}
/*Explode String*/
stock ExplodeString(p_szOutput[][], p_nMaxp_nSizep_szInput[], p_szDelimiter)
{
    new 
nIdx 0;
    new 
strlen(p_szInput);
    new 
nLen = (copyc(p_szOutput[nIdx], p_nSizep_szInputp_szDelimiter));
    
    while ((
nLen l) && (++nIdx p_nMax))
        
nLen += (copyc(p_szOutput[nIdx], p_nSizep_szInput[nLen], p_szDelimiter));
        
    return 
nIdx;
}
stock trim2(data[]) {
    
trim(data);
    if(
equali(data""))
        return 
true;
    else
        return 
false;
    
    return 
false;

[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder
#3
Gracias! Vere que hago!
[Imagen: 76561198090851442.png]
Responder
#4
Listo Gracias!
[Imagen: 76561198090851442.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)