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/client_event_dispatcher.h"
6
7#include "base/message_loop/message_loop_proxy.h"
8#include "base/time/time.h"
9#include "net/socket/stream_socket.h"
10#include "remoting/base/constants.h"
11#include "remoting/proto/event.pb.h"
12#include "remoting/proto/internal.pb.h"
13#include "remoting/protocol/message_serialization.h"
14
15namespace remoting {
16namespace protocol {
17
18ClientEventDispatcher::ClientEventDispatcher()
19    : ChannelDispatcherBase(kEventChannelName) {
20}
21
22ClientEventDispatcher::~ClientEventDispatcher() {
23  writer_.Close();
24}
25
26void ClientEventDispatcher::OnInitialized() {
27  // TODO(garykac): Set write failed callback.
28  writer_.Init(channel(),
29                BufferedSocketWriter::WriteFailedCallback());
30}
31
32void ClientEventDispatcher::InjectKeyEvent(const KeyEvent& event) {
33  DCHECK(event.has_usb_keycode());
34  DCHECK(event.has_pressed());
35  EventMessage message;
36  message.set_sequence_number(base::Time::Now().ToInternalValue());
37  message.mutable_key_event()->CopyFrom(event);
38  writer_.Write(SerializeAndFrameMessage(message), base::Closure());
39}
40
41void ClientEventDispatcher::InjectTextEvent(const TextEvent& event) {
42  DCHECK(event.has_text());
43  EventMessage message;
44  message.set_sequence_number(base::Time::Now().ToInternalValue());
45  message.mutable_text_event()->CopyFrom(event);
46  writer_.Write(SerializeAndFrameMessage(message), base::Closure());
47}
48
49void ClientEventDispatcher::InjectMouseEvent(const MouseEvent& event) {
50  EventMessage message;
51  message.set_sequence_number(base::Time::Now().ToInternalValue());
52  message.mutable_mouse_event()->CopyFrom(event);
53  writer_.Write(SerializeAndFrameMessage(message), base::Closure());
54}
55
56}  // namespace protocol
57}  // namespace remoting
58