|
16 | 16 | USING_NAMESPACE(std); |
17 | 17 | USING_NAMESPACE(cpp_study); |
18 | 18 |
|
| 19 | +static |
| 20 | +auto debug_print = [](auto& b) |
| 21 | +{ |
| 22 | + using json_t = nlohmann::json; |
| 23 | + |
| 24 | + json_t j; |
| 25 | + |
| 26 | + j["id"] = b.id(); |
| 27 | + j["sold"] = b.sold(); |
| 28 | + j["revenue"] = b.revenue(); |
| 29 | + //j["average"] = b.average(); |
| 30 | + |
| 31 | + std::cout << j.dump(2) << std::endl; |
| 32 | +}; |
| 33 | + |
19 | 34 | int main() |
20 | 35 | { |
21 | 36 | cout << "hello cpp_study server" << endl; |
22 | 37 |
|
23 | 38 | Summary sum; |
| 39 | + std::atomic_int count {0}; |
24 | 40 |
|
25 | 41 | auto cycle = [&](const auto& addr) |
26 | 42 | { |
27 | 43 | using zmq_ctx = ZmqContext<1>; |
28 | 44 |
|
| 45 | + // zmq recv |
| 46 | + |
29 | 47 | auto sock = zmq_ctx::recv_sock(); |
30 | 48 |
|
31 | 49 | sock.bind(addr); |
32 | 50 | assert(sock.connected()); |
33 | 51 |
|
34 | | - auto msg_ptr = std::make_shared<zmq_message_type>(); |
| 52 | + for(;;) { |
| 53 | + |
| 54 | + // shared_ptr/unique_ptr |
| 55 | + auto msg_ptr = std::make_shared<zmq_message_type>(); |
| 56 | + |
| 57 | + sock.recv(msg_ptr.get()); |
| 58 | + //cout << msg_ptr->size() << endl; |
| 59 | + |
| 60 | + // async process msg |
| 61 | + |
| 62 | + std::async(std::launch::async, |
| 63 | + [&sum, &count](decltype(msg_ptr) ptr) |
| 64 | + { |
| 65 | + //cout << ptr.unique() << endl; |
| 66 | + |
| 67 | + SalesData book; |
35 | 68 |
|
36 | | - sock.recv(msg_ptr.get()); |
37 | | - cout << msg_ptr->size() << endl; |
| 69 | + auto obj = msgpack::unpack( |
| 70 | + ptr->data<char>(), ptr->size()).get(); |
| 71 | + obj.convert(book); |
38 | 72 |
|
39 | | - std::async( |
40 | | - [&sum, msg_ptr]() |
41 | | - { |
42 | | - SalesData data; |
| 73 | + //cout << book.id() << endl; |
| 74 | + //debug_print(book); |
43 | 75 |
|
44 | | - auto obj = msgpack::unpack( |
45 | | - msg_ptr->data<char>(), msg_ptr->size()).get(); |
46 | | - obj.convert(data); |
| 76 | + sum.add_sales(book); |
47 | 77 |
|
48 | | - sum.add_sales(data); |
49 | | - }); |
| 78 | + ++count; |
| 79 | + cout << count << endl; |
| 80 | + }, |
| 81 | + msg_ptr); |
| 82 | + } |
50 | 83 | }; |
51 | 84 |
|
52 | 85 | auto fu = std::async(cycle, "tcp://127.0.0.1:5555"); |
|
0 commit comments