AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Off-Topic / Chat General (https://forums.alliedmods.net/forumdisplay.php?f=136)
-   -   Modulo sockets con multiples hilos? (https://forums.alliedmods.net/showthread.php?t=215162)

Neeeeeeeeeel.- 05-04-2013 10:55

Modulo sockets con multiples hilos?
 
Hay algun sockets publicado que use threads? Si la respuesta es no, ¿Qué tan dificil sería agregarle multi threading para cada conexión? Pregunto porque cuando se intenta hacer una conexión TCP y no encuentra el servidor a donde apunta, se hace un loop que cuelga el juego hasta que llegue el timeout a la función que intenta conectar.

meTaLiCroSS 05-04-2013 11:17

Re: Modulo sockets con multiples hilos?
 
Revisaste los modulos de sockets en Module Coding?

Neeeeeeeeeel.- 05-04-2013 11:41

Re: Modulo sockets con multiples hilos?
 
Quote:

Originally Posted by meTaLiCroSS (Post 1945647)
Revisaste los modulos de sockets en Module Coding?

I didn't my dear...

Go steam negro

Javivi 05-04-2013 13:22

Re: Modulo sockets con multiples hilos?
 
2 Attachment(s)
Usa esta version que modifico joaquim:
https://forums.alliedmods.net/showth...895#post987895

Bugsy tambien hizo otra version del modulo sockets, pero a mi personalmente me daba error al intentar conectar usando linux... se supone que el bug ya lo arreglo, pero no lo he probado ni nada, asi que usa la version de joaquim.

Codigo de testeo probug de hace unos 4 años, escribe en consola sockettest 0/1 y en los ficheros .log veras la info
PHP Code:

#include < amxmodx >
#include < sockets_hz >

#define WEBHOST "www.google.com"

new g_socketFloat:g_socketwait

public plugin_init( )
    
register_concmd"sockettest""testsocket" )
    
public 
testsocketid )
{
    new 
errortype]
    
    
read_argv1typecharsmaxtype ) )

    switch( 
str_to_numtype ) )
    {
        case 
0:
        {
            
log_to_file"sockettest.log""Trying to create a socket (non blocking)^n" )
    
            
g_socket socket_open_non_blockingWEBHOST80SOCKET_TCPerror )
        }
        case 
1:
        {
            
log_to_file"sockettest.log""Trying to create a socket (blocking)^n" )
    
            
g_socket socket_openWEBHOST80SOCKET_TCPerror )
        }
    }
    
    if( 
g_socket && !error )
    {
        
log_to_file"sockettest.log""Socket created %d^n"g_socket )
        
        
set_task1.0"check_socket"1456, .flags="b" )
    }
    else
        
log_to_file"sockettest.log""Failed to create a socket [error:%d]^n"error )
}

public 
check_sockettask )
{
    if( 
socket_is_writableg_socket ) )
    {
        
log_to_file"sockettest.log""Socket avaiable^n" )
        
        
remove_tasktask )
        
g_socketwait get_gametime( )
        
        new 
request200 ]
        
formatexrequestcharsmaxrequest ), "GET /index.php HTTP/1.1^r^nHost: %s^r^nConnection: close^r^n^r^n"WEBHOST )
        
        
log_to_file"sockettest.log""Sending ^n%s^n"request )

        
socket_sendg_socketrequestcharsmaxrequest ) )

        
log_to_file"sockettest.log""Sent!^n" )

        
set_task0.5 "recvdata" 1223, .flags "b" )
    }
    else
    {
        
log_to_file"sockettest.log""Socket not avaiable^n" )
        
        if( ( 
get_gametime( ) - g_socketwait ) >= 5.0 )
        {
            
log_to_file"sockettest.log""Socket timed out^n" )
        
            
socket_closeg_socket )
            
remove_tasktask )
        }
    }
}

public 
recvdatatask )
{
    
log_to_file"sockettest.log""Waiting reponse...^n" )
    
    if ( 
socket_changeg_socket) )
    {
        static 
data3000 ], pos
    
        socket_recv
g_socketdatapos ] , charsmaxdata ) - pos )

        
pos strlendata )
        
        if( 
containidata "302 Found" ) > -|| containidata "200 OK" ) > -|| containidata"404 Not Found" ) )
        {    
            
log_to_file"sockettest.log""REPONSE: ( len: %d )^n%s^n"strlendata ), data )

            
socket_closeg_socket )
            
remove_tasktask )
        }
        
        
g_socketwait get_gametime( )
    }
    
    if( ( 
get_gametime( ) - g_socketwait ) >= 5.0 )
    {
        
log_to_file"sockettest.log""Socket timed out^n" )
        
        
socket_closeg_socket )
        
remove_tasktask )
    }



gladius 05-04-2013 17:22

Re: Modulo sockets con multiples hilos?
 
Así por default tu puedes colocarle socket_unblock(/*socket_handle*/) abajo del listen (socket_listen) y después de que haya sido aceptada la conexión (socket_accept), no sé si sea necesario usar socket_unblock(/*socket_handle*/) después de socket_open al menos yo nunca lo usé ahí.

Neeeeeeeeeel.- 05-04-2013 19:06

Re: Modulo sockets con multiples hilos?
 
Gracias Javivi, voy a probarlo.


All times are GMT -4. The time now is 18:24.

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