blob: 2df1aebeab2e96999a7ff4fb200f20c317b1db3d [file] [log] [blame]
// Copyright 2016 The Chromium 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 BLIMP_HELIUM_STREAM_H_
#define BLIMP_HELIUM_STREAM_H_
#include <memory>
#include "base/callback.h"
#include "blimp/helium/result.h"
namespace blimp {
namespace helium {
class HeliumMessage;
// Pure virtual interface for HeliumMessage-oriented transport streams.
// Details about how the helium::Stream is bound to the network layer are
// handled by subclasses of helium::Stream.
class Stream {
public:
using ReceiveMessageCallback =
base::Callback<void(std::unique_ptr<HeliumMessage>, Result)>;
virtual ~Stream() = default;
// Sends |helium_message| over the Stream. |callback| is invoked when the
// message is sent (or otherwise moved to the low-level write buffers),
// which signals the caller that it is clear to send another message.
//
// The caller is responsible for ensuring that only one outstanding
// SendMessage() call is made at a time.
virtual void SendMessage(std::unique_ptr<HeliumMessage> helium_message,
const base::Callback<void(Result)>& callback) = 0;
// Asynchronously reads a HeliumMessage from the stream.
// The caller is responsible for ensuring that only one outstanding
// ReceiveMessage() call is made at a time.
//
// In the event that an error occurred, a null pointer will be passed instead
// of a HeliumMessage, with a HeliumResult describing the failure reason.
// The HeliumStream object is considered inactive/unusable at this point and
// should be discarded by its owner.
virtual void ReceiveMessage(const ReceiveMessageCallback& on_receive_cb) = 0;
};
} // namespace helium
} // namespace blimp
#endif // BLIMP_HELIUM_STREAM_H_