Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
涵涵努努
hiredis
提交
8ef7d595
H
hiredis
项目概览
涵涵努努
/
hiredis
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hiredis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8ef7d595
编写于
6月 17, 2014
作者:
P
Pietro Cerutti
提交者:
Jan-Erik Rediger
7月 27, 2015
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add Qt adapter and relative example.
上级
3b153cbf
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
155 addition
and
0 deletion
+155
-0
Makefile
Makefile
+14
-0
adapters/qt.h
adapters/qt.h
+63
-0
examples/example-qt.cpp
examples/example-qt.cpp
+46
-0
examples/example-qt.h
examples/example-qt.h
+32
-0
未找到文件。
Makefile
浏览文件 @
8ef7d595
...
...
@@ -36,6 +36,7 @@ export REDIS_TEST_CONFIG
# Fallback to gcc when $CC is not in $PATH.
CC
:=
$(
shell
sh
-c
'type
$(CC)
>/dev/null 2>/dev/null && echo
$(CC)
|| echo gcc'
)
CXX
:=
$(
shell
sh
-c
'type
$(CXX)
>/dev/null 2>/dev/null && echo
$(CXX)
|| echo g++'
)
OPTIMIZATION
?=
-O3
WARNINGS
=
-Wall
-W
-Wstrict-prototypes
-Wwrite-strings
DEBUG
?=
-g
-ggdb
...
...
@@ -116,6 +117,19 @@ hiredis-example-libuv: examples/example-libuv.c adapters/libuv.h $(STLIBNAME)
$(CC)
-o
examples/
$@
$(REAL_CFLAGS)
$(REAL_LDFLAGS)
-I
.
-I
$(LIBUV_DIR)
/include
$<
$(LIBUV_DIR)
/.libs/libuv.a
-lpthread
-lrt
$(STLIBNAME)
endif
ifeq
($(and $(QT_MOC),$(QT_INCLUDE_DIR),$(QT_LIBRARY_DIR)),)
hiredis-example-qt
:
@
echo
"Please specify QT_MOC, QT_INCLUDE_DIR AND QT_LIBRARY_DIR"
@
false
else
hiredis-example-qt
:
examples/example-qt.cpp adapters/qt.h $(STLIBNAME)
$(QT_MOC)
adapters/qt.h
-I
.
-I
$(QT_INCLUDE_DIR)
-I
$(QT_INCLUDE_DIR)
/QtCore |
\
$(CXX)
-x
c++
-o
qt-adapter-moc.o
-c
-
$(REAL_CFLAGS)
-I
.
-I
$(QT_INCLUDE_DIR)
-I
$(QT_INCLUDE_DIR)
/QtCore
$(QT_MOC)
examples/example-qt.h
-I
.
-I
$(QT_INCLUDE_DIR)
-I
$(QT_INCLUDE_DIR)
/QtCore |
\
$(CXX)
-x
c++
-o
qt-example-moc.o
-c
-
$(REAL_CFLAGS)
-I
.
-I
$(QT_INCLUDE_DIR)
-I
$(QT_INCLUDE_DIR)
/QtCore
$(CXX)
-o
examples/
$@
$(REAL_CFLAGS)
$(REAL_LDFLAGS)
-I
.
-I
$(QT_INCLUDE_DIR)
-I
$(QT_INCLUDE_DIR)
/QtCore
-L
$(QT_LIBRARY_DIR)
qt-adapter-moc.o qt-example-moc.o
$<
-pthread
$(STLIBNAME)
-lQtCore
endif
hiredis-example
:
examples/example.c $(STLIBNAME)
$(CC)
-o
examples/
$@
$(REAL_CFLAGS)
$(REAL_LDFLAGS)
-I
.
$<
$(STLIBNAME)
...
...
adapters/qt.h
0 → 100644
浏览文件 @
8ef7d595
/*-
* Copyright (C) 2014 Pietro Cerutti <gahr@gahr.ch>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef __HIREDIS_QT_H__
#define __HIREDIS_QT_H__
#include <QSocketNotifier>
#include "../async.h"
class
RedisQtAdapter
:
public
QObject
{
Q_OBJECT
public:
RedisQtAdapter
(
QObject
*
parent
=
0
)
:
QObject
(
parent
),
m_ctx
(
0
),
m_read
(
0
),
m_write
(
0
)
{
}
~
RedisQtAdapter
()
{
}
void
setContext
(
redisAsyncContext
*
ac
)
{
m_ctx
=
ac
;
delete
m_read
;
m_read
=
new
QSocketNotifier
(
ac
->
c
.
fd
,
QSocketNotifier
::
Read
,
this
),
connect
(
m_read
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
read
()));
delete
m_write
;
m_write
=
new
QSocketNotifier
(
ac
->
c
.
fd
,
QSocketNotifier
::
Write
,
this
);
connect
(
m_write
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
write
()));
}
private
slots
:
void
read
()
{
redisAsyncHandleRead
(
m_ctx
);
}
void
write
()
{
redisAsyncHandleWrite
(
m_ctx
);
}
private:
redisAsyncContext
*
m_ctx
;
QSocketNotifier
*
m_read
;
QSocketNotifier
*
m_write
;
};
#endif
/* !__HIREDIS_QT_H__ */
examples/example-qt.cpp
0 → 100644
浏览文件 @
8ef7d595
#include <iostream>
using
namespace
std
;
#include <QCoreApplication>
#include <QTimer>
#include "example-qt.h"
void
getCallback
(
redisAsyncContext
*
,
void
*
r
,
void
*
privdata
)
{
redisReply
*
reply
=
static_cast
<
redisReply
*>
(
r
);
ExampleQt
*
ex
=
static_cast
<
ExampleQt
*>
(
privdata
);
if
(
reply
==
nullptr
||
ex
==
nullptr
)
return
;
cout
<<
"key: "
<<
reply
->
str
<<
endl
;
ex
->
finish
();
}
void
ExampleQt
::
run
()
{
m_ctx
=
redisAsyncConnect
(
"localhost"
,
6379
);
if
(
m_ctx
->
err
)
{
cerr
<<
"Error: "
<<
m_ctx
->
errstr
<<
endl
;
redisAsyncFree
(
m_ctx
);
emit
finished
();
}
m_adapter
.
setContext
(
m_ctx
);
redisAsyncCommand
(
m_ctx
,
NULL
,
NULL
,
"SET key %s"
,
m_value
);
redisAsyncCommand
(
m_ctx
,
getCallback
,
this
,
"GET key"
);
}
int
main
(
int
argc
,
char
**
argv
)
{
QCoreApplication
app
(
argc
,
argv
);
ExampleQt
example
(
argv
[
argc
-
1
]);
QObject
::
connect
(
&
example
,
SIGNAL
(
finished
()),
&
app
,
SLOT
(
quit
()));
QTimer
::
singleShot
(
0
,
&
example
,
SLOT
(
run
()));
return
app
.
exec
();
}
examples/example-qt.h
0 → 100644
浏览文件 @
8ef7d595
#ifndef __HIREDIS_EXAMPLE_QT_H
#define __HIREDIS_EXAMPLE_QT_H
#include <adapters/qt.h>
class
ExampleQt
:
public
QObject
{
Q_OBJECT
public:
ExampleQt
(
const
char
*
value
,
QObject
*
parent
=
0
)
:
QObject
(
parent
),
m_value
(
value
)
{}
signals:
void
finished
();
public
slots
:
void
run
();
private:
void
finish
()
{
emit
finished
();
}
private:
const
char
*
m_value
;
redisAsyncContext
*
m_ctx
;
RedisQtAdapter
m_adapter
;
friend
void
getCallback
(
redisAsyncContext
*
,
void
*
,
void
*
);
};
#endif
/* !__HIREDIS_EXAMPLE_QT_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录