15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef REMOTING_PROTOCOL_HOST_EVENT_DISPATCHER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define REMOTING_PROTOCOL_HOST_EVENT_DISPATCHER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "remoting/protocol/channel_dispatcher_base.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "remoting/protocol/message_reader.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace protocol { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EventMessage; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InputStub; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HostEventDispatcher dispatches incoming messages on the event 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// channel to InputStub. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostEventDispatcher : public ChannelDispatcherBase { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(int64)> SequenceNumberCallback; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostEventDispatcher(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~HostEventDispatcher(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set InputStub that will be called for each incoming input 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // message. Doesn't take ownership of |input_stub|. It must outlive 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the dispatcher. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_input_stub(InputStub* input_stub) { input_stub_ = input_stub; } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set callback to notify of each message's sequence number. The 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // callback cannot tear down this object. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_sequence_number_callback(const SequenceNumberCallback& value) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sequence_number_callback_ = value; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ChannelDispatcherBase overrides. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnInitialized() OVERRIDE; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMessageReceived(scoped_ptr<EventMessage> message, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& done_task); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InputStub* input_stub_; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SequenceNumberCallback sequence_number_callback_; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtobufMessageReader<EventMessage> reader_; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HostEventDispatcher); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace protocol 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace remoting 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // REMOTING_PROTOCOL_HOST_EVENT_DISPATCHER_H_ 57