Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
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