Связывает ключи пакетов с обработчиками и десериализует полезную нагрузку перед вызовом.
Подробнее...
|
|
| PIParseHelper () |
| | Создает пустой вспомогательный парсер.
|
| |
|
void | assign (Key key, std::function< void()> func) |
| | Связывает ключ "key" с callback-функцией "func" без аргументов полезной нагрузки.
|
| |
|
template<typename T > |
| void | assign (Key key, std::function< void(const T &)> func) |
| | Связывает ключ "key" с callback-функцией "func" с одним десериализуемым аргументом.
|
| |
|
template<typename O > |
| void | assign (Key key, O *obj, void(O::*member_func)()) |
| | Связывает ключ "key" с методом объекта "obj" без аргументов.
|
| |
|
template<typename T , typename O > |
| void | assign (Key key, O *obj, void(O::*member_func)(const T &)) |
| | Связывает ключ "key" с методом объекта "obj" с одним десериализуемым аргументом.
|
| |
|
template<typename L > |
| void | assign (Key key, L func) |
| | Связывает ключ "key" с функтором или lambda с нулем или одним аргументом.
|
| |
|
void | parse (Key key, PIByteArray ba) |
| | Десериализует полезную нагрузку "ba" и вызывает обработчики, назначенные ключу "key".
|
| |
template<typename Key>
class PIParseHelper< Key >
Связывает ключи пакетов с обработчиками и десериализует полезную нагрузку перед вызовом.
PIParseHelper помогает заменить ручную диспетчеризацию пакетов через switch набором вызовов assign(). Обработчиками могут быть обычные callback-функции, функторы или методы объекта. Тип полезной нагрузки восстанавливается из PIByteArray по сигнатуре выбранного обработчика.
Пример:
enum Header {
hInt = 1,
hString,
hVoid
};
PIOBJECT(MyObj);
public:
assign(hInt, std::function<
void(
int)>([
this](
int i){
piCout <<
"lambda type Int" << i;}));
assign(hInt, HANDLER(methodI));
assign(hString, HANDLER(methodS));
assign(hVoid, HANDLER(method));
}
EVENT_HANDLER1(
void, methodI,
int, i) {
piCout <<
"methodI" << i;}
EVENT_HANDLER0(
void, method) {
piCout <<
"method";}
};
int main() {
MyObj o;
data.clear();
data << 11;
o.parse(hInt, data);
data.clear();
o.parse(hString, data);
data.clear();
o.parse(hVoid, data);
}
Класс PIByteArray предоставляет массив байтов с эффективным управлением памятью и различными операция...
Definition: pibytearray.h:42
Базовый класс для объектов, которые объявляют события, обработчики событий и зарегистрированные метод...
Definition: piobject.h:56
Связывает ключи пакетов с обработчиками и десериализует полезную нагрузку перед вызовом.
Definition: piparsehelper.h:54
void assign(Key key, std::function< void()> func)
Связывает ключ "key" с callback-функцией "func" без аргументов полезной нагрузки.
Definition: piparsehelper.h:63
Класс строки.
Definition: pistring.h:42
return s
Оператор сохранения.
Definition: pisystemmonitor.h:312
#define piCout
Definition: picout.h:36
enum Header {
hInt = 1,
hString,
hVoid
};
PIOBJECT(MyObj);
public:
EVENT_HANDLER1(
void, methodI,
int, i) {
piCout <<
"methodI" << i;}
EVENT_HANDLER0(
void, method) {
piCout <<
"method";}
};
int main() {
MyObj obj;
parser.assign(hInt, obj.HANDLER(methodI));
parser.assign(hString, obj.HANDLER(methodS));
parser.assign(hVoid, obj.HANDLER(method));
data.clear();
data << 11;
parser.parse(hInt, data);
data.clear();
parser.parse(hString, data);
data.clear();
parser.parse(hVoid, data);
}