int connection::redis_raw_cmd(redisCallbackFn* fn, void* priv_data, const char* fmt, va_list ap) { if (NULL == context) { return error_code::REDIS_HAPP_CREATE; } return redisvAsyncCommand(context, fn, priv_data, fmt, ap); }
int redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata, const char *format, ...) { va_list ap; int status; va_start(ap,format); status = redisvAsyncCommand(ac,fn,privdata,format,ap); va_end(ap); return status; }
int connection::redis_raw_cmd(redisCallbackFn* fn, void* priv_data, const char* fmt, ...) { if (NULL == context) { return error_code::REDIS_HAPP_CREATE; } va_list ap; va_start(ap, fmt); int res = redisvAsyncCommand(context, fn, priv_data, fmt, ap); va_end(ap); return res; }
static int swoole_redis_send_command(zval *object, zval *callback, char *format, ...) { #if PHP_MAJOR_VERSION < 7 TSRMLS_FETCH_FROM_CTX(sw_thread_ctx ? sw_thread_ctx : NULL); #endif swRedisClient *redis = swoole_get_object(object); switch (redis->state) { case SWOOLE_REDIS_STATE_CONNECT: swoole_php_error(E_WARNING, "redis client is not connected."); return SW_ERR; case SWOOLE_REDIS_STATE_WAIT: swoole_php_error(E_WARNING, "redis client is waiting for response."); return SW_ERR; case SWOOLE_REDIS_STATE_CLOSED: swoole_php_error(E_WARNING, "redis client connection is closed."); return SW_ERR; default: break; } #if PHP_MAJOR_VERSION < 7 redis->result_callback = callback; #else redis->result_callback = &redis->_result_callback; memcpy(redis->result_callback, callback, sizeof(zval)); #endif sw_zval_add_ref(&redis->result_callback); va_list ap; va_start(ap, format); int ret = redisvAsyncCommand(redis->context, swoole_redis_onResult, NULL, format, ap); va_end(ap); if (ret < 0) { swoole_php_error(E_WARNING, "redisAsyncCommandArgv() failed."); return SW_ERR; } redis->state = SWOOLE_REDIS_STATE_WAIT; return SW_OK; }