1fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 4ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 5ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org#include "remoting/protocol/host_event_dispatcher.h" 6ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 7ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org#include "base/callback_helpers.h" 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "net/socket/stream_socket.h" 9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "remoting/base/constants.h" 10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "remoting/proto/event.pb.h" 111e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#include "remoting/proto/internal.pb.h" 12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "remoting/protocol/input_stub.h" 13196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 144b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.orgnamespace remoting { 15196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgnamespace protocol { 16196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 17196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgHostEventDispatcher::HostEventDispatcher() 18196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org : ChannelDispatcherBase(kEventChannelName), 19196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org input_stub_(NULL) { 203e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org} 21196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 22196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgHostEventDispatcher::~HostEventDispatcher() { 23196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 244b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org 25196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgvoid HostEventDispatcher::OnInitialized() { 26ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org reader_.Init(channel(), base::Bind( 27ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org &HostEventDispatcher::OnMessageReceived, base::Unretained(this))); 285de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org} 295de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org 305de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.orgvoid HostEventDispatcher::OnMessageReceived( 315de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org scoped_ptr<EventMessage> message, const base::Closure& done_task) { 325de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org DCHECK(input_stub_); 33ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 34ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org base::ScopedClosureRunner done_runner(done_task); 35ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 3647390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org if (message->has_sequence_number() && !sequence_number_callback_.is_null()) 37ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org sequence_number_callback_.Run(message->sequence_number()); 38ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 3947390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org if (message->has_key_event()) { 40e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org const KeyEvent& event = message->key_event(); 41ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (event.has_usb_keycode() && event.has_pressed()) { 4257a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org input_stub_->InjectKeyEvent(event); 43ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else { 44ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org LOG(WARNING) << "Received invalid key event."; 45ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 46ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (message->has_text_event()) { 47ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org const TextEvent& event = message->text_event(); 48ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (event.has_text()) { 49ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org input_stub_->InjectTextEvent(event); 50c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org } else { 51ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org LOG(WARNING) << "Received invalid text event."; 52ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 53ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (message->has_mouse_event()) { 54ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org input_stub_->InjectMouseEvent(message->mouse_event()); 55ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else { 56750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org LOG(WARNING) << "Unknown event message received."; 57750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org } 58ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 59c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 6057a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org} // namespace protocol 615924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org} // namespace remoting 62ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org