| Index: remoting/client/simple_client.cc
|
| ===================================================================
|
| --- remoting/client/simple_client.cc (revision 52921)
|
| +++ remoting/client/simple_client.cc (working copy)
|
| @@ -1,148 +0,0 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -// A simple client implements a minimal Chromoting client and shows
|
| -// network traffic for debugging.
|
| -
|
| -#include <iostream>
|
| -#include <list>
|
| -
|
| -#include "base/at_exit.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/stl_util-inl.h"
|
| -
|
| -#include "base/waitable_event.h"
|
| -#include "media/base/data_buffer.h"
|
| -#include "remoting/base/protocol_decoder.h"
|
| -#include "remoting/client/client_util.h"
|
| -#include "remoting/client/jingle_host_connection.h"
|
| -#include "remoting/jingle_glue/jingle_client.h"
|
| -#include "remoting/jingle_glue/jingle_thread.h"
|
| -
|
| -using remoting::BeginUpdateStreamMessage;
|
| -using remoting::EndUpdateStreamMessage;
|
| -using remoting::HostConnection;
|
| -using remoting::HostMessage;
|
| -using remoting::HostMessageList;
|
| -using remoting::InitClientMessage;
|
| -using remoting::JingleClient;
|
| -using remoting::JingleHostConnection;
|
| -using remoting::JingleThread;
|
| -using remoting::ProtocolDecoder;
|
| -using remoting::UpdateStreamPacketMessage;
|
| -
|
| -class SimpleHostEventCallback : public HostConnection::HostEventCallback {
|
| - public:
|
| - explicit SimpleHostEventCallback(MessageLoop* loop,
|
| - base::WaitableEvent* client_done)
|
| - : main_loop_(loop), client_done_(client_done) {
|
| - }
|
| -
|
| - virtual void HandleMessages(HostConnection* conn,
|
| - HostMessageList* messages) {
|
| - HostMessageList list;
|
| - messages->swap(list);
|
| - for (size_t i = 0; i < list.size(); ++i) {
|
| - HostMessage* msg = list[i];
|
| - if (msg->has_init_client()) {
|
| - HandleInitClientMessage(msg);
|
| - } else if (msg->has_begin_update_stream()) {
|
| - HandleBeginUpdateStreamMessage(msg);
|
| - } else if (msg->has_update_stream_packet()) {
|
| - HandleUpdateStreamPacketMessage(msg);
|
| - } else if (msg->has_end_update_stream()) {
|
| - HandleEndUpdateStreamMessage(msg);
|
| - }
|
| - }
|
| - STLDeleteElements<HostMessageList>(&list);
|
| - }
|
| -
|
| - virtual void OnConnectionOpened(HostConnection* conn) {
|
| - std::cout << "Connection establised." << std::endl;
|
| - }
|
| -
|
| - virtual void OnConnectionClosed(HostConnection* conn) {
|
| - std::cout << "Connection closed." << std::endl;
|
| - client_done_->Signal();
|
| - }
|
| -
|
| - virtual void OnConnectionFailed(HostConnection* conn) {
|
| - std::cout << "Conection failed." << std::endl;
|
| - client_done_->Signal();
|
| - }
|
| -
|
| - private:
|
| - void HandleInitClientMessage(HostMessage* host_msg) {
|
| - const InitClientMessage& msg = host_msg->init_client();
|
| - std::cout << "InitClient (" << msg.width()
|
| - << ", " << msg.height() << ")" << std::endl;
|
| - }
|
| -
|
| - void HandleBeginUpdateStreamMessage(HostMessage* host_msg) {
|
| - const BeginUpdateStreamMessage& msg = host_msg->begin_update_stream();
|
| - std::cout << msg.GetTypeName() << std::endl;
|
| - }
|
| -
|
| - void HandleUpdateStreamPacketMessage(HostMessage* host_msg) {
|
| - const UpdateStreamPacketMessage& msg = host_msg->update_stream_packet();
|
| - if (!msg.has_begin_rect())
|
| - return;
|
| -
|
| - std::cout << "UpdateStreamPacket (" << msg.begin_rect().x()
|
| - << ", " << msg.begin_rect().y() << ") ["
|
| - << msg.begin_rect().width() << " x "
|
| - << msg.begin_rect().height() << "]"
|
| - << std::endl;
|
| - }
|
| -
|
| - void HandleEndUpdateStreamMessage(HostMessage* host_msg) {
|
| - const EndUpdateStreamMessage& msg = host_msg->end_update_stream();
|
| - std::cout << msg.GetTypeName() << std::endl;
|
| - }
|
| -
|
| - // JingleClient::Callback interface.
|
| - void OnStateChange(JingleClient* client, JingleClient::State state) {
|
| - if (state == JingleClient::CONNECTED) {
|
| - LOG(INFO) << "Connected as: " << client->GetFullJid();
|
| - } else if (state == JingleClient::CLOSED) {
|
| - LOG(INFO) << "Connection closed.";
|
| - }
|
| - }
|
| -
|
| - MessageLoop* main_loop_;
|
| - base::WaitableEvent* client_done_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SimpleHostEventCallback);
|
| -};
|
| -
|
| -int main(int argc, char** argv) {
|
| - base::AtExitManager exit_manager;
|
| - std::string host_jid;
|
| - std::string username;
|
| - std::string auth_token;
|
| -
|
| - if (!remoting::GetLoginInfo(argc, argv, &host_jid, &username, &auth_token)) {
|
| - std::cerr << "Cannot get valid login info." << std::endl;
|
| - return 1;
|
| - }
|
| -
|
| - // Start up a thread to run everything.
|
| - JingleThread network_thread;
|
| - network_thread.Start();
|
| -
|
| - base::WaitableEvent client_done(false, false);
|
| - SimpleHostEventCallback handler(network_thread.message_loop(), &client_done);
|
| - JingleHostConnection connection(&network_thread);
|
| - connection.Connect(username, auth_token, host_jid, &handler);
|
| -
|
| - // Wait until the mainloop has been signaled to exit.
|
| - client_done.Wait();
|
| -
|
| - connection.Disconnect();
|
| - network_thread.message_loop()->PostTask(FROM_HERE,
|
| - new MessageLoop::QuitTask());
|
| - network_thread.Stop();
|
| -
|
| - return 0;
|
| -}
|
|
|