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
135e9265
Commit
135e9265
authored
Oct 10, 2010
by
Nicolas Favre-Felix
Browse files
Added event_base to libevent code.
parent
96510ce8
Changes
3
Hide whitespace changes
Inline
Side-by-side
extra/hiredis/libevent.h
View file @
135e9265
typedef
unsigned
char
u_char
;
/* libevents needs u_char */
#include <event.h>
#include <event.h>
#include <hiredis.h>
#include <hiredis.h>
...
@@ -10,6 +11,7 @@ typedef struct redisEvents {
...
@@ -10,6 +11,7 @@ typedef struct redisEvents {
redisContext
*
context
;
redisContext
*
context
;
redisErrorCallback
*
err
;
redisErrorCallback
*
err
;
struct
event
rev
,
wev
;
struct
event
rev
,
wev
;
struct
event_base
*
base
;
}
redisEvents
;
}
redisEvents
;
void
redisLibEventRead
(
int
fd
,
short
event
,
void
*
arg
)
{
void
redisLibEventRead
(
int
fd
,
short
event
,
void
*
arg
)
{
...
@@ -72,6 +74,14 @@ void redisLibEventOnFree(redisContext *c, void *privdata) {
...
@@ -72,6 +74,14 @@ void redisLibEventOnFree(redisContext *c, void *privdata) {
free
(
e
);
free
(
e
);
}
}
/* Dispatch libevent loop. */
int
redisLibEventDispatch
(
redisContext
*
c
)
{
if
(
!
c
->
events
)
{
return
-
1
;
}
return
event_base_dispatch
(
c
->
events
->
base
);
}
redisContext
*
redisLibEventConnect
(
const
char
*
ip
,
int
port
,
redisErrorCallback
*
err
)
{
redisContext
*
redisLibEventConnect
(
const
char
*
ip
,
int
port
,
redisErrorCallback
*
err
)
{
redisEvents
*
e
;
redisEvents
*
e
;
redisContext
*
c
=
redisConnectNonBlock
(
ip
,
port
,
NULL
);
redisContext
*
c
=
redisConnectNonBlock
(
ip
,
port
,
NULL
);
...
@@ -84,12 +94,16 @@ redisContext *redisLibEventConnect(const char *ip, int port, redisErrorCallback
...
@@ -84,12 +94,16 @@ redisContext *redisLibEventConnect(const char *ip, int port, redisErrorCallback
e
=
malloc
(
sizeof
(
*
e
));
e
=
malloc
(
sizeof
(
*
e
));
e
->
context
=
c
;
e
->
context
=
c
;
e
->
err
=
err
;
e
->
err
=
err
;
e
->
base
=
event_base_new
();
c
->
events
=
e
;
/* Register callbacks and events */
/* Register callbacks and events */
redisSetDisconnectCallback
(
e
->
context
,
redisLibEventOnDisconnect
,
e
);
redisSetDisconnectCallback
(
e
->
context
,
redisLibEventOnDisconnect
,
e
);
redisSetCommandCallback
(
e
->
context
,
redisLibEventOnWrite
,
e
);
redisSetCommandCallback
(
e
->
context
,
redisLibEventOnWrite
,
e
);
redisSetFreeCallback
(
e
->
context
,
redisLibEventOnFree
,
e
);
redisSetFreeCallback
(
e
->
context
,
redisLibEventOnFree
,
e
);
event_set
(
&
e
->
rev
,
e
->
context
->
fd
,
EV_READ
,
redisLibEventRead
,
e
);
event_set
(
&
e
->
rev
,
e
->
context
->
fd
,
EV_READ
,
redisLibEventRead
,
e
);
event_base_set
(
e
->
base
,
&
e
->
rev
);
event_set
(
&
e
->
wev
,
e
->
context
->
fd
,
EV_WRITE
,
redisLibEventWrite
,
e
);
event_set
(
&
e
->
wev
,
e
->
context
->
fd
,
EV_WRITE
,
redisLibEventWrite
,
e
);
return
e
->
context
;
event_base_set
(
e
->
base
,
&
e
->
wev
);
return
c
;
}
}
hiredis.h
View file @
135e9265
...
@@ -75,6 +75,7 @@ typedef struct redisReplyObjectFunctions {
...
@@ -75,6 +75,7 @@ typedef struct redisReplyObjectFunctions {
}
redisReplyFunctions
;
}
redisReplyFunctions
;
struct
redisContext
;
/* need forward declaration of redisContext */
struct
redisContext
;
/* need forward declaration of redisContext */
struct
redisEvents
;
/* need forward declaration of redisEvents */
/* Callbacks triggered on non-reply events. */
/* Callbacks triggered on non-reply events. */
typedef
void
(
redisContextCallback
)(
struct
redisContext
*
,
void
*
);
typedef
void
(
redisContextCallback
)(
struct
redisContext
*
,
void
*
);
...
@@ -109,6 +110,10 @@ typedef struct redisContext {
...
@@ -109,6 +110,10 @@ typedef struct redisContext {
redisCallback
*
callbacks
;
redisCallback
*
callbacks
;
int
cpos
;
int
cpos
;
int
clen
;
int
clen
;
/* Libevent context */
struct
redisEvents
*
events
;
}
redisContext
;
}
redisContext
;
void
freeReplyObject
(
void
*
reply
);
void
freeReplyObject
(
void
*
reply
);
...
...
libevent-example.c
View file @
135e9265
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#include <hiredis/libevent.h>
#include <hiredis/libevent.h>
#include <signal.h>
void
getCallback
(
redisContext
*
c
,
redisReply
*
reply
,
const
void
*
privdata
)
{
void
getCallback
(
redisContext
*
c
,
redisReply
*
reply
,
const
void
*
privdata
)
{
printf
(
"argv[%s]: %s
\n
"
,
(
const
char
*
)
privdata
,
reply
->
reply
);
printf
(
"argv[%s]: %s
\n
"
,
(
const
char
*
)
privdata
,
reply
->
reply
);
...
@@ -26,7 +27,7 @@ int main (int argc, char **argv) {
...
@@ -26,7 +27,7 @@ int main (int argc, char **argv) {
redisCommand
(
c
,
"SET key %b"
,
argv
[
argc
-
1
],
strlen
(
argv
[
argc
-
1
]));
redisCommand
(
c
,
"SET key %b"
,
argv
[
argc
-
1
],
strlen
(
argv
[
argc
-
1
]));
redisCommandWithCallback
(
c
,
getCallback
,
"end-1"
,
"GET key"
);
redisCommandWithCallback
(
c
,
getCallback
,
"end-1"
,
"GET key"
);
e
vent
_d
ispatch
();
redisLibE
vent
D
ispatch
(
c
);
redisFree
(
c
);
redisFree
(
c
);
return
0
;
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