~aleteoryx/muditaos

ref: 09761da170faa207c5d899d2132a3cc67dad5a31 muditaos/module-apps/CallbackStorage.hpp -rw-r--r-- 1.1 KiB
09761da1 — DariuszSabala [BH-369] Fixed UTF8 unit test CI run 4 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "AsyncTask.hpp"

#include "module-sys/Service/Message.hpp"

#include <memory>
#include <list>

namespace app
{
    class CallbackStorage
    {
      public:
        [[nodiscard]] auto containsCallbackFor(sys::ResponseMessage *response) const noexcept -> bool;
        [[nodiscard]] auto getCallback(sys::ResponseMessage *response) -> std::unique_ptr<AsyncCallback>;

        void registerCallback(RequestId id, AsyncCallbackReceiver::Ptr receiver);
        void removeAll(AsyncCallbackReceiver::Ptr receiver);

      private:
        [[nodiscard]] static auto toCallback(sys::ResponseMessage *response) -> std::unique_ptr<AsyncCallback>;

        void remove(sys::ResponseMessage *response);

        struct CallbackEntry
        {
          public:
            CallbackEntry(RequestId id, AsyncCallbackReceiver::Ptr receiver) noexcept;

            RequestId id;
            AsyncCallbackReceiver::Ptr receiver;
        };
        std::list<std::unique_ptr<CallbackEntry>> entries;
    };
} // namespace app