summaryrefslogtreecommitdiffstats
path: root/nsframework/notification_persistent_service/server/include/ns_npp_notification.h
blob: 673e54cdf4f230841b67b2eb5e644e483674c56d (plain)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
/*
 * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

////////////////////////////////////////////////////////////////////////////////////////////////////
/// \defgroup <<Group Tag>> <<Group Name>>
/// \ingroup  tag_NS_NPPService
/// .
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
/// \ingroup  tag_NS_NPPService
/// \brief    This file contains declaration of class CNotification.
///
////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef NOTIFICATION_PERSISTENT_SERVICE_SERVER_INCLUDE_NS_NPP_NOTIFICATION_H_
#define NOTIFICATION_PERSISTENT_SERVICE_SERVER_INCLUDE_NS_NPP_NOTIFICATION_H_

////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Files
////////////////////////////////////////////////////////////////////////////////////////////////////
#include <native_service/frameworkunified_types.h>
#include <map>
#include <string>
#include <iostream>
#include "ns_npp_notification_receiver.h"

typedef std::map<std::string, CNotificationReceiver *> NotifReceiver_Type;

/// Iterator of map of CNotificationReceiver
typedef NotifReceiver_Type::iterator NotifReceiver_Iterator_Type;

/**
 *  This class is base class for all the notification types classes.
 */
class CNotification {
 private:
  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// CNotification
  /// Parameterless Constructor of CNotification class
  ///
  /// \param
  ///
  /// \return
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  CNotification();

 protected:
  std::string m_cNotificationName;    ///< Name of Notification

  UI_32 m_uiMaxMsgSize;     ///< Maximum size of notification data

  EFrameworkunifiedNotificationType m_ePersistentType;  ///< type of notification

  std::string m_cServiceName;     ///< List of services registering notification

  NotifReceiver_Type *m_pmSubscribersList;  ///< list of subscribers of notification

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// AddReceiverInMap
  /// This function adds the name of the service to receiver list of notification.
  ///
  /// \param  [IN] f_csubscribername
  ///     std::string - name of application subscribing for notification
  ///
  /// \return EFrameworkunifiedStatus
  //      EFrameworkunifiedStatus - success or failure status
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  EFrameworkunifiedStatus AddReceiverInMap(const std::string &f_csubscribername);

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// PublishData
  /// This function publishes the notification to subscribed clients.
  ///
  /// \param  [IN] f_hmsgqhandle
  ///     HANDLE - MessageQ Handle of ReceiverQ
  ///
  /// \param  [IN] f_pmessage
  ///     std::string - data of notification
  ///
  /// \param  [IN] f_uimsgsize
  ///     std::string - length of data
  ///
  /// \return EFrameworkunifiedStatus
  //      EFrameworkunifiedStatus - success or failure status
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  EFrameworkunifiedStatus PublishData(HANDLE f_hmsgqhandle,
                         const PVOID f_pmessage,
                         const UI_32 f_uimsgsize);

