59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
// 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_
|