|  | // Copyright 2015 The Weave 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 LIBWEAVE_INCLUDE_WEAVE_STREAM_H_ | 
|  | #define LIBWEAVE_INCLUDE_WEAVE_STREAM_H_ | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include <base/callback.h> | 
|  | #include <weave/error.h> | 
|  |  | 
|  | namespace weave { | 
|  |  | 
|  | // Interface for async input streaming. | 
|  | class InputStream { | 
|  | public: | 
|  | virtual ~InputStream() {} | 
|  |  | 
|  | // Callback type for Read. | 
|  | using ReadCallback = base::Callback<void(size_t size, ErrorPtr error)>; | 
|  |  | 
|  | // Implementation should return immediately and post callback after | 
|  | // completing operation. Caller guarantees that buffet is alive until callback | 
|  | // is called. | 
|  | virtual void Read(void* buffer, | 
|  | size_t size_to_read, | 
|  | const ReadCallback& callback) = 0; | 
|  | }; | 
|  |  | 
|  | // Interface for async input streaming. | 
|  | class OutputStream { | 
|  | public: | 
|  | virtual ~OutputStream() {} | 
|  |  | 
|  | using WriteCallback = base::Callback<void(ErrorPtr error)>; | 
|  |  | 
|  | // Implementation should return immediately and post callback after | 
|  | // completing operation. Caller guarantees that buffet is alive until either | 
|  | // of callback is called. | 
|  | // Success callback must be called only after all data is written. | 
|  | virtual void Write(const void* buffer, | 
|  | size_t size_to_write, | 
|  | const WriteCallback& callback) = 0; | 
|  | }; | 
|  |  | 
|  | // Interface for async bi-directional streaming. | 
|  | class Stream : public InputStream, public OutputStream { | 
|  | public: | 
|  | ~Stream() override {} | 
|  |  | 
|  | // Cancels all pending read or write requests. Canceled operations must not | 
|  | // call any callbacks. | 
|  | virtual void CancelPendingOperations() = 0; | 
|  | }; | 
|  |  | 
|  | }  // namespace weave | 
|  |  | 
|  | #endif  // LIBWEAVE_INCLUDE_WEAVE_STREAM_H_ |