• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #pragma once
2 
3 /*
4  * Copyright (C) 2017 The Android Open Source Project
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 
19 #include <memory>
20 #include <string>
21 #include <thread>
22 #include <utility>
23 
24 #include "common/libs/utils/tcp_socket.h"
25 #include "host/frontend/vnc_server/blackboard.h"
26 #include "host/frontend/vnc_server/frame_buffer_watcher.h"
27 #include "host/frontend/vnc_server/jpeg_compressor.h"
28 #include "host/frontend/vnc_server/virtual_inputs.h"
29 #include "host/frontend/vnc_server/vnc_client_connection.h"
30 #include "host/frontend/vnc_server/vnc_utils.h"
31 #include "host/libs/confui/host_mode_ctrl.h"
32 #include "host/libs/confui/host_virtual_input.h"
33 #include "host/libs/screen_connector/screen_connector.h"
34 
35 namespace cuttlefish {
36 namespace vnc {
37 
38 class VncServer {
39  public:
40   explicit VncServer(int port, bool aggressive,
41                      ScreenConnector& screen_connector,
42                      cuttlefish::confui::HostVirtualInput& confui_input);
43 
44   VncServer(const VncServer&) = delete;
45   VncServer& operator=(const VncServer&) = delete;
46 
47   [[noreturn]] void MainLoop();
48 
49  private:
50   void StartClient(ClientSocket sock);
51 
52   void StartClientThread(ClientSocket sock);
53 
54   ServerSocket server_;
55 
56   std::shared_ptr<VirtualInputs> virtual_inputs_;
57   BlackBoard bb_;
58 
59   FrameBufferWatcher frame_buffer_watcher_;
60   bool aggressive_{};
61 };
62 
63 }  // namespace vnc
64 }  // namespace cuttlefish
65