Add chage remote app
[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 isRemoteEcu(std::string appid);
60     bool isConnecting(std::string ecu_name);
61     bool isConnectionMode();
62     std::string parseMasterArea(const char* area);
63     bool isSyncDrawingForRemote(const char* role);
64     void startSyncDrawForRemote(const char* role);
65     void finishSyncDrawForRemote(const char* role);
66     int getMySocket();
67     int getConnectedSocket();
68     void setConnectedSocket(int connected_socket);
69     std::string getAreaToEcuName(const char* area);
70     std::string getSocketToEcuName(int socket);
71     std::string getMySocketToEcuName(int socket);
72     std::string getAppIdToEcuName(std::string appid);
73     std::string getIpToEcuName(std::string ip);
74     std::string getEcuName();
75     bool getEndInit();
76     int getSleepTime();
77     void setAppIdToEcuName(std::string appid, std::string ecu_name);
78     void setAppIdToReceivedEcuName(std::string appid);
79     void callOnReceivedHandler(json_object *j_out);
80     int connectToEcu();
81     int connectToServer(std::string ecu_name);
82     int connectedToServer(int socket);
83     void connectionTimeLimit();
84
85     int serverAccept(int socket);
86     int receive(json_object** j_out, int *j_cnt, int socket);
87
88   private:
89     std::string mode;
90     std::string received_ecu_name;
91     ReceivedHandler onReceived;
92     std::string syndDrawingAppId;
93
94     std::string ecu_name;
95     std::string received_ecu;
96
97     uint64_t times;
98     uint64_t sleep;
99
100     bool end_init;
101     ModeType wm_mode;
102
103     std::unordered_map<std::string, SocketInfo> wm_socket;
104     std::unordered_map<std::string, std::string> appid2ecuName;
105
106     int initializeServer();
107     int initializeClient(std::string ecu_name);
108     int loadTimeoutConfigFile();
109     int loadConnectionConfigFile();
110
111     int send(json_object* j_in, std::string ecu_name);
112
113     uint64_t getNextTimerTime(uint64_t msec);
114 };
115
116 } // namespace wm
117
118 #endif // WM_CONNECTION_HPP
119