// 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 #include #include namespace weave { // Interface for async input streaming. class InputStream { public: virtual ~InputStream() {} // Callback type for Read. using ReadCallback = base::Callback; // 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; // 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_