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
1984b309
Commit
1984b309
authored
Jun 17, 2014
by
Pietro Cerutti
Committed by
Jan-Erik Rediger
Jul 27, 2015
Browse files
Add hooks for read/write/cleanup
parent
8ef7d595
Changes
1
Hide whitespace changes
Inline
Side-by-side
adapters/qt.h
View file @
1984b309
...
...
@@ -28,10 +28,46 @@
#include <QSocketNotifier>
#include "../async.h"
static
void
RedisQtAddRead
(
void
*
);
static
void
RedisQtDelRead
(
void
*
);
static
void
RedisQtAddWrite
(
void
*
);
static
void
RedisQtDelWrite
(
void
*
);
static
void
RedisQtCleanup
(
void
*
);
class
RedisQtAdapter
:
public
QObject
{
Q_OBJECT
friend
void
RedisQtAddRead
(
void
*
adapter
)
{
RedisQtAdapter
*
a
=
static_cast
<
RedisQtAdapter
*>
(
adapter
);
a
->
addRead
();
}
friend
void
RedisQtDelRead
(
void
*
adapter
)
{
RedisQtAdapter
*
a
=
static_cast
<
RedisQtAdapter
*>
(
adapter
);
a
->
delRead
();
}
friend
void
RedisQtAddWrite
(
void
*
adapter
)
{
RedisQtAdapter
*
a
=
static_cast
<
RedisQtAdapter
*>
(
adapter
);
a
->
addWrite
();
}
friend
void
RedisQtDelWrite
(
void
*
adapter
)
{
RedisQtAdapter
*
a
=
static_cast
<
RedisQtAdapter
*>
(
adapter
);
a
->
delWrite
();
}
friend
void
RedisQtCleanup
(
void
*
adapter
)
{
RedisQtAdapter
*
a
=
static_cast
<
RedisQtAdapter
*>
(
adapter
);
a
->
cleanup
();
}
public:
RedisQtAdapter
(
QObject
*
parent
=
0
)
:
QObject
(
parent
),
m_ctx
(
0
),
m_read
(
0
),
m_write
(
0
)
{
}
...
...
@@ -40,16 +76,44 @@ class RedisQtAdapter : public QObject {
void
setContext
(
redisAsyncContext
*
ac
)
{
m_ctx
=
ac
;
m_ctx
->
ev
.
data
=
this
;
m_ctx
->
ev
.
addRead
=
RedisQtAddRead
;
m_ctx
->
ev
.
delRead
=
RedisQtDelRead
;
m_ctx
->
ev
.
addWrite
=
RedisQtAddWrite
;
m_ctx
->
ev
.
delWrite
=
RedisQtDelWrite
;
m_ctx
->
ev
.
cleanup
=
RedisQtCleanup
;
}
delete
m_read
;
m_read
=
new
QSocketNotifier
(
ac
->
c
.
fd
,
QSocketNotifier
::
Read
,
this
),
private:
void
addRead
()
{
if
(
m_read
)
return
;
m_read
=
new
QSocketNotifier
(
m_ctx
->
c
.
fd
,
QSocketNotifier
::
Read
,
0
),
connect
(
m_read
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
read
()));
}
delete
m_write
;
m_write
=
new
QSocketNotifier
(
ac
->
c
.
fd
,
QSocketNotifier
::
Write
,
this
);
void
delRead
()
{
if
(
!
m_read
)
return
;
delete
m_read
;
m_read
=
0
;
}
void
addWrite
()
{
if
(
m_write
)
return
;
m_write
=
new
QSocketNotifier
(
m_ctx
->
c
.
fd
,
QSocketNotifier
::
Write
,
0
);
connect
(
m_write
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
write
()));
}
void
delWrite
()
{
if
(
!
m_write
)
return
;
delete
m_write
;
m_write
=
0
;
}
void
cleanup
()
{
delRead
();
delWrite
();
}
private
slots
:
void
read
()
{
redisAsyncHandleRead
(
m_ctx
);
}
void
write
()
{
redisAsyncHandleWrite
(
m_ctx
);
}
...
...
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