Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
hiredis
Commits
a6691671
Commit
a6691671
authored
Dec 23, 2020
by
hewei.it
Committed by
Michael Grunder
Sep 07, 2022
Browse files
Add adapters/libhv
parent
855b48a8
Changes
3
Hide whitespace changes
Inline
Side-by-side
adapters/libhv.h
0 → 100644
View file @
a6691671
#ifndef __HIREDIS_LIBHV_H__
#define __HIREDIS_LIBHV_H__
#include <hv/hloop.h>
#include "../hiredis.h"
#include "../async.h"
static
void
redisLibhvHandleEvents
(
hio_t
*
io
)
{
redisAsyncContext
*
context
=
(
redisAsyncContext
*
)
hevent_userdata
(
io
);
int
events
=
hio_events
(
io
);
int
revents
=
hio_revents
(
io
);
if
(
context
&&
(
events
&
HV_READ
)
&&
(
revents
&
HV_READ
))
{
redisAsyncHandleRead
(
context
);
}
if
(
context
&&
(
events
&
HV_WRITE
)
&&
(
revents
&
HV_WRITE
))
{
redisAsyncHandleWrite
(
context
);
}
}
static
void
redisLibhvAddRead
(
void
*
privdata
)
{
hio_t
*
io
=
(
hio_t
*
)
privdata
;
hio_add
(
io
,
redisLibhvHandleEvents
,
HV_READ
);
}
static
void
redisLibhvDelRead
(
void
*
privdata
)
{
hio_t
*
io
=
(
hio_t
*
)
privdata
;
hio_del
(
io
,
HV_READ
);
}
static
void
redisLibhvAddWrite
(
void
*
privdata
)
{
hio_t
*
io
=
(
hio_t
*
)
privdata
;
hio_add
(
io
,
redisLibhvHandleEvents
,
HV_WRITE
);
}
static
void
redisLibhvDelWrite
(
void
*
privdata
)
{
hio_t
*
io
=
(
hio_t
*
)
privdata
;
hio_del
(
io
,
HV_WRITE
);
}
static
void
redisLibhvCleanup
(
void
*
privdata
)
{
hio_t
*
io
=
(
hio_t
*
)
privdata
;
hio_close
(
io
);
hevent_set_userdata
(
io
,
NULL
);
}
static
int
redisLibhvAttach
(
redisAsyncContext
*
ac
,
hloop_t
*
loop
)
{
redisContext
*
c
=
&
(
ac
->
c
);
hio_t
*
io
=
NULL
;
if
(
ac
->
ev
.
data
!=
NULL
)
{
return
REDIS_ERR
;
}
io
=
hio_get
(
loop
,
c
->
fd
);
if
(
io
==
NULL
)
{
return
REDIS_ERR
;
}
hevent_set_userdata
(
io
,
ac
);
ac
->
ev
.
addRead
=
redisLibhvAddRead
;
ac
->
ev
.
delRead
=
redisLibhvDelRead
;
ac
->
ev
.
addWrite
=
redisLibhvAddWrite
;
ac
->
ev
.
delWrite
=
redisLibhvDelWrite
;
ac
->
ev
.
cleanup
=
redisLibhvCleanup
;
ac
->
ev
.
data
=
io
;
return
REDIS_OK
;
}
#endif
examples/CMakeLists.txt
View file @
a6691671
...
@@ -25,6 +25,12 @@ if (LIBEVENT)
...
@@ -25,6 +25,12 @@ if (LIBEVENT)
TARGET_LINK_LIBRARIES
(
example-libevent hiredis event
)
TARGET_LINK_LIBRARIES
(
example-libevent hiredis event
)
ENDIF
()
ENDIF
()
FIND_PATH
(
LIBHV hv/hv.h
)
IF
(
LIBHV
)
ADD_EXECUTABLE
(
example-libhv example-libhv.c
)
TARGET_LINK_LIBRARIES
(
example-libhv hiredis hv
)
ENDIF
()
FIND_PATH
(
LIBUV uv.h
)
FIND_PATH
(
LIBUV uv.h
)
IF
(
LIBUV
)
IF
(
LIBUV
)
ADD_EXECUTABLE
(
example-libuv example-libuv.c
)
ADD_EXECUTABLE
(
example-libuv example-libuv.c
)
...
...
examples/example-libhv.c
0 → 100644
View file @
a6691671
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <hiredis.h>
#include <async.h>
#include <adapters/libhv.h>
void
getCallback
(
redisAsyncContext
*
c
,
void
*
r
,
void
*
privdata
)
{
redisReply
*
reply
=
r
;
if
(
reply
==
NULL
)
return
;
printf
(
"argv[%s]: %s
\n
"
,
(
char
*
)
privdata
,
reply
->
str
);
/* Disconnect after receiving the reply to GET */
redisAsyncDisconnect
(
c
);
}
void
connectCallback
(
const
redisAsyncContext
*
c
,
int
status
)
{
if
(
status
!=
REDIS_OK
)
{
printf
(
"Error: %s
\n
"
,
c
->
errstr
);
return
;
}
printf
(
"Connected...
\n
"
);
}
void
disconnectCallback
(
const
redisAsyncContext
*
c
,
int
status
)
{
if
(
status
!=
REDIS_OK
)
{
printf
(
"Error: %s
\n
"
,
c
->
errstr
);
return
;
}
printf
(
"Disconnected...
\n
"
);
}
int
main
(
int
argc
,
char
**
argv
)
{
#ifndef _WIN32
signal
(
SIGPIPE
,
SIG_IGN
);
#endif
redisAsyncContext
*
c
=
redisAsyncConnect
(
"127.0.0.1"
,
6379
);
if
(
c
->
err
)
{
/* Let *c leak for now... */
printf
(
"Error: %s
\n
"
,
c
->
errstr
);
return
1
;
}
hloop_t
*
loop
=
hloop_new
(
HLOOP_FLAG_QUIT_WHEN_NO_ACTIVE_EVENTS
);
redisLibhvAttach
(
c
,
loop
);
redisAsyncSetConnectCallback
(
c
,
connectCallback
);
redisAsyncSetDisconnectCallback
(
c
,
disconnectCallback
);
redisAsyncCommand
(
c
,
NULL
,
NULL
,
"SET key %b"
,
argv
[
argc
-
1
],
strlen
(
argv
[
argc
-
1
]));
redisAsyncCommand
(
c
,
getCallback
,
(
char
*
)
"end-1"
,
"GET key"
);
hloop_run
(
loop
);
return
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment