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 #include "remoting/protocol/host_event_dispatcher.h" 6 7 #include "base/callback_helpers.h" 8 #include "net/socket/stream_socket.h" 9 #include "remoting/base/constants.h" 10 #include "remoting/proto/event.pb.h" 11 #include "remoting/proto/internal.pb.h" 12 #include "remoting/protocol/input_stub.h" 13 14 namespace remoting { 15 namespace protocol { 16 HostEventDispatcher()17HostEventDispatcher::HostEventDispatcher() 18 : ChannelDispatcherBase(kEventChannelName), 19 input_stub_(NULL) { 20 } 21 ~HostEventDispatcher()22HostEventDispatcher::~HostEventDispatcher() { 23 } 24 OnInitialized()25void HostEventDispatcher::OnInitialized() { 26 reader_.Init(channel(), base::Bind( 27 &HostEventDispatcher::OnMessageReceived, base::Unretained(this))); 28 } 29 OnMessageReceived(scoped_ptr<EventMessage> message,const base::Closure & done_task)30void HostEventDispatcher::OnMessageReceived( 31 scoped_ptr<EventMessage> message, const base::Closure& done_task) { 32 DCHECK(input_stub_); 33 34 base::ScopedClosureRunner done_runner(done_task); 35 36 if (message->has_sequence_number() && !sequence_number_callback_.is_null()) 37 sequence_number_callback_.Run(message->sequence_number()); 38 39 if (message->has_key_event()) { 40 const KeyEvent& event = message->key_event(); 41 if (event.has_usb_keycode() && event.has_pressed()) { 42 input_stub_->InjectKeyEvent(event); 43 } else { 44 LOG(WARNING) << "Received invalid key event."; 45 } 46 } else if (message->has_text_event()) { 47 const TextEvent& event = message->text_event(); 48 if (event.has_text()) { 49 input_stub_->InjectTextEvent(event); 50 } else { 51 LOG(WARNING) << "Received invalid text event."; 52 } 53 } else if (message->has_mouse_event()) { 54 input_stub_->InjectMouseEvent(message->mouse_event()); 55 } else { 56 LOG(WARNING) << "Unknown event message received."; 57 } 58 } 59 60 } // namespace protocol 61 } // namespace remoting 62