You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.4 KiB
90 lines
2.4 KiB
// Copyright 2020 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.
|
|
//
|
|
// The testing message pipe is intended to be used for integrating
|
|
// sender and receiver sessions (or other consumers of MessagePort).
|
|
|
|
#ifndef CAST_STREAMING_TESTING_MESSAGE_PIPE_H_
|
|
#define CAST_STREAMING_TESTING_MESSAGE_PIPE_H_
|
|
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
#include "cast/common/public/message_port.h"
|
|
#include "cast/streaming/message_fields.h"
|
|
#include "gmock/gmock.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace openscreen {
|
|
namespace cast {
|
|
|
|
class MessagePipeEnd : public MessagePort {
|
|
public:
|
|
explicit MessagePipeEnd(std::string destination_id)
|
|
: destination_id_(destination_id) {}
|
|
|
|
~MessagePipeEnd() override = default;
|
|
|
|
void SetClient(MessagePort::Client* client,
|
|
std::string client_sender_id) override {
|
|
sender_id_ = std::move(client_sender_id);
|
|
client_ = client;
|
|
}
|
|
|
|
void SetOtherEnd(MessagePipeEnd* other_end) {
|
|
ASSERT_FALSE(other_end_);
|
|
other_end_ = other_end;
|
|
}
|
|
|
|
void ResetClient() override { client_ = nullptr; }
|
|
|
|
void ReceiveMessage(const std::string& namespace_,
|
|
const std::string& message) {
|
|
ASSERT_NE(client_, nullptr);
|
|
client_->OnMessage(destination_id_, namespace_, message);
|
|
}
|
|
|
|
void PostMessage(const std::string& sender_id,
|
|
const std::string& message_namespace,
|
|
const std::string& message) override {
|
|
ASSERT_NE(other_end_, nullptr);
|
|
other_end_->ReceiveMessage(message_namespace, message);
|
|
}
|
|
|
|
private:
|
|
std::string sender_id_;
|
|
std::string destination_id_;
|
|
MessagePort::Client* client_ = nullptr;
|
|
MessagePipeEnd* other_end_ = nullptr;
|
|
};
|
|
|
|
class MessagePipe {
|
|
public:
|
|
explicit MessagePipe(std::string left_id, std::string right_id)
|
|
: left_id_(std::move(right_id)),
|
|
right_id_(std::move(left_id)),
|
|
left_(left_id_),
|
|
right_(right_id_) {
|
|
left_.SetOtherEnd(&right_);
|
|
right_.SetOtherEnd(&left_);
|
|
}
|
|
|
|
// Access the ends of the pipe, which can be used as a standard
|
|
// message port.
|
|
MessagePipeEnd* left() { return &left_; }
|
|
MessagePipeEnd* right() { return &right_; }
|
|
|
|
private:
|
|
std::string left_id_;
|
|
std::string right_id_;
|
|
MessagePipeEnd left_;
|
|
MessagePipeEnd right_;
|
|
};
|
|
|
|
} // namespace cast
|
|
} // namespace openscreen
|
|
|
|
#endif // CAST_STREAMING_TESTING_MESSAGE_PIPE_H_
|