00001 #ifndef PROTON_RECONNECT_TIMER_HPP
00002 #define PROTON_RECONNECT_TIMER_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00027
00028 #include "./internal/export.hpp"
00029 #include "./duration.hpp"
00030 #include "./timestamp.hpp"
00031 #include "./types.hpp"
00032
00033 #include <string>
00034
00035 namespace proton {
00036
00041 class reconnect_timer {
00042 public:
00043 PN_CPP_EXTERN reconnect_timer(uint32_t first = 0, int32_t max = -1, uint32_t increment = 100,
00044 bool doubling = true, int32_t max_retries = -1, int32_t timeout = -1);
00045
00048 PN_CPP_EXTERN void reset();
00049
00054 PN_CPP_EXTERN int next_delay(timestamp now);
00055
00056 private:
00057 duration first_delay_;
00058 duration max_delay_;
00059 duration increment_;
00060 bool doubling_;
00061 int32_t max_retries_;
00062 duration timeout_;
00063 int32_t retries_;
00064 duration next_delay_;
00065 timestamp timeout_deadline_;
00066 };
00067
00068 }
00069
00071
00072 #endif // PROTON_RECONNECT_TIMER_HPP