acl
3.5.3.0
queue_manager.hpp
浏览该文件的文档.
1
#pragma once
2
#include <map>
3
#include "../stdlib/string.hpp"
4
#include "../stdlib/locker.hpp"
5
#include "../stdlib/noncopyable.hpp"
6
#include "
queue_file.hpp
"
7
8
typedef
struct
ACL_SCAN_DIR
ACL_SCAN_DIR
;
9
10
namespace
acl
{
11
12
class
queue_file;
13
14
class
ACL_CPP_API
queue_manager
:
public
noncopyable
15
{
16
public
:
17
/**
18
* 队列对象的构造函数
19
* @param home {const char*} 队列的根目录
20
* @param queueName {const char*} 该队列对象的队列名称
21
*/
22
queue_manager
(
const
char
* home,
const
char
* queueName,
23
unsigned
sub_width = 2);
24
~
queue_manager
();
25
26
/**
27
* 获得队列名
28
* @return {const char*}
29
*/
30
const
char
* get_queueName()
const
;
31
32
/**
33
* 获得队列根目录
34
* @return {const char*}
35
*/
36
const
char
* get_home()
const
;
37
38
/**
39
* 创建队列文件
40
* @param extName {const char*} 队列文件扩展名
41
* @return {queue_file*} 队列文件对象, 永远非NULL, 该返回值
42
* 为动态创建的, 所以用完后需要 delete 以释放其所占内存
43
*/
44
queue_file
* create_file(
const
char
* extName);
45
46
/**
47
* 打开磁盘上存在的队列文件用于读/写
48
* @param path {const char*} 队列文件名
49
* @param no_cache {bool} 为 true 时,要求在缓存中该文件对应的 KEY
50
* 必须不存在,如果存在则返回 NULL 表示该文件正被锁定; 当该参数为
51
* false 时,则可以直接使用缓存中的对象
52
* @return {queue_file*} 队列文件对象, 出错或不存在则返回 NULL
53
*/
54
queue_file
* open_file(
const
char
* path,
bool
no_cache =
true
);
55
56
/**
57
* 关闭队列文件句柄, 并释放该文件对象,并不删除文件
58
* @param fp {queue_file*} 队列文件对象
59
* @return {bool} 关闭是否成功
60
*/
61
bool
close_file(
queue_file
* fp);
62
63
/**
64
* 从磁盘上删除队列文件, 并释放该文件对象
65
* @param fp {queue_file*} 队列文件对象
66
* @return {bool} 删除文件是否成功
67
*/
68
bool
delete_file(
queue_file
* fp);
69
70
/**
71
* 修改文件的扩展名
72
* @param fp {queue_file*} 队列文件对象
73
* @param extName {const char*} 新的扩展名
74
* @return {bool} 修改文件扩展名是否成功
75
*/
76
bool
rename_extname(
queue_file
* fp,
const
char
* extName);
77
78
/**
79
* 将队列文件移至目标队列中, 移动成功后, 文件对象内部内容将会发生改变
80
* @param fp {queue_file*} 队列文件对象
81
* @param queueName {const char*} 目标队列名
82
* @param extName {const char*} 文件扩展名
83
* @return {bool} 移动队列文件是否成功, 如果移动失败, 则调用者应用调用
84
* close_file 关闭该队列文件对象, 该文件将会被定时扫描任务移走
85
*/
86
bool
move_file(
queue_file
* fp,
const
char
* queueName,
const
char
* extName);
87
88
/**
89
* 将一个队列文件对象移至目标队列对象中
90
* @param fp {queue_file*} 队列文件对象
91
* @param toQueue {queue_manager*} 目标队列对象
92
* @param extName {const char*} 文件扩展名
93
* @return {bool} 移动队列文件是否成功, 如果移动失败, 则调用者应用调用
94
* close_file 关闭该队列文件对象, 该文件将会被定时扫描任务移走
95
*/
96
bool
move_file(
queue_file
* fp,
queue_manager
* toQueue,
const
char
* extName);
97
98
/**
99
* 从磁盘上删除本队列文件, 删除成功后该队列文件句柄已经被删除, 不可再用,
100
* 即使删除文件失败, 该队列文件对象也被释放, 只是从磁盘上删除该文件失败,
101
* 所以调用此函数后 fp 不能再次使用
102
* @param fp {queue_file*}
103
* @return {bool} 删除是否成功
104
*/
105
bool
remove(
queue_file
* fp);
106
107
/**
108
* 检查所给文件名是否正在被使用
109
* @param fileName {const char*} 文件名
110
* @return {bool} 是否被使用
111
*/
112
bool
busy(
const
char
* fileName);
113
114
/**
115
* 在队列对象的缓存中查找某个队列文件对象
116
* @param key {const char*} 队列文件的部分文件名(不含路径及扩展名)
117
* @return {queue_file*} 返回 NULL 则表示未查到
118
*/
119
queue_file
* cache_find(
const
char
* key);
120
121
/**
122
* 向队列对象的缓存中添加某个队列文件对象
123
* @param fp {queue_file*} 队列文件对象
124
* @return {bool} 添加是否成功, 若失败则说明该对象或其对应的键值
125
* 已经存在于缓存中
126
*/
127
bool
cache_add(
queue_file
* fp);
128
129
/**
130
* 从队列对象的缓存中删除某个队列文件对象
131
* @param key {const char*} 队列文件对象的键值
132
* @return {bool} 删除是否成功, 若失败则说明该队列文件对象不存在
133
*/
134
bool
cache_del(
const
char
* key);
135
136
/*-------------------- 与队列扫描相关的函数 ------------------------*/
137
138
/**
139
* 打开磁盘扫描队列
140
* @param scanSub {bool} 是否递归扫描子目录
141
* @return {bool} 打开队列是否成功
142
*/
143
bool
scan_open(
bool
scanSub =
true
);
144
145
/**
146
* 关闭扫描队列
147
*/
148
void
scan_close();
149
150
/**
151
* 获得磁盘队列中的下一个队列文件, 若扫描完毕则返回空
152
* @return {queue_file*} 扫描的队列文件对象, 返回空则表示扫描完毕
153
* 或出错,非空对象一定要在用完后 delete 以释放内部分配的资源
154
*/
155
queue_file
* scan_next(
void
);
156
157
/**
158
* 根据文件路径分析出队列名, 文件名(不含路径及扩展名部分), 文件扩展名
159
* @param filePath {const char*} 文件全路径名
160
* @param home {acl::string*} 存储文件所在的根目录
161
* @param queueName {acl::string*} 存储文件所在的队列名
162
* @param queueSub {acl::string*} 存储文件的队列子目录
163
* @param partName {acl::string*} 存储文件的文件名部分(不含路径及扩展名)
164
* @param extName {acl::string*} 存储文件的扩展名部分
165
*/
166
static
bool
parse_filePath(
const
char
* filePath,
acl::string
* home,
167
string
* queueName,
string
* queueSub,
168
string
* partName,
string
* extName);
169
170
/**
171
* 根据文件名称(含扩展名但不含路径), 分析出文件名(不含路径及扩展名),
172
* 和文件扩展名称
173
*/
174
static
bool
parse_fileName(
const
char
* fileName,
acl::string
* partName,
175
string
* extName);
176
177
/**
178
* 分析路径, 从中提取出队列名称
179
*/
180
static
bool
parse_path(
const
char
* path,
acl::string
* home,
181
string
* queueName,
acl::string
* queueSub);
182
183
/**
184
* 根据部分文件名(不含目录及扩展名)计算出其队列子目录路径(以数字表示)
185
* @param partName {const char*} 部分文件名
186
* @param width {unsigned} 队列二级目录的个数
187
* @return {unsigned int} 队列子目录路径(以数字表示)
188
*/
189
static
unsigned
int
hash_queueSub(
const
char
* partName,
unsigned
width);
190
191
protected
:
192
private
:
193
bool
cache_check(
queue_file
* fp);
194
195
//typedef struct ACL_SCAN_DIR ACL_SCAN_DIR;
196
197
// 扫描目录的句柄
198
ACL_SCAN_DIR
* m_scanDir;
199
string
m_home;
200
string
m_queueName;
201
unsigned
sub_width_;
202
203
std::map<string, queue_file*> m_queueList;
204
locker
m_queueLocker;
205
};
206
207
}
// namespace acl
ACL_SCAN_DIR
struct ACL_SCAN_DIR ACL_SCAN_DIR
Definition:
acl_scan_dir.h:14
acl::queue_manager
Definition:
queue_manager.hpp:14
acl::locker
Definition:
locker.hpp:22
queue_file.hpp
acl
Definition:
acl_cpp_init.hpp:4
acl::noncopyable
Definition:
noncopyable.hpp:6
acl::string
Definition:
string.hpp:20
acl::queue_file
Definition:
queue_file.hpp:16
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
include
acl_cpp
queue
queue_manager.hpp
生成于 2021年 九月 10日 星期五 11:14:44 , 为 acl使用
1.8.15