| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // ChromotingClient is the controller for the Client implementation. |
| |
| #ifndef REMOTING_CLIENT_CHROMOTING_CLIENT_H_ |
| #define REMOTING_CLIENT_CHROMOTING_CLIENT_H_ |
| |
| #include <string> |
| |
| #include "base/callback.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "remoting/client/client_config.h" |
| #include "remoting/client/chromoting_stats.h" |
| #include "remoting/protocol/client_stub.h" |
| #include "remoting/protocol/clipboard_stub.h" |
| #include "remoting/protocol/connection_to_host.h" |
| #include "remoting/protocol/input_stub.h" |
| #include "remoting/protocol/video_stub.h" |
| |
| namespace base { |
| class SingleThreadTaskRunner; |
| } // namespace base |
| |
| namespace remoting { |
| |
| namespace protocol { |
| class TransportFactory; |
| } // namespace protocol |
| |
| class AudioDecodeScheduler; |
| class AudioPlayer; |
| class ClientContext; |
| class ClientUserInterface; |
| class FrameConsumerProxy; |
| class FrameProducer; |
| class VideoRenderer; |
| class SignalStrategy; |
| |
| class ChromotingClient : public protocol::ConnectionToHost::HostEventCallback, |
| public protocol::ClientStub { |
| public: |
| // |audio_player| may be null, in which case audio will not be requested. |
| ChromotingClient(const ClientConfig& config, |
| ClientContext* client_context, |
| protocol::ConnectionToHost* connection, |
| ClientUserInterface* user_interface, |
| VideoRenderer* video_renderer, |
| scoped_ptr<AudioPlayer> audio_player); |
| |
| virtual ~ChromotingClient(); |
| |
| // Start the client. Must be called on the main thread. |signal_strategy| |
| // must outlive the client. |
| void Start(SignalStrategy* signal_strategy, |
| scoped_ptr<protocol::TransportFactory> transport_factory); |
| |
| // ClientStub implementation. |
| virtual void SetCapabilities( |
| const protocol::Capabilities& capabilities) OVERRIDE; |
| virtual void SetPairingResponse( |
| const protocol::PairingResponse& pairing_response) OVERRIDE; |
| virtual void DeliverHostMessage( |
| const protocol::ExtensionMessage& message) OVERRIDE; |
| |
| // ClipboardStub implementation for receiving clipboard data from host. |
| virtual void InjectClipboardEvent( |
| const protocol::ClipboardEvent& event) OVERRIDE; |
| |
| // CursorShapeStub implementation for receiving cursor shape updates. |
| virtual void SetCursorShape( |
| const protocol::CursorShapeInfo& cursor_shape) OVERRIDE; |
| |
| // ConnectionToHost::HostEventCallback implementation. |
| virtual void OnConnectionState( |
| protocol::ConnectionToHost::State state, |
| protocol::ErrorCode error) OVERRIDE; |
| virtual void OnConnectionReady(bool ready) OVERRIDE; |
| virtual void OnRouteChanged(const std::string& channel_name, |
| const protocol::TransportRoute& route) OVERRIDE; |
| |
| private: |
| // Called when the connection is authenticated. |
| void OnAuthenticated(); |
| |
| // Called when all channels are connected. |
| void OnChannelsConnected(); |
| |
| // The following are not owned by this class. |
| ClientConfig config_; |
| scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| protocol::ConnectionToHost* connection_; |
| ClientUserInterface* user_interface_; |
| VideoRenderer* video_renderer_; |
| |
| scoped_ptr<AudioDecodeScheduler> audio_decode_scheduler_; |
| |
| // If non-NULL, this is called when the client is done. |
| base::Closure client_done_; |
| |
| // The set of all capabilities supported by the host. |
| std::string host_capabilities_; |
| |
| // True if |protocol::Capabilities| message has been received. |
| bool host_capabilities_received_; |
| |
| // Record the statistics of the connection. |
| ChromotingStats stats_; |
| |
| // WeakPtr used to avoid tasks accessing the client after it is deleted. |
| base::WeakPtr<ChromotingClient> weak_ptr_; |
| base::WeakPtrFactory<ChromotingClient> weak_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ChromotingClient); |
| }; |
| |
| } // namespace remoting |
| |
| #endif // REMOTING_CLIENT_CHROMOTING_CLIENT_H_ |