| red_bull2oo6 |
08-02-2013 14:10 |
Re: [HELP] Sockets problem ( recieve )
i will try and edit with the result..
i think i`ll extract the code directly from .inc for only reason that i need it to be fast.
EDIT:
i tried something.. but its working in the same way..
PHP Code:
/* Plugin generated by AMXX-Studio */
#include < amxmodx > #include < sockets >
#define PLUGIN "Socket Test#2" #define VERSION "1.0"
enum _:iServerData { DATA[ 256 ], HOST[ 64 ], REQUEST[ 128 ], SOCKET, ERROR, DATABLOCKS, DATASTART, PACKETNUM }
new g_ServerData[ iServerData ];
public plugin_init( ) { register_plugin( PLUGIN, VERSION, "Askhanar" ); FormatHostAndRequest( ); set_task( 5.0, "GetPlayerInfo", 112233 ); // Add your code here... }
FormatHostAndRequest( ) { g_ServerData[ HOST ] = "gametracker.com"; formatex( g_ServerData[ REQUEST ], sizeof ( g_ServerData[ REQUEST ] ) -1,"GET /player/Askhanar/188.212.106.110:27015/ HTTP/1.1^r^nHost:%s^r^n^r^n", g_ServerData[ HOST ] ); }
public GetPlayerInfo( ) { if( g_ServerData[ SOCKET ] > 0 ) socket_close( g_ServerData[ SOCKET ] );
g_ServerData[ SOCKET ] = socket_open( g_ServerData[ HOST ], 80, SOCKET_TCP, g_ServerData[ ERROR ] ); if( g_ServerData[ ERROR ] == 0 && g_ServerData[ SOCKET ] > 0 ) { socket_send( g_ServerData[ SOCKET ], g_ServerData[ REQUEST ], strlen( g_ServerData[ REQUEST ] ) ); set_task( 0.1, "task_ReciveData", g_ServerData[ SOCKET ] ); } else { switch( g_ServerData[ ERROR ] ) { case 1: log_amx("[ERROR] Unable to create socket." ); case 2: log_amx("[ERROR] Unable to connect to hostname." ); case 3: log_amx("[ERROR] Unable to connect to the HTTP port." ); } set_fail_state( "An error occured, read logs." ); } }
public task_ReciveData( ) { if( !socket_change( g_ServerData[ SOCKET ], 0 ) ) { set_task( 0.1, "task_ReciveData", g_ServerData[ SOCKET ] ); return; } if ( ( g_ServerData[ DATABLOCKS ] = socket_recv( g_ServerData[ SOCKET ], g_ServerData[ DATA ], sizeof ( g_ServerData[ DATA ] ) ) ) ) { if ( ( ++g_ServerData[ PACKETNUM ] == 1 ) && ( ( g_ServerData[ DATASTART ] = strfind( g_ServerData[ DATA ] , "^r^n^r^n" ) ) > -1 ) ) { g_ServerData[ DATASTART ] += 4; } else { g_ServerData[ DATASTART ] = 0; } log_amx( "[%i] RECEIVED: %s", g_ServerData[ PACKETNUM ], g_ServerData[ DATA ][ g_ServerData[ DATASTART ] ] ); } else {
socket_close( g_ServerData[ SOCKET ] ); g_ServerData[ SOCKET ] = 0; g_ServerData[ PACKETNUM ] = 0; g_ServerData[ DATASTART ] = 0; g_ServerData[ DATABLOCKS ] = 0; } }
i tried with http.inc by myself and it successfully donwloaded the page content in a .txt file..
idk how to make it store in a string cause http.inc its using fwrite_blocks..
LE2: i tested for more than 1 hour and here it is.
excuse my ugly coded.. its for testing.
PHP Code:
/* Plugin generated by AMXX-Studio */
#include < amxmodx > #include < sockets >
#define PLUGIN "Socket Test#2" #define VERSION "1.0"
enum _:iServerInfos { Server[ 64 ], RemoteFile[ 64 ], Socket, Error, PacketNum }
new g_ServerData[ iServerInfos ];
new szRequest[ 128 ]; new g_DataBuffer[ 4096 ];
public plugin_init( ) { register_plugin( PLUGIN, VERSION, "Askhanar" ); FormatHostAndRequest( ); register_concmd( "test", "GetPlayerInfo" ); set_task( 5.0, "GetPlayerInfo", 112233 ); // Add your code here... }
FormatHostAndRequest( ) { g_ServerData[ Server ] = "www.gametracker.com"; g_ServerData[ RemoteFile ] = "player/askhanar/188.212.106.110:27015"; formatex( szRequest, sizeof ( szRequest ) -1,"GET /%s/ HTTP/1.1^r^nHost: %s^r^n^r^n", g_ServerData[ RemoteFile ], g_ServerData[ Server ] ); }
public GetPlayerInfo( ) { if( g_ServerData[ Socket ] > 0 ) socket_close( g_ServerData[ Socket ] );
g_ServerData[ Socket ] = socket_open( g_ServerData[ Server ], 80, SOCKET_TCP, g_ServerData[ Error ] ); if( g_ServerData[ Error ] == 0 && g_ServerData[ Socket ] > 0 ) { log_amx( "connected, sending: %s", szRequest ); socket_send( g_ServerData[ Socket ], szRequest, sizeof( szRequest ) ); g_ServerData[ PacketNum ] = 0; set_task( 0.1, "task_ReciveData", 112233, _, _, "b", 0 ); set_task( 5.0, "task_close" ); } else { switch( g_ServerData[ Error ] ) { case 1: log_amx("[ERROR] Unable to create socket." ); case 2: log_amx("[ERROR] Unable to connect to hostname." ); case 3: log_amx("[ERROR] Unable to connect to the HTTP port." ); } set_fail_state( "An error occured, read logs." ); } }
public task_close( ) { log_amx( "removed_task" ); socket_close( g_ServerData[ Socket ] ); g_ServerData[ Socket ] = 0; g_ServerData[ PacketNum ] = 0; remove_task( 112233 ); }
public task_ReciveData( ) { log_amx( "task_rec" ); static iDataStart new iLen; if( socket_change( g_ServerData[ Socket ], 0 ) ) { if( ( iLen = socket_recv( g_ServerData[ Socket ], g_DataBuffer, sizeof( g_DataBuffer ) ) ) ) { if ( ( ++g_ServerData[ PacketNum ] == 1 ) && ( ( iDataStart = strfind( g_DataBuffer , "^r^n^r^n" ) ) > -1 ) ) { iDataStart += 4; } else { iDataStart = 0; } log_amx( "[%i] [ %i ] RECEIVED: %s", g_ServerData[ PacketNum ], iLen, g_DataBuffer[ iDataStart ] ); } /*else { log_amx( "removed_task" ); socket_close( g_ServerData[ Socket ] ); g_ServerData[ Socket ] = 0; g_ServerData[ PacketNum ] = 0; remove_task( 112233 ); }*/ } }
|