Diag-Client-Lib
dm_conversation_state_impl.h
Go to the documentation of this file.
1 /* Diagnostic Client library
2  * Copyright (C) 2024 Avijit Dey
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7  */
8 #ifndef DIAGNOSTIC_CLIENT_LIB_APPL_SRC_DCM_CONVERSATION_DM_CONVERSATION_STATE_IMPL_H
9 #define DIAGNOSTIC_CLIENT_LIB_APPL_SRC_DCM_CONVERSATION_DM_CONVERSATION_STATE_IMPL_H
10 /* includes */
12 #include "utility/state.h"
13 
14 namespace diag {
15 namespace client {
16 namespace conversation_state_impl {
17 using namespace utility::state;
18 // Conversation States
19 enum class ConversationState : std::uint8_t {
20  kIdle = 0x00,
26 };
27 
29  public:
30  // ctor
32 
33  // dtor
35 
36  // Function to get the Conversation State context
37  auto GetConversationStateContext() noexcept -> StateContext<ConversationState> &;
38 
39  private:
40  // conversation state
41  std::unique_ptr<StateContext<ConversationState>> conversation_state_;
42 };
43 
44 class kIdle final : public State<ConversationState> {
45  public:
46  // ctor
47  explicit kIdle(ConversationState state);
48 
49  // dtor
50  ~kIdle() override = default;
51 
52  // start the state
53  void Start() override;
54 
55  // Stop the state
56  void Stop() override;
57 
58  // Handle invoked asynchronously
59  void HandleMessage() override;
60 };
61 
62 class kDiagWaitForRes final : public State<ConversationState> {
63  public:
64  // ctor
65  explicit kDiagWaitForRes(ConversationState state);
66 
67  // dtor
68  ~kDiagWaitForRes() override = default;
69 
70  // start the state
71  void Start() override;
72 
73  // Stop the state
74  void Stop() override;
75 
76  // Handle invoked asynchronously
77  void HandleMessage() override;
78 };
79 
80 class kDiagStartP2StarTimer final : public State<ConversationState> {
81  public:
82  // ctor
84 
85  // dtor
86  ~kDiagStartP2StarTimer() override = default;
87 
88  // start the state
89  void Start() override;
90 
91  // Stop the state
92  void Stop() override;
93 
94  // Handle invoked asynchronously
95  void HandleMessage() override;
96 };
97 
98 class kDiagRecvdPendingRes final : public State<ConversationState> {
99  public:
100  // ctor
101  explicit kDiagRecvdPendingRes(ConversationState state);
102 
103  // dtor
104  ~kDiagRecvdPendingRes() override = default;
105 
106  // start the state
107  void Start() override;
108 
109  // Stop the state
110  void Stop() override;
111 
112  // Handle invoked asynchronously
113  void HandleMessage() override;
114 };
115 
116 class kDiagRecvdFinalRes final : public State<ConversationState> {
117  public:
118  // ctor
119  explicit kDiagRecvdFinalRes(ConversationState state);
120 
121  // dtor
122  ~kDiagRecvdFinalRes() override = default;
123 
124  // start the state
125  void Start() override;
126 
127  // Stop the state
128  void Stop() override;
129 
130  // Handle invoked asynchronously
131  void HandleMessage() override;
132 };
133 
134 class kDiagSuccess final : public State<ConversationState> {
135  public:
136  // ctor
137  explicit kDiagSuccess(ConversationState state);
138 
139  // dtor
140  ~kDiagSuccess() override = default;
141 
142  // start the state
143  void Start() override;
144 
145  // Stop the state
146  void Stop() override;
147 
148  // Handle invoked asynchronously
149  void HandleMessage() override;
150 };
151 } // namespace conversation_state_impl
152 } // namespace client
153 } // namespace diag
154 #endif // DIAGNOSTIC_CLIENT_LIB_APPL_SRC_DCM_CONVERSATION_DM_CONVERSATION_STATE_IMPL_H