summaryrefslogtreecommitdiff
path: root/src/3rd_party-static/MessageBroker/include/CMessageBroker.hpp
blob: 952b250aee7ba603ce1b461de2af38a8c4bca1d9 (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
/**
 * \file CMessageBroker.hpp
 * \brief CMessageBroker singletone class header.
 * \author AKara
 */

#ifndef CMESSAGEBROKER_H
#define CMESSAGEBROKER_H

#include <string>

#include "CSender.hpp"

/**
 * \namespace NsMessageBroker
 * \brief MessageBroker related functions.
 */ 
namespace NsMessageBroker 
{
   /**
    * \enum ErrorCode
    * \brief MessageBroker error codes.
    * \note Value from -32099 to -32000 are reserved for implementation-defined server-errors.
    */
   enum ErrorCode
   {
      CONTROLLER_EXISTS   = -32000, /**< Controller has been already registered. */
      SUBSCRIBTION_EXISTS = -32001, /**< Property has been already subscribed by this controller. */
      PARSING_ERROR       = -32700, /**< Invalid JSON. An error occurred on the server while parsing the JSON text. */
      INVALID_REQUEST     = -32600, /**< The received JSON not a valid MessageBroker Request. */
      METHOD_NOT_FOUND    = -32601, /**< The requested remote-procedure does not exist / is not available. */
      INVALID_PARAMS      = -32602, /**< Invalid method parameters. */
      INTERNAL_ERROR      = -32603, /**< Internal MessageBroker error. */
      UNSUPPORTED_RESOURCE  = 2       /**< Controller doesn't registered. */
   };

   /**
    * \brief Forward declaration of the private class.
    */
   class CMessageBroker_Private;

   /**
   * \class CMessageBroker
   * \brief Singletone CMessageBroker class implementation.
   */
   class CMessageBroker
   {
   public:
      /**
      * \brief Singletone instantiator.
      * \return pointer to CMessageBroker instance.
      */
      static CMessageBroker* getInstance();

      /**
      * \brief Destructor.
      */
      ~CMessageBroker();

      /**
      * \brief Receive data from TCP server (from client).
      * \param fd FileDescriptor of socket.
      * \param aJSONData JSON string.
      */
      void onMessageReceived(int fd, std::string& aJSONData);
      
      /**
       * \brief Test of buffer parsing.
       */
      void Test();

      /**
       * @brief OnSocketClosed should be called if socked is closed by HMI
       * @param fd socket descriptor
       */
      void OnSocketClosed(const int fd);

      /**
      * \brief Starts MessageBroker.
      */
      void startMessageBroker(CSender* pSender);

      /**
      * \brief Stops MessageBroker.
      */
      void stopMessageBroker();

      /**
      * \brief Method for thread with que processing.
      */
      void* MethodForThread(void * arg);

   private:
      /**
       * \brief Private constructor.
       */
      CMessageBroker();

      /**
       * \brief The PIMPL of the class.
       */
      CMessageBroker_Private *p;
   };
} /* namespace NsMessageBroker */

#endif // CMESSAGEBROKER_H