| Index: remoting/host/client_connection.h
|
| ===================================================================
|
| --- remoting/host/client_connection.h (revision 0)
|
| +++ remoting/host/client_connection.h (revision 0)
|
| @@ -0,0 +1,141 @@
|
| +// 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.
|
| +
|
| +#ifndef REMOTING_HOST_CLIENT_CONNECTION_H_
|
| +#define REMOTING_HOST_CLIENT_CONNECTION_H_
|
| +
|
| +#include <deque>
|
| +#include <vector>
|
| +
|
| +#include "base/message_loop.h"
|
| +#include "base/ref_counted.h"
|
| +#include "base/scoped_ptr.h"
|
| +#include "remoting/base/protocol_decoder.h"
|
| +#include "remoting/base/protocol/chromotocol.pb.h"
|
| +#include "remoting/jingle_glue/jingle_channel.h"
|
| +
|
| +namespace media {
|
| +
|
| +class DataBuffer;
|
| +
|
| +} // namespace media
|
| +
|
| +namespace remoting {
|
| +
|
| +// This class represents a remote viewer connected to the chromoting host
|
| +// through a libjingle connection. A viewer object is responsible for sending
|
| +// screen updates and other messages to the remote viewer. It is also
|
| +// responsible for receiving and parsing data from the remote viewer and
|
| +// delegating events to the event handler.
|
| +class ClientConnection : public base::RefCountedThreadSafe<ClientConnection>,
|
| + public JingleChannel::Callback {
|
| + public:
|
| + class EventHandler {
|
| + public:
|
| + virtual ~EventHandler() {}
|
| +
|
| + // Handles an event received by the ClientConnection. Receiver will own the
|
| + // ClientMessages in ClientMessageList and needs to delete them.
|
| + // Note that the sender of messages will not reference messages
|
| + // again so it is okay to clear |messages| in this method.
|
| + virtual void HandleMessages(ClientConnection* viewer,
|
| + ClientMessageList* messages) = 0;
|
| +
|
| + // Called when the network connection is opened.
|
| + virtual void OnConnectionOpened(ClientConnection* viewer) = 0;
|
| +
|
| + // Called when the network connection is closed.
|
| + virtual void OnConnectionClosed(ClientConnection* viewer) = 0;
|
| +
|
| + // Called when the network connection has failed.
|
| + virtual void OnConnectionFailed(ClientConnection* viewer) = 0;
|
| + };
|
| +
|
| + // Constructs a ClientConnection object. |message_loop| is the message loop
|
| + // that this object runs on. A viewer object receives events and messages from
|
| + // a libjingle channel, these events are delegated to |handler|.
|
| + // It is guranteed that |handler| is called only on the |message_loop|.
|
| + ClientConnection(MessageLoop* message_loop,
|
| + ProtocolDecoder* decoder,
|
| + EventHandler* handler);
|
| +
|
| + virtual ~ClientConnection();
|
| +
|
| + virtual void set_jingle_channel(JingleChannel* channel) {
|
| + channel_ = channel;
|
| + }
|
| +
|
| + // Returns the channel in use.
|
| + virtual JingleChannel* jingle_channel() { return channel_; }
|
| +
|
| + // Send information to the client for initialization.
|
| + virtual void SendInitClientMessage(int width, int height);
|
| +
|
| + // Notifies the viewer the start of an update stream.
|
| + virtual void SendBeginUpdateStreamMessage();
|
| +
|
| + // Send encoded update stream data to the viewer. The viewer
|
| + // should not take ownership of the data.
|
| + virtual void SendUpdateStreamPacketMessage(
|
| + chromotocol_pb::UpdateStreamPacketHeader* header,
|
| + scoped_refptr<media::DataBuffer> data);
|
| +
|
| + // Notifies the viewer the update stream has ended.
|
| + virtual void SendEndUpdateStreamMessage();
|
| +
|
| + // Gets the number of update stream messages not yet transmitted.
|
| + // Note that the value returned is an estimate using average size of the
|
| + // most recent update streams.
|
| + // TODO(hclam): Report this number accurately.
|
| + virtual int GetPendingUpdateStreamMessages();
|
| +
|
| + // Disconnect the remote viewer.
|
| + virtual void Disconnect();
|
| +
|
| + /////////////////////////////////////////////////////////////////////////////
|
| + // JingleChannel::Callback implmentations
|
| + virtual void OnStateChange(JingleChannel* channel,
|
| + JingleChannel::State state);
|
| + virtual void OnPacketReceived(JingleChannel* channel,
|
| + scoped_refptr<media::DataBuffer> data);
|
| +
|
| + protected:
|
| + // Protected constructor used by unit test.
|
| + ClientConnection() {}
|
| +
|
| + private:
|
| + // Process a libjingle state change event on the |loop_|.
|
| + void StateChangeTask(JingleChannel::State state);
|
| +
|
| + // Process a data buffer received from libjingle.
|
| + void PacketReceivedTask(scoped_refptr<media::DataBuffer> data);
|
| +
|
| + // The libjingle channel used to send and receive data from the remote viewer.
|
| + scoped_refptr<JingleChannel> channel_;
|
| +
|
| + // The message loop that this object runs on.
|
| + MessageLoop* loop_;
|
| +
|
| + // An object used by the ClientConnection to decode data received from the
|
| + // network.
|
| + scoped_ptr<ProtocolDecoder> decoder_;
|
| +
|
| + // A queue to count the sizes of the last 10 update streams.
|
| + std::deque<int> size_queue_;
|
| +
|
| + // Count the sum of sizes in the queue.
|
| + int size_in_queue_;
|
| +
|
| + // Measure the number of bytes of the current upstream stream.
|
| + int update_stream_size_;
|
| +
|
| + // Event handler for handling events sent from this object.
|
| + EventHandler* handler_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ClientConnection);
|
| +};
|
| +
|
| +} // namespace remoting
|
| +
|
| +#endif // REMOTING_HOST_CLIENT_CONNECTION_H_
|
|
|
| Property changes on: remoting/host/client_connection.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|