1 /**
2  *  Callbacks.h
3  *
4  *  Class storing deferred callbacks of different type.
5  *
6  *  @copyright 2014 - 2018 Copernica BV
7  */
8 
9 /**
10  *  Include guard
11  */
12 #pragma once
13 
14 /**
15  *  Dependencies
16  */
17 #include <string>
18 #include <functional>
19 
20 /**
21  *  Set up namespace
22  */
23 namespace AMQP {
24 
25 /**
26  *  Forward declarations
27  */
28 class Message;
29 class MetaData;
30 
31 /**
32  *  Generic callbacks that are used by many deferred objects
33  */
34 using SuccessCallback       =   std::function<void()>;
35 using ErrorCallback         =   std::function<void(const char *message)>;
36 using FinalizeCallback      =   std::function<void()>;
37 
38 /**
39  *  Declaring and deleting a queue
40  */
41 using QueueCallback         =   std::function<void(const std::string &name, uint32_t messagecount, uint32_t consumercount)>;
42 using DeleteCallback        =   std::function<void(uint32_t deletedmessages)>;
43 
44 /**
45  *  When retrieving the size of a queue in some way
46  */
47 using EmptyCallback         =   std::function<void()>;
48 using CountCallback         =   std::function<void(uint32_t messagecount)>;
49 using SizeCallback          =   std::function<void(uint64_t messagesize)>;
50 
51 /**
52  *  Starting and stopping a consumer
53  */
54 using ConsumeCallback       =   std::function<void(const std::string &consumer)>;
55 using CancelCallback        =   std::function<void(const std::string &consumer)>;
56 
57 /**
58  *  Receiving messages, either via consume(), get() or as returned messages
59  *  The following methods receive the returned message in multiple parts
60  */
61 using StartCallback         =   std::function<void(const std::string &exchange, const std::string &routingkey)>;
62 using HeaderCallback        =   std::function<void(const MetaData &metaData)>;
63 using DataCallback          =   std::function<void(const char *data, size_t size)>;
64 using DeliveredCallback     =   std::function<void(uint64_t deliveryTag, bool redelivered)>;
65 
66 /**
67  *  For returned messages amqp-cpp first calls a return-callback before the start,
68  *  header and data callbacks are called. Instead of the deliver-callback, a
69  *  returned-callback is called.
70  */
71 using ReturnCallback        =   std::function<void(int16_t code, const std::string &message)>;
72 using ReturnedCallback      =   std::function<void()>;
73 
74 /**
75  *  If you do not want to merge all data into a single string, you can als
76  *  implement callbacks that return the collected message.
77  */
78 using MessageCallback       =   std::function<void(const Message &message, uint64_t deliveryTag, bool redelivered)>;
79 using BounceCallback        =   std::function<void(const Message &message, int16_t code, const std::string &description)>;
80 
81 /**
82  * When using publisher confirms, AckCallback is called when server confirms that message is received
83  * and processed. NackCallback is called otherwise.
84  */
85 using AckCallback           =   std::function<void(uint64_t deliveryTag, bool multiple)>;
86 using NackCallback          =   std::function<void(uint64_t deliveryTag, bool multiple, bool requeue)>;
87 
88 /**
89  *  End namespace
90  */
91 }
92