hmbdc
simplify-high-performance-messaging-programming
StuckClientPurger.hpp
1 #include "hmbdc/Copyright.hpp"
2 #pragma once
3 #include "hmbdc/app/Client.hpp"
4 
5 #include <iostream>
6 #include <unistd.h>
7 
8 namespace hmbdc { namespace app { namespace utils {
9 
10 using namespace std;
11 template <typename Buffer>
13 : Client<StuckClientPurger<Buffer>> {
14  StuckClientPurger(uint32_t secondsBewteenPurges
15  , Buffer& buffer)
16  : secondsBewteenPurges_(secondsBewteenPurges)
17  , secondsCurrent_(0)
18  , buffer_(buffer){
19  }
20 
21  void invokedCb(uint16_t) override {
22  sleep(1);
23  secondsCurrent_++;
24  if (secondsBewteenPurges_ == secondsCurrent_) {
25  auto res = buffer_.purge();
26  if (res) {
27  cerr << "purgedMask=" << hex << res << dec << endl;
28  }
29  buffer_.tryPut(MessageWrap<Flush>());
30  secondsCurrent_ = 0;
31  }
32  }
33 
34  void stoppedCb(exception const& e) {
35  cerr << e.what() << endl;
36  };
37 
38  char const* hmbdcName() const {
39  return "purger";
40  }
41 
42  tuple<char const*, int> schedSpec() const {
43  return make_tuple("SCHED_IDLE", 0);
44  }
45 
46 private:
47  uint32_t secondsBewteenPurges_;
48  uint32_t secondsCurrent_;
49  Buffer& buffer_;
50 };
51 
52 }}}
Definition: StuckClientPurger.hpp:12
Definition: TypedString.hpp:74
Definition: Message.hpp:46
Definition: Client.hpp:39
Definition: Client.hpp:11