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 14namespace remoting { 15namespace protocol { 16 17HostEventDispatcher::HostEventDispatcher() 18 : ChannelDispatcherBase(kEventChannelName), 19 input_stub_(NULL) { 20} 21 22HostEventDispatcher::~HostEventDispatcher() { 23} 24 25void HostEventDispatcher::OnInitialized() { 26 reader_.Init(channel(), base::Bind( 27 &HostEventDispatcher::OnMessageReceived, base::Unretained(this))); 28} 29 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