 public:
  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// CNotification
  /// Constructor of CNotification class
  ///
  /// \param  [IN] f_cnotificationname
  ///     std::string - Notification name
  ///
  /// \param  [IN] f_uimaxmsgsize
  ///     UI_32 - Maximum size of notification data
  ///
  /// \return
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  CNotification(const std::string &f_cnotificationname,
                const UI_32 f_uimaxmsgsize);

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// ~CNotification
  /// Destructor of CNotification class
  ///
  /// \param
  ///
  /// \return
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  virtual ~CNotification();

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// AddEventReciever
  /// This function adds the name of the application to receiver list of particular notification.
  ///
  /// \param  [IN] f_csubscribername
  ///     std::string - name of application subscribing for notification
  ///
  /// \return EFrameworkunifiedStatus
  //      EFrameworkunifiedStatus - success or failure status
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  virtual EFrameworkunifiedStatus AddEventReciever(const std::string &f_csubscribername);

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// Publish
  /// This function publishes the notification to subscribed clients.
  ///
  /// \param  [IN] f_cservicename
  ///     std::string - name of service publishing the notification
  ///
  /// \param  [IN] f_pmessage
  ///     std::string - data of notification
  ///
  /// \param  [IN] f_uimsgsize
  ///     std::string - length of data
  ///
  /// \return EFrameworkunifiedStatus
  //      EFrameworkunifiedStatus - success or failure status
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  virtual EFrameworkunifiedStatus Publish(const std::string &f_cservicename,
                             PVOID f_pmessage,
                             const UI_32 f_uimsgsize);

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// DeleteEventReciever
  /// This function deletes the name of application from receivers list.
  ///
  /// \param  [IN] f_csubscribername
  ///     std::string - name of application
  ///
  /// \return EFrameworkunifiedStatus
  //      EFrameworkunifiedStatus - success or failure status
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  EFrameworkunifiedStatus DeleteEventReciever(const std::string &f_csubscribername);

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// SetNewSubscribersList
  /// This function sets the subscribers list of notification
  ///
  /// \param  [IN] f_pnotification
  ///     CNotification - notification object containing subscribers list
  ///
  /// \return EFrameworkunifiedStatus
  //      EFrameworkunifiedStatus - success or failure status
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  EFrameworkunifiedStatus SetNewSubscribersList(CNotification *f_pnotification);

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// SetEventPublisher
  /// This function set the publisher name to current received service name
  ///
  /// \param  [IN] f_cservicename
  ///     std::string - name of application
  ///
  /// \return EFrameworkunifiedStatus
  //      EFrameworkunifiedStatus - success or failure status
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  EFrameworkunifiedStatus SetEventPublisher(const std::string &f_cservicename);

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// ResetEventPublisher
  /// This function resets the publisher name to NULL
  ///
  /// \param  [IN] f_cservicename
  ///     std::string - name of application
  ///
  /// \return EFrameworkunifiedStatus
  //      EFrameworkunifiedStatus - success or failure status
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  EFrameworkunifiedStatus ResetEventPublisher(const std::string &f_cservicename);

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// IsServiceRegistered
  /// This function checks whether the notification is registered with any service or not.
  ///
  /// \param
  ///
  /// \return BOOL
  //      BOOL - true,if subscriber list is empty
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  BOOL IsServiceRegistered();

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// IsSubscribersListEmpty
  /// This function is used to check whether any service is subscribed to notification
  ///
  /// \param
  ///
  /// \return BOOL
  //      BOOL - true,if subscriber list is empty
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  BOOL IsSubscribersListEmpty();

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// GetNotificationName
  /// This function is used to get the notification name.
  ///
  /// \param
  ///
  /// \return std::string
  //      std::string - notification name
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  std::string GetNotificationName();

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// GetPublisherName
  /// This function is used to get the publisher name of notification.
  ///
  /// \param
  ///
  /// \return std::string
  //      std::string - service name
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  std::string GetPublisherName();

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// GetPersistenceType
  /// This function is used to get the type of notification.
  ///
  /// \param
  ///
  /// \return EFrameworkunifiedPersistentVarType
  //      EFrameworkunifiedPersistentVarType - persistent type
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  EFrameworkunifiedNotificationType GetNotificationType();

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// GetMaxMessageSize
  /// This function is used to get the max size of data of notification message.
  ///
  /// \param
  ///
  /// \return UI_32
  //      UI_32 - Max Message Size
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  UI_32 GetMaxMessageSize();

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// ResetMaxMessageSize
  /// This function reset the max size of data that can be published with notification
  ///
  /// \param  [IN] f_uilength
  ///     std::string - Max size for notification data
  ///
  /// \return EFrameworkunifiedStatus
  //      EFrameworkunifiedStatus - success or failure status
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  virtual EFrameworkunifiedStatus ResetMaxMessageSize(const UI_32 f_uilength);

#ifdef NPP_PROFILEINFO_ENABLE

  ////////////////////////////////////////////////////////////////////////////////////////////////
  /// GetSubscriberList
  /// Returns the list of subscribers subscribed to notification
  ///
  /// \param
  ///
  /// \return NotifReceiver_Type
  //      NotifReceiver_Type - subscriber's list of notification
  ///
  ////////////////////////////////////////////////////////////////////////////////////////////////
  NotifReceiver_Type *GetSubscriberList();

#endif
};

#endif  // NOTIFICATION_PERSISTENT_SERVICE_SERVER_INCLUDE_NS_NPP_NOTIFICATION_H_