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