Home | History | Annotate | Download | only in protocol
      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.
     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.
     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