91f870e00488fa5c0c8c73e5c6741b3e0dc1e0b8
[apps/agl-service-windowmanager.git] / src / wm_connection.hpp
1 /*
2  * Insert Copyright if needed.
3  */
4
5 #ifndef WM_CONNECTION_HPP
6 #define WM_CONNECTION_HPP
7
8 #include <functional>
9 #include <unordered_map>
10
11 struct json_object;
12
13 namespace wm
14 {
15
16 class SocketInfo
17 {
18     public:
19         SocketInfo() {};
20         SocketInfo(std::string screen_name, std::string ip, int wm_port, bool master_mode) : _screen_name(screen_name),
21             _ip(ip), _wm_port(wm_port), _master_mode(master_mode){}
22         std::string screenName() const { return _screen_name; }
23         std::string ip() const { return _ip; }
24         int wmPort() const { return _wm_port; }
25         bool masterMode() const { return _master_mode; }
26         int mySocket() const { return _my_socket; }
27         int connectedSocket() const { return _connected_socket; }
28         void setMySocket(int socket) { this->_my_socket = socket; }
29         void setConnectedSocket(int socket) { this->_connected_socket = socket; }
30
31     private:
32         std::string _screen_name;
33         std::string _ip;
34         int _wm_port;
35         bool _master_mode;
36         int _my_socket = -1;
37         int _connected_socket = -1;
38 };
39
40 class WMConnection
41 {
42   public:
43     WMConnection();
44     ~WMConnection() = default;
45
46     using ReceivedHandler = std::function<void(json_object* j_out)>;
47
48     enum ModeType
49     {
50         Mode_Standalone = 0,
51         Mode_Connection,
52     };
53
54     int initialize();
55     void registerCallback(ReceivedHandler on_received);
56     int sendRequest(char const *req, char const *appid,
57                     char const *drawing_name, char const *drawing_area);
58     bool isRemoteArea(const char* area);
59     bool isConnecting(std::string ecu_name);
60     bool isConnectionMode();
61     std::string parseMasterArea(const char* area);
62     bool isSyncDrawingForRemote(const char* role);
63     void startSyncDrawForRemote(const char* role);
64     void finishSyncDrawForRemote(const char* role);
65     int getMySocket();
66     int getConnectedSocket();
67     void setConnectedSocket(int connected_socket);
68     std::string getAreaToEcuName(const char* area);
69     std::string getSocketToEcuName(int socket);
70     std::string getMySocketToEcuName(int socket);
71     std::string getAppIdToEcuName(std::string appid);
72     std::string getIpToEcuName(std::string ip);
73     std::string getEcuName();
74     bool getEndInit();
75     void setAppIdToEcuName(std::string appid, std::string ecu_name);
76     void setAppIdToReceivedEcuName(std::string appid);
77     void callOnReceivedHandler(json_object *j_out);
78     int connectToEcu();
79     int connectToServer(std::string ecu_name);
80     int connectedToServer(int socket);
81     void connectionTimeLimit();
82
83     int serverAccept(int socket);
84     int receive(json_object** j_out, int *j_cnt, int socket);
85
86   private:
87     std::string mode;
88     std::string received_ecu_name;
89     ReceivedHandler onReceived;
90     std::string syndDrawingAppId;
91
92     std::string ecu_name;
93     std::string received_ecu;
94
95     uint64_t times;
96     uint64_t sleep;
97
98     bool end_init;
99     ModeType wm_mode;
100
101     std::unordered_map<std::string, SocketInfo> wm_socket;
102     std::unordered_map<std::string, std::string> appid2ecuName;
103
104     int initializeServer();
105     int initializeClient(std::string ecu_name);
106     int loadTimeoutConfigFile();
107     int loadConnectionConfigFile();
108
109     int send(json_object* j_in, std::string ecu_name);
110
111     uint64_t getNextTimerTime(uint64_t msec);
112 };
113
114 } // namespace wm
115
116 #endif // WM_CONNECTION_HPP
117