Raised This Month: $ Target: $400
 0% 

Reading data


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Turle
Junior Member
Join Date: Aug 2013
Old 08-11-2013 , 09:06   Reading data
Reply With Quote #1

PHP Code:
#include < amxmodx > 
#include < sockets > 

#define PLUGIN "Socket Test#2" 
#define VERSION "1.0" 

enum _:iServerInfos 

    
Server64 ], 
    
RemoteFile64 ], 
    
Socket
    
Error
    
PacketNum 
     


new 
g_ServerDataiServerInfos ]; 

new 
szRequest128 ]; 
new 
g_DataBuffer4096 ]; 

public 
plugin_init( ) 

    
register_pluginPLUGINVERSION"Askhanar" ); 
     
    
FormatHostAndRequest( ); 
    
register_concmd"test""GetPlayerInfo" ); 
     
    
set_task5.0"GetPlayerInfo"112233 ); 
     
    
// Add your code here... 


FormatHostAndRequest( ) 

    
g_ServerDataServer ] = "www.gametracker.com"
    
g_ServerDataRemoteFile ] = "player/lager/193.104.68.21:27050/"
     
    
formatexszRequestsizeof szRequest ) -1,"GET /As HTTP/1.1^r^nHost: %s^r^n^r^n"g_ServerDataRemoteFile ], g_ServerDataServer ] ); 



public 
GetPlayerInfo( ) 

     
    if( 
g_ServerDataSocket ] > 
        
socket_closeg_ServerDataSocket ] ); 
     

    
g_ServerDataSocket ] = socket_openg_ServerDataServer ], 80SOCKET_TCPg_ServerDataError ] ); 
     
    if( 
g_ServerDataError ] == && g_ServerDataSocket ] > 
    { 
        
log_amx"connected, sending: %s"szRequest ); 
        
socket_sendg_ServerDataSocket ], szRequestsizeofszRequest ) ); 
        
g_ServerDataPacketNum ] = 0
         
        
set_task0.1"task_ReciveData"112233__"b"); 
        
set_task5.0"task_close" ); 
    } 
    else 
    { 
        switch( 
g_ServerDataError ] ) 
        { 
            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_closeg_ServerDataSocket ] ); 
    
g_ServerDataSocket ] = 0
    
g_ServerDataPacketNum ] = 0
    
remove_task112233 ); 


public 
task_ReciveData( ) 

    
log_amx"task_rec" ); 
    static 
iDataStart 
    
new iLen
     
    if( 
socket_changeg_ServerDataSocket ], ) ) 
    { 
         
        if( ( 
iLen socket_recvg_ServerDataSocket ], g_DataBuffersizeofg_DataBuffer ) ) ) ) 
        { 
             
            if ( ( ++
g_ServerDataPacketNum ] == ) && ( ( iDataStart strfindg_DataBuffer "^r^n^r^n" ) ) > -) ) 
            { 
                
iDataStart += 4
            } 
            else 
            { 
                
iDataStart 0
            } 
             
            
log_amx"[%i] [ %i ] RECEIVED: %s"g_ServerDataPacketNum ], iLeng_DataBufferiDataStart ] ); 
             
        } 
        
/*else 
        { 
     
            log_amx( "removed_task" ); 
            socket_close( g_ServerData[ Socket ] ); 
            g_ServerData[ Socket ] = 0; 
            g_ServerData[ PacketNum ] = 0; 
            remove_task( 112233 ); 
        }*/ 
    

         

How can you get the data in a hud message ?
Turle is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 08-11-2013 , 13:55   Re: Reading data
Reply With Quote #2

You simply build a string with the data that you want and then use the hud message functions. If that doesn't help then you need to be more specific about your problem.
__________________
fysiks is offline
Turle
Junior Member
Join Date: Aug 2013
Old 08-11-2013 , 15:19   Re: Reading data
Reply With Quote #3

Quote:
Originally Posted by fysiks View Post
You simply build a string with the data that you want and then use the hud message functions. If that doesn't help then you need to be more specific about your problem.
Could you edit the plugin i've posted / tell me if it's done right ?
Thank you very much for reply.

Last edited by Turle; 08-11-2013 at 15:20.
Turle is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 08-11-2013 , 15:22   Re: Reading data
Reply With Quote #4

Quote:
Originally Posted by Turle View Post
Could you edit the plugin i've posted / tell me if it's done right ?
Thank you very much for reply.
What doesn't work?
__________________
fysiks is offline
Turle
Junior Member
Join Date: Aug 2013
Old 08-11-2013 , 15:30   Re: Reading data
Reply With Quote #5

