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
c8d72f7c
Commit
c8d72f7c
authored
Oct 19, 2010
by
Pieter Noordhuis
Browse files
Style
parent
e245ab48
Changes
3
Hide whitespace changes
Inline
Side-by-side
extra/hiredis/libev.h
View file @
c8d72f7c
...
...
@@ -72,9 +72,9 @@ redisContext *libevRedisConnect(struct ev_loop *loop, redisErrorCallback *err, c
/* Create container for context and r/w events */
e
=
malloc
(
sizeof
(
*
e
));
e
->
loop
=
loop
;
e
->
context
=
c
;
e
->
err
=
err
;
e
->
loop
=
loop
;
e
->
rev
.
data
=
e
;
e
->
wev
.
data
=
e
;
...
...
extra/hiredis/libevent.h
View file @
c8d72f7c
...
...
@@ -5,39 +5,34 @@
/* Prototype for the error callback. */
typedef
void
(
redisErrorCallback
)(
const
redisContext
*
);
/* This struct enables us to pass both the events and the
* redisContext to the read and write handlers. */
typedef
struct
redisEvents
{
typedef
struct
libeventRedisEvents
{
redisContext
*
context
;
redisErrorCallback
*
err
;
struct
event
rev
,
wev
;
}
r
edisEvents
;
}
libeventR
edisEvents
;
void
redisL
ib
E
ventRe
a
d
(
int
fd
,
short
event
,
void
*
arg
)
{
void
l
ib
e
ventRed
isReadEvent
(
int
fd
,
short
event
,
void
*
arg
)
{
((
void
)
fd
);
((
void
)
event
);
r
edisEvents
*
e
=
arg
;
libeventR
edisEvents
*
e
=
arg
;
/* Always re-schedule read events */
event_add
(
&
e
->
rev
,
NULL
);
if
(
redisBufferRead
(
e
->
context
)
==
REDIS_ERR
)
{
/* Handle error. */
e
->
err
(
e
->
context
);
}
else
{
/* If processing the replies/callbacks results in an error,
* invoke the error callback and abort. */
if
(
redisProcessCallbacks
(
e
->
context
)
==
REDIS_ERR
)
{
e
->
err
(
e
->
context
);
}
}
}
void
redisL
ib
E
vent
Write
(
int
fd
,
short
event
,
void
*
arg
)
{
void
l
ib
e
vent
RedisWriteEvent
(
int
fd
,
short
event
,
void
*
arg
)
{
((
void
)
fd
);
((
void
)
event
);
r
edisEvents
*
e
=
arg
;
libeventR
edisEvents
*
e
=
arg
;
int
done
=
0
;
if
(
redisBufferWrite
(
e
->
context
,
&
done
)
==
REDIS_ERR
)
{
if
(
redisBufferWrite
(
e
->
context
,
&
done
)
==
REDIS_ERR
)
{
/* Handle error */
e
->
err
(
e
->
context
);
}
else
{
...
...
@@ -52,30 +47,30 @@ void redisLibEventWrite(int fd, short event, void *arg) {
/* Schedule to be notified on a write event, so the outgoing buffer
* can be flushed to the socket. */
void
redisL
ib
E
vent
OnWrite
(
redisContext
*
c
,
void
*
privdata
)
{
void
l
ib
e
vent
RedisCommandCallback
(
redisContext
*
c
,
void
*
privdata
)
{
((
void
)
c
);
r
edisEvents
*
e
=
privdata
;
libeventR
edisEvents
*
e
=
privdata
;
event_add
(
&
e
->
wev
,
NULL
);
}
/* Remove event handlers when the context gets disconnected. */
void
redisL
ib
E
vent
On
Disconnect
(
redisContext
*
c
,
void
*
privdata
)
{
void
l
ib
e
vent
Redis
Disconnect
Callback
(
redisContext
*
c
,
void
*
privdata
)
{
((
void
)
c
);
r
edisEvents
*
e
=
privdata
;
libeventR
edisEvents
*
e
=
privdata
;
event_del
(
&
e
->
rev
);
event_del
(
&
e
->
wev
);
}
/* Free the
r
edisEvents struct when the context is free'd. */
void
redisL
ib
E
vent
OnFree
(
redisContext
*
c
,
void
*
privdata
)
{
/* Free the
libeventR
edisEvents struct when the context is free'd. */
void
l
ib
e
vent
RedisFreeCallback
(
redisContext
*
c
,
void
*
privdata
)
{
((
void
)
c
);
r
edisEvents
*
e
=
privdata
;
libeventR
edisEvents
*
e
=
privdata
;
free
(
e
);
}
redisContext
*
redisL
ib
E
ventConnect
(
struct
event_base
*
base
,
redisErrorCallback
*
err
,
const
char
*
ip
,
int
port
)
{
r
edisEvents
*
e
;
redisContext
*
c
=
redisConnectNonBlock
(
ip
,
port
,
NULL
);
redisContext
*
l
ib
e
vent
Redis
Connect
(
struct
event_base
*
base
,
redisErrorCallback
*
err
,
const
char
*
ip
,
int
port
)
{
libeventR
edisEvents
*
e
;
redisContext
*
c
=
redisConnectNonBlock
(
ip
,
port
,
NULL
);
if
(
c
->
error
!=
NULL
)
{
err
(
c
);
redisFree
(
c
);
...
...
@@ -87,13 +82,15 @@ redisContext *redisLibEventConnect(struct event_base *base, redisErrorCallback *
e
->
context
=
c
;
e
->
err
=
err
;
/* Register callbacks and events */
redisSetDisconnectCallback
(
e
->
context
,
redisLibEventOnDisconnect
,
e
);
redisSetCommandCallback
(
e
->
context
,
redisLibEventOnWrite
,
e
);
redisSetFreeCallback
(
e
->
context
,
redisLibEventOnFree
,
e
);
event_set
(
&
e
->
rev
,
e
->
context
->
fd
,
EV_READ
,
redisLibEventRead
,
e
);
event_set
(
&
e
->
wev
,
e
->
context
->
fd
,
EV_WRITE
,
redisLibEventWrite
,
e
);
event_base_set
(
base
,
&
e
->
rev
);
event_base_set
(
base
,
&
e
->
wev
);
/* Register callbacks */
redisSetDisconnectCallback
(
c
,
libeventRedisDisconnectCallback
,
e
);
redisSetCommandCallback
(
c
,
libeventRedisCommandCallback
,
e
);
redisSetFreeCallback
(
c
,
libeventRedisFreeCallback
,
e
);
/* Initialize and install read/write events */
event_set
(
&
e
->
rev
,
c
->
fd
,
EV_READ
,
libeventRedisReadEvent
,
e
);
event_set
(
&
e
->
wev
,
c
->
fd
,
EV_WRITE
,
libeventRedisWriteEvent
,
e
);
event_base_set
(
base
,
&
e
->
rev
);
event_base_set
(
base
,
&
e
->
wev
);
return
c
;
}
libevent-example.c
View file @
c8d72f7c
...
...
@@ -19,7 +19,7 @@ int main (int argc, char **argv) {
signal
(
SIGPIPE
,
SIG_IGN
);
struct
event_base
*
base
=
event_base_new
();
redisContext
*
c
=
redisL
ib
E
ventConnect
(
base
,
errorCallback
,
"127.0.0.1"
,
6379
);
redisContext
*
c
=
l
ib
e
vent
Redis
Connect
(
base
,
errorCallback
,
"127.0.0.1"
,
6379
);
if
(
c
==
NULL
)
return
1
;
redisCommand
(
c
,
"SET key %b"
,
argv
[
argc
-
1
],
strlen
(
argv
[
argc
-
1
]));
...
...
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