| // 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_ |