| // 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. | 
 |  | 
 | #ifndef REMOTING_PROTOCOL_CLIENT_CONTROL_DISPATCHER_H_ | 
 | #define REMOTING_PROTOCOL_CLIENT_CONTROL_DISPATCHER_H_ | 
 |  | 
 | #include "base/macros.h" | 
 | #include "base/memory/ref_counted.h" | 
 | #include "remoting/protocol/channel_dispatcher_base.h" | 
 | #include "remoting/protocol/clipboard_stub.h" | 
 | #include "remoting/protocol/cursor_shape_stub.h" | 
 | #include "remoting/protocol/host_stub.h" | 
 |  | 
 | namespace remoting { | 
 | namespace protocol { | 
 |  | 
 | class ClientStub; | 
 |  | 
 | // ClientControlDispatcher dispatches incoming messages on the control | 
 | // channel to ClientStub, ClipboardStub or CursorShapeStub. | 
 | // It also implements ClipboardStub and HostStub for outgoing messages. | 
 | class ClientControlDispatcher : public ChannelDispatcherBase, | 
 |                                 public ClipboardStub, | 
 |                                 public HostStub { | 
 |  public: | 
 |   ClientControlDispatcher(); | 
 |   ~ClientControlDispatcher() override; | 
 |  | 
 |   // ClipboardStub implementation. | 
 |   void InjectClipboardEvent(const ClipboardEvent& event) override; | 
 |  | 
 |   // HostStub implementation. | 
 |   void NotifyClientResolution(const ClientResolution& resolution) override; | 
 |   void ControlVideo(const VideoControl& video_control) override; | 
 |   void ControlAudio(const AudioControl& audio_control) override; | 
 |   void SetCapabilities(const Capabilities& capabilities) override; | 
 |   void RequestPairing(const PairingRequest& pairing_request) override; | 
 |   void DeliverClientMessage(const ExtensionMessage& message) override; | 
 |  | 
 |   // Sets the ClientStub that will be called for each incoming control | 
 |   // message. |client_stub| must outlive this object. | 
 |   void set_client_stub(ClientStub* client_stub) { client_stub_ = client_stub; } | 
 |  | 
 |   // Sets the ClipboardStub that will be called for each incoming clipboard | 
 |   // message. |clipboard_stub| must outlive this object. | 
 |   void set_clipboard_stub(ClipboardStub* clipboard_stub) { | 
 |     clipboard_stub_ = clipboard_stub; | 
 |   } | 
 |  | 
 |  private: | 
 |   void OnIncomingMessage(std::unique_ptr<CompoundBuffer> message) override; | 
 |  | 
 |   ClientStub* client_stub_ = nullptr; | 
 |   ClipboardStub* clipboard_stub_ = nullptr; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(ClientControlDispatcher); | 
 | }; | 
 |  | 
 | }  // namespace protocol | 
 | }  // namespace remoting | 
 |  | 
 | #endif  // REMOTING_PROTOCOL_CLIENT_CONTROL_DISPATCHER_H_ |