Quote:
Originally Posted by fysiks View Post
What doesn't work?
Well, I don't receive any data in logs.I don't really know how to do it in HUD(I'm kind of new in scripting), could you show me please ?
I really appreciate the fact that you're trying to help me, thanks!
Turle is offline
Black Rose
Veteran Member
Join Date: Feb 2011
Location: Stockholm, Sweden
Old 08-11-2013 , 22:17   Re: Reading data
Reply With Quote #6

I made some small changes.

Code:
set_task( 0.1, "task_ReciveData", 112233, _, _, "b", 0 );
-->
Code:
set_task( 0.1, "task_ReciveData" );

Code:
    if( socket_change( g_ServerData[ Socket ], 0 ) )       {           // ...     }
-->
Code:
    if( socket_change( g_ServerData[ Socket ], 0 ) )       {           // ...     }     else         set_task( 0.1, "task_ReciveData" );

Code:
if( ( iLen = socket_recv( g_ServerData[ Socket ], g_DataBuffer, sizeof( g_DataBuffer ) ) ) )
-->

Code:
while( ( iLen = socket_recv( g_ServerData[ Socket ], g_DataBuffer, sizeof( g_DataBuffer ) ) ) )

But your basic error was this:
Code:
    formatex( szRequest, sizeof ( szRequest ) -1,"GET /As HTTP/1.1^r^nHost: %s^r^n^r^n", g_ServerData[ RemoteFile ], g_ServerData[ Server ] ); //                                                     ^
Should be like this obviously
Code:
    formatex( szRequest, sizeof ( szRequest ) -1,"GET /%s HTTP/1.1^r^nHost: %s^r^n^r^n", g_ServerData[ RemoteFile ], g_ServerData[ Server ] ); //                                                     ^

Code:
#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/lager/193.104.68.21:27050/";             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" );     }       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 ) )       {                     while( ( 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 );           }*/       }     else         set_task( 0.1, "task_ReciveData" );           }
__________________

Last edited by Black Rose; 08-11-2013 at 22:21.
Black Rose is offline
Turle
Junior Member
Join Date: Aug 2013
Old 08-12-2013 , 07:34   Re: Reading data
Reply With Quote #7

It crashes my server.

But it works, meaning that it gets data in logs.

And one more question, how to select just a certain data, for example this page: http://www.gametracker.com/player/lo...163.197:27015/
to get just:
PHP Code:
PLAYER SUMMARY
First Seen
Aug 122013 
Last Seen
Online Now
CURRENT STATS
Score

Minutes Played

Score per Minute

Rank on Server
#10 
Thanks a lot for helping me!

Last edited by Turle; 08-12-2013 at 09:36.
Turle is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 08-12-2013 , 19:29   Re: Reading data
Reply With Quote #8

Quote:
Originally Posted by Turle View Post
And one more question, how to select just a certain data, for example this page: http://www.gametracker.com/player/lo...163.197:27015/
to get just:
PHP Code:
PLAYER SUMMARY
First Seen
Aug 122013 
Last Seen
Online Now
CURRENT STATS
Score

Minutes Played

Score per Minute

Rank on Server
#10 
You parse the HTML accordingly (which is probably not that easy).

Is either of the IPs that you posted your server?
__________________

Last edited by fysiks; 08-12-2013 at 19:29.
fysiks is offline
Black Rose
Veteran Member
Join Date: Feb 2011
Location: Stockholm, Sweden
Old 08-12-2013 , 19:58   Re: Reading data
Reply With Quote #9

Here's my suggestion. It requires this file.
The regex part might not be perfect because I learned it now just to create this.
Code:
#include <amxmodx> #include <http> #include <regex> new Results[6][32]; enum patternsEnum {     Prefix[32],     Pattern[128] } new Info[][patternsEnum] = {     { "First Seen:",        "\w{3} [0-3][0-9], [12][019][0-9][0-9]" },     { "Last Seen:",   "Online Now|(((Yester|To)day)|(\w{3} [0-3][0-9], [12][019][0-9][0-9])) (1[0-2]|[0-9]):[0-5]\d [A|P]M" },     { "Score:",    "(?<=\s)\d+" },     { "Minutes Played:",    "(?<=\s)\d+" },     { "Score per Minute:",  "(?<=\s)\d+\.?\d?" },     { "Rank on Server:",    "#\d+ out of \d+" } } public plugin_init() {     register_plugin("Test Plugin 9", "", "");         HTTP_DownloadFile("http://www.gametracker.com/player/londin/78.110.163.197:27015/", "result.txt"); } public HTTP_Download(const szFile[] , iDownloadID , iBytesRecv , iFileSize , bool:TransferComplete) {         if ( ! TransferComplete )         return;         new hFile = fopen(szFile, "r");     new num, i, bool: searching;     new buffer[1024], error[128];     if ( ! hFile )         return;         while ( ! feof(hFile) && i < sizeof Info ) {         fgets(hFile, buffer, charsmax(buffer));                 if ( ! searching && contain(buffer, Info[i][Prefix]) != -1 )         searching = true;                 if ( searching ) {                         new Regex:hRegex = regex_match(buffer, Info[i][Pattern], num, error, 127);                         if ( hRegex >= REGEX_OK ) {                 regex_substr(hRegex, 0, Results[i], 31);                 server_print("%s %s", Info[i][Prefix], Results[i]);                 regex_free(hRegex);                 i++;                 searching = false;             }         }     }     fclose(hFile)         delete_file(szFile); }

Code:
First Seen: Aug 12, 2013
Last Seen: Today 7:36 AM
Score: 0
Minutes Played: 0
Score per Minute: 0
Rank on Server: #24185 out of 24184
__________________

Last edited by Black Rose; 08-13-2013 at 11:38.
Black Rose is offline
red_bull2oo6
Senior Member
Join Date: Mar 2012
Location: Braila, Romania
Old 08-13-2013 , 06:37   Re: Reading data
Reply With Quote #10

thanks Black Rose, because of your example.. i have finally learned regex too
i`ll use some of you code too ( i`m trying to make it directly.. < not using http.inc > ).

LE: i dont understand the purpose of 'StringId' .

Last edited by red_bull2oo6; 08-13-2013 at 06:38.
red_bull2oo6 is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 15:56.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode