1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef REMOTING_PROTOCOL_HOST_EVENT_DISPATCHER_H_ 6 #define REMOTING_PROTOCOL_HOST_EVENT_DISPATCHER_H_ 7 8 #include "remoting/protocol/channel_dispatcher_base.h" 9 #include "remoting/protocol/message_reader.h" 10 11 namespace remoting { 12 namespace protocol { 13 14 class EventMessage; 15 class InputStub; 16 17 // HostEventDispatcher dispatches incoming messages on the event 18 // channel to InputStub. 19 class HostEventDispatcher : public ChannelDispatcherBase { 20 public: 21 typedef base::Callback<void(int64)> SequenceNumberCallback; 22 23 HostEventDispatcher(); 24 virtual ~HostEventDispatcher(); 25 26 // Set InputStub that will be called for each incoming input 27 // message. Doesn't take ownership of |input_stub|. It must outlive 28 // the dispatcher. set_input_stub(InputStub * input_stub)29 void set_input_stub(InputStub* input_stub) { input_stub_ = input_stub; } 30 31 // Set callback to notify of each message's sequence number. The 32 // callback cannot tear down this object. set_sequence_number_callback(const SequenceNumberCallback & value)33 void set_sequence_number_callback(const SequenceNumberCallback& value) { 34 sequence_number_callback_ = value; 35 } 36 37 protected: 38 // ChannelDispatcherBase overrides. 39 virtual void OnInitialized() OVERRIDE; 40 41 private: 42 void OnMessageReceived(scoped_ptr<EventMessage> message, 43 const base::Closure& done_task); 44 45 InputStub* input_stub_; 46 SequenceNumberCallback sequence_number_callback_; 47 48 ProtobufMessageReader<EventMessage> reader_; 49 50 DISALLOW_COPY_AND_ASSIGN(HostEventDispatcher); 51 }; 52 53 } // namespace protocol 54 } // namespace remoting 55 56 #endif // REMOTING_PROTOCOL_HOST_EVENT_DISPATCHER_H_ 57