diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-10 09:34:43 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-10 09:34:43 +0000 |
commit | d432f97cdfccdd719535cc888c393af6e607b2a3 (patch) | |
tree | 7071527f276cfd6bc11562e38cda4fb934c1724e /remoting/base/socket_reader.h | |
parent | 01a15a710b6ffb772bdf8e3827e9f1395d29d814 (diff) | |
download | chromium_src-d432f97cdfccdd719535cc888c393af6e607b2a3.zip chromium_src-d432f97cdfccdd719535cc888c393af6e607b2a3.tar.gz chromium_src-d432f97cdfccdd719535cc888c393af6e607b2a3.tar.bz2 |
Rename SocketReaderBase to SocketReader and move it to remoting/base
SocketReaderBase is not used anywhere. Renamed it to SocketReader
and fixed it so that it can be encapsulated instead of inheriting
from it. Also moved it to remoting/base directory.
Review URL: https://chromiumcodereview.appspot.com/11361197
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167078 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/base/socket_reader.h')
-rw-r--r-- | remoting/base/socket_reader.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/remoting/base/socket_reader.h b/remoting/base/socket_reader.h new file mode 100644 index 0000000..a660bf1 --- /dev/null +++ b/remoting/base/socket_reader.h @@ -0,0 +1,55 @@ +// Copyright (c) 2012 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_BASE_SOCKET_READER_H_ +#define REMOTING_BASE_SOCKET_READER_H_ + +#include "base/memory/ref_counted.h" +#include "net/base/completion_callback.h" +#include "base/memory/weak_ptr.h" + +namespace net { +class IOBuffer; +class Socket; +} // namespace net + +namespace remoting { + +// SocketReader reads data from a socket and then calls a callback for each +// completed read. Note that when this object is destroyed it may leave a +// pending read request for the socket, so the calling code should never try +// reading from the same socket again (e.g. it may result in data being lost). +class SocketReader { + public: + // Callback that is called for each finished read. |data| may be set to NULL + // in case of an error (result < 0). + typedef base::Callback<void(scoped_refptr<net::IOBuffer> data, + int result)> ReadResultCallback; + + SocketReader(); + ~SocketReader(); + + // Starts reading from |socket|. |read_result_callback| is called for each + // completed read. Reading stops on the first error. Must not be called more + // than once. + void Init(net::Socket* socket, ReadResultCallback read_result_callback); + + private: + void DoRead(); + void OnRead(int result); + void HandleReadResult(int result); + void CallCallback(scoped_refptr<net::IOBuffer> data, int result); + + net::Socket* socket_; + ReadResultCallback read_result_callback_; + scoped_refptr<net::IOBuffer> read_buffer_; + + base::WeakPtrFactory<SocketReader> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(SocketReader); +}; + +} // namespace remoting + +#endif // REMOTING_BASE_SOCKET_READER_H_ |