eris 1.4.0
A WorldForge client library.
Response.h
1#ifndef ERIS_RESPONSE_H
2#define ERIS_RESPONSE_H
3
4#include "Router.h"
5
6#include <Atlas/Objects/ObjectsFwd.h>
7#include <unordered_map>
8#include <functional>
9#include <memory>
10#include <cstdint>
11
12namespace Eris
13{
14
15std::string getErrorMessage(const Atlas::Objects::Operation::RootOperation & err);
16
17
19{
20public:
21 virtual ~ResponseBase();
22
26 virtual Router::RouterResult responseReceived(const Atlas::Objects::Operation::RootOperation& op) = 0;
27};
28
30{
31public:
32 Router::RouterResult responseReceived(const Atlas::Objects::Operation::RootOperation&) override;
33};
34
35void* clearMemberResponse(void*);
36
37template <class T>
39{
40public:
41 typedef void (T::*T_method)(const Atlas::Objects::Operation::RootOperation& op);
42
43 MemberResponse(T *obj, void (T::*method)(const Atlas::Objects::Operation::RootOperation& op)) :
44 m_object(obj),
45 m_func(method)
46 {
47 obj->add_destroy_notify_callback(&m_object, &clearMemberResponse);
48 }
49
50 ~MemberResponse() override {
51 if (m_object) m_object->remove_destroy_notify_callback(&m_object);
52 }
53
54 Router::RouterResult responseReceived(const Atlas::Objects::Operation::RootOperation& op) override {
55 if (m_object) (m_object->*m_func)(op);
56 return Router::HANDLED;
57 }
58
59private:
60 T* m_object;
61 T_method m_func;
62};
63
65{
66public:
67
68 typedef std::function<Router::RouterResult(const Atlas::Objects::Operation::RootOperation& op)> Callback;
69
71
72 void await(std::int64_t serialno, std::unique_ptr<ResponseBase>);
73
74 void await(std::int64_t serial, Callback callback);
75
76 template <class T>
77 void await(std::int64_t serial, T* ins, void (T::*method)(const Atlas::Objects::Operation::RootOperation& op) )
78 {
79 await(serial, std::make_unique<MemberResponse<T>>(ins, method));
80 }
81
82 void ignore(std::int64_t serial)
83 {
84 await(serial, std::make_unique<NullResponse>());
85 }
86
87 Router::RouterResult handleOp(const Atlas::Objects::Operation::RootOperation& op);
88
89private:
90 std::unordered_map<std::int64_t, Callback> m_pending;
91};
92
93} // of namespace
94
95#endif // of ERIS_RESPONSE_H
Router::RouterResult responseReceived(const Atlas::Objects::Operation::RootOperation &op) override
Definition: Response.h:54
Router::RouterResult responseReceived(const Atlas::Objects::Operation::RootOperation &) override
Definition: Response.cpp:76
virtual Router::RouterResult responseReceived(const Atlas::Objects::Operation::RootOperation &op)=0
Definition: Account.cpp:33