Esempio n. 1
0
ZEND_METHOD( appnetServer , close )
{
	long fd;
	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &fd   ) == FAILURE)
	{
		RETURN_FALSE;;
	}

	if( fd <= 0 )
	{
		printf( "app close fd=%d error \n" , fd );
		RETURN_FALSE;
	}

	aeServer* appserv = APPNET_G( appserv );
	aeConnection* uc = &appserv->connlist[fd];
	if( uc == NULL )
	{
		php_printf( "close error,client obj is null");
		RETURN_FALSE;
	}

	appserv->close( fd );
	RETURN_TRUE;
}
Esempio n. 2
0
ZEND_METHOD( appnetServer , getHeader )
{
	array_init(return_value);
	aeServer* appserv = APPNET_G( appserv );

	int i;
	int connfd = appserv->worker->connfd;
	httpHeader* header = &appserv->connlist[connfd].hh;
	if( header->protocol == HTTP )
	{
	add_assoc_string(return_value, "Protocol" , "HTTP" );
	}
	else if(  header->protocol == WEBSOCKET )
	{
		 add_assoc_string(return_value, "Protocol" , "WEBSOCKET" );
	}
	else
	{
	add_assoc_string(return_value, "Protocol" , "TCP" );
	return;
	}
	add_assoc_string(return_value, "Method" , header->method );
	add_assoc_string(return_value, "Uri" , header->uri );
	add_assoc_string(return_value, "Version" , header->version );

	for( i = 0 ; i < header->filed_nums ; i++ )
	{
	add_assoc_string(return_value, header->fileds[i].key  , header->fileds[i].value  );
	}
}
Esempio n. 3
0
ZEND_METHOD( appnetServer , getInfo )
{
	array_init(return_value);
	aeServer* appserv = APPNET_G( appserv );
	if( appserv == NULL )
	{
		return;
	}
	add_assoc_long(return_value, "worker_num" ,appserv->workerNum );
	add_assoc_long(return_value, "reactor_num" , appserv->reactorNum  );
	add_assoc_long(return_value, "max_connection" , appserv->maxConnect );
	add_assoc_long(return_value, "protocol" , appserv->protocolType );
}
Esempio n. 4
0
ZEND_METHOD( appnetServer , send )
{
	size_t len = 0;
	long fd;
	char* buffer;
	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &fd,&buffer,&len ) == FAILURE)
	{
		return;
	}
	aeServer* appserv = APPNET_G( appserv );
	int sendlen; 
	sendlen = appserv->send( fd , buffer , len );
	RETURN_LONG( sendlen );
}
Esempio n. 5
0
//=====================================================
ZEND_METHOD( appnetServer , __construct )
{
    size_t host_len = 0;
    char* serv_host;
    long  serv_port;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &serv_host, &host_len, &serv_port ) == FAILURE)
    {
        return;
    }
    aeServer* appserv = appnetServInit( serv_host , serv_port );
    //save to global var
    appserv->ptr2 = getThis();
    APPNET_G( appserv ) = appserv;
}
Esempio n. 6
0
int onTimer( aeEventLoop *l, int id,void *data  )
{
	timerArgs* timerArg = (timerArgs*)data;

	zval* callback = (zval*)timerArg->func;
	zval* params = (zval*)timerArg->params;

	if( callback == NULL )
        {
	    php_error_docref(NULL TSRMLS_CC, E_WARNING, "onTimer callback ptr NULL");
	}

	aeServer* appserv = APPNET_G( appserv );
	zval retval;

	zval *args;
	zval *zserv = (zval*)appserv->ptr2;
	zval zid;
	args = safe_emalloc(sizeof(zval),3, 0 );


	ZVAL_LONG( &zid , (long)id );
	ZVAL_COPY(&args[0], zserv  );
	ZVAL_COPY(&args[1] , &zid    );
	ZVAL_COPY(&args[2],  params );

	printf( "server=%p,cb_ptr=%p,cb=%p,cb=%s,arg=%s \n" ,  appserv, callback , params ,  callback , params );

	if (call_user_function_ex(EG(function_table), NULL, callback  ,&retval, 3 , args , 0, NULL) == FAILURE )
	{
		php_error_docref(NULL TSRMLS_CC, E_WARNING, "call_user_function_ex timer callback error");
	}

	if (EG(exception))
	{
		php_error_docref(NULL, E_WARNING, "timer callback failed");
	}
	zval_ptr_dtor(&zid);

	efree( args );
	if ( &retval != NULL)
	{
		zval_ptr_dtor(&retval);
	}

	return timerArg->ts;
}
Esempio n. 7
0
ZEND_METHOD( appnetServer , setOption )
{
    size_t key_len;
    size_t val_len;
    char*  key;
    char*  val;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &key, &key_len, &val , &val_len ) == FAILURE)
    {
        return;
    }
    aeServer* appserv = APPNET_G( appserv );
    int ret = appserv->setOption( key,val );
    if( ret == AE_TRUE )
    {
	RETURN_TRUE;
    }
    RETURN_FALSE;
}
Esempio n. 8
0
int onTimer( aeEventLoop *l, int id, void *data  )
{
    timerArgs* timerArg = (timerArgs*)data;

    aeServer* appserv = APPNET_G( appserv );
    zval retval;

    zval *args;
    zval *zserv = (zval*)appserv->ptr2;
    zval zid;
    zval zparam;
    args = safe_emalloc(sizeof(zval), 3, 0 );

    ZVAL_STRINGL( &zparam , timerArg->params , strlen( timerArg->params ) );
    ZVAL_LONG( &zid , (long)id );

    ZVAL_COPY(&args[0], zserv  );
    ZVAL_COPY(&args[1] , &zid    );
    ZVAL_COPY(&args[2],  &zparam );

    if (call_user_function_ex(EG(function_table), NULL, appnet_serv_callback[APPNET_SERVER_CB_onTimer] , &retval, 3 , args , 0, NULL) == FAILURE )
    {
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "call_user_function_ex timer callback error");
    }

    if (EG(exception))
    {
        php_error_docref(NULL, E_WARNING, "timer callback failed");
    }
    zval_ptr_dtor(&zid);

    efree( args );
    if ( &retval != NULL)
    {
        zval_ptr_dtor(&retval);
    }

    return timerArg->ts;
}
Esempio n. 9
0
ZEND_METHOD( appnetServer , getHeader )
{
    array_init(return_value);
    aeServer* appserv = APPNET_G( appserv );
    int i;
    int connfd = appserv->worker->connfd;
    httpHeader* header = &appserv->worker->req_header;
    if ( appserv->worker->proto == HTTP )
    {
        add_assoc_string(return_value, "Protocol" , "HTTP" );
    }
    else if (  appserv->worker->proto == WEBSOCKET )
    {
        add_assoc_string(return_value, "Protocol" , "WEBSOCKET" );
    }
    else
    {
        add_assoc_string(return_value, "Protocol" , "TCP" );
        return;
    }

    add_assoc_string(return_value, "Method" , header->method );
    add_assoc_string(return_value, "Uri" , header->uri );
    add_assoc_string(return_value, "Version" , header->version );

    char key[64];
    char val[1024];
    for ( i = 0 ; i < header->filed_nums ; i++ )
    {
        memset( key , 0 , sizeof( key ));
        memset( val , 0 , sizeof( val ));
        memcpy( key , header->fileds[i].key.pos , header->fileds[i].key.len  );
        memcpy( val , header->fileds[i].val.pos , header->fileds[i].val.len  );
        add_assoc_string(return_value, key  , val );
    }

}