mirror of
https://github.com/boostorg/mqtt5.git
synced 2025-07-30 20:47:37 +02:00
remove development files
Summary: related to T13118 Reviewers: ivica Reviewed By: ivica Subscribers: miljen, iljazovic Differential Revision: https://repo.mireo.local/D26619
This commit is contained in:
79
SConscript
79
SConscript
@ -1,79 +0,0 @@
|
||||
import glob
|
||||
|
||||
Import('ctx')
|
||||
|
||||
ctx.Project('#/3rdParty/openssl')
|
||||
|
||||
sources = [
|
||||
'example/tcp.cpp',
|
||||
# commented out to speed up compiling
|
||||
# 'example/openssl-tls.cpp',
|
||||
# 'example/websocket-tcp.cpp',
|
||||
# 'example/websocket-tls.cpp',
|
||||
'example/src/run_examples.cpp',
|
||||
]
|
||||
|
||||
test_sources = [
|
||||
# 'test/experimental/cancellation.cpp',
|
||||
# 'test/experimental/message_assembling.cpp',
|
||||
# 'test/experimental/memory.cpp',
|
||||
# 'test/experimental/mutex.cpp',
|
||||
# 'test/experimental/uri_parse.cpp',
|
||||
'test/unit/test/serialization.cpp',
|
||||
'test/unit/test/publish_send_op.cpp',
|
||||
'test/unit/test/client_broker.cpp',
|
||||
'test/unit/test/coroutine.cpp',
|
||||
'test/unit/test/cancellation.cpp',
|
||||
'test/unit/src/run_tests.cpp'
|
||||
]
|
||||
|
||||
includes = [
|
||||
'include',
|
||||
'#/3rdParty/openssl/include'
|
||||
]
|
||||
|
||||
test_includes = [
|
||||
'include',
|
||||
'test/unit/include',
|
||||
'#/3rdParty/openssl/include'
|
||||
]
|
||||
|
||||
libs = {
|
||||
'all': Split('openssl'),
|
||||
}
|
||||
|
||||
defines = {
|
||||
'all' : ['BOOST_ALL_NO_LIB', 'BOOST_NO_TYPEID', '_REENTRANT'],
|
||||
'toolchain:llvm' : ['BOOST_FILESYSTEM_NO_CXX20_ATOMIC_REF'],
|
||||
}
|
||||
|
||||
test_defines = {
|
||||
'all' : ['BOOST_ALL_NO_LIB', 'BOOST_NO_TYPEID', 'BOOST_TEST_NO_MAIN=1','_REENTRANT'],
|
||||
'toolchain:llvm' : ['BOOST_FILESYSTEM_NO_CXX20_ATOMIC_REF'],
|
||||
}
|
||||
|
||||
# add ' -ftemplate-backtrace-limit=1' to cxxflags when necessary
|
||||
cxxflags = {
|
||||
'all': Split('-fexceptions -frtti -Wall -Wno-unused-local-typedefs -ftemplate-backtrace-limit=1'),
|
||||
}
|
||||
|
||||
frameworks = {
|
||||
'os:macos': Split('Security'),
|
||||
}
|
||||
|
||||
ctx.Program(name='mqtt-examples',
|
||||
source=sources,
|
||||
includes=includes,
|
||||
defines=defines,
|
||||
CXXFLAGs=cxxflags,
|
||||
libraries=libs,
|
||||
frameworks=frameworks,
|
||||
)
|
||||
|
||||
ctx.Program(name='mqtt-tests',
|
||||
source=test_sources,
|
||||
includes=test_includes,
|
||||
defines=test_defines,
|
||||
CXXFLAGs=cxxflags,
|
||||
frameworks=frameworks,
|
||||
)
|
@ -1,155 +0,0 @@
|
||||
#include <fmt/format.h>
|
||||
|
||||
#include <boost/asio/prepend.hpp>
|
||||
#include <boost/asio/steady_timer.hpp>
|
||||
#include <boost/asio/associated_executor.hpp>
|
||||
#include <boost/asio/bind_executor.hpp>
|
||||
#include <boost/asio/cancellation_signal.hpp>
|
||||
#include <boost/asio/cancellation_state.hpp>
|
||||
#include <boost/asio/bind_cancellation_slot.hpp>
|
||||
#include <boost/asio/dispatch.hpp>
|
||||
#include <boost/asio/thread_pool.hpp>
|
||||
|
||||
namespace asio = boost::asio;
|
||||
|
||||
template <typename Handler>
|
||||
decltype(auto) tracking_executor(Handler&& handler) {
|
||||
return asio::prefer(
|
||||
asio::get_associated_executor(std::forward<Handler>(handler)),
|
||||
asio::execution::outstanding_work.tracked
|
||||
);
|
||||
}
|
||||
|
||||
template <typename Handler>
|
||||
using tracking_type = std::decay_t<
|
||||
decltype(tracking_executor(std::declval<Handler>()))
|
||||
>;
|
||||
|
||||
template <typename Handler>
|
||||
class async_op {
|
||||
struct on_timer {};
|
||||
|
||||
std::decay_t<Handler> _handler;
|
||||
tracking_type<Handler> _handler_ex;
|
||||
asio::cancellation_state _cancel_state;
|
||||
|
||||
// must be unique_ptr because move(timer) cancels previous op
|
||||
std::unique_ptr<asio::steady_timer> _timer;
|
||||
public:
|
||||
template <typename Executor>
|
||||
async_op(const Executor& ex, Handler&& handler, const asio::cancellation_slot& cs) :
|
||||
_handler(std::forward<Handler>(handler)),
|
||||
_handler_ex(tracking_executor(_handler)),
|
||||
_cancel_state(cs),
|
||||
_timer(std::make_unique<asio::steady_timer>(ex))
|
||||
{}
|
||||
|
||||
async_op(async_op&&) noexcept = default;
|
||||
async_op& operator=(async_op&&) noexcept = default;
|
||||
|
||||
using executor_type = asio::steady_timer::executor_type;
|
||||
executor_type get_executor() const noexcept {
|
||||
return _timer->get_executor();
|
||||
}
|
||||
|
||||
using allocator_type = asio::associated_allocator_t<Handler>;
|
||||
allocator_type get_allocator() const noexcept {
|
||||
return asio::get_associated_allocator(_handler);
|
||||
}
|
||||
|
||||
using cancellation_slot_type = asio::cancellation_slot;
|
||||
asio::cancellation_slot get_cancellation_slot() const noexcept {
|
||||
return _cancel_state.slot();
|
||||
}
|
||||
|
||||
void perform() {
|
||||
_timer->expires_from_now(std::chrono::seconds(5));
|
||||
_timer->async_wait(asio::prepend(std::move(*this), on_timer {}));
|
||||
}
|
||||
|
||||
void operator()(on_timer, boost::system::error_code ec) {
|
||||
if (ec == asio::error::operation_aborted) {
|
||||
fmt::print(stderr, "Aborted {}\n", ec.message());
|
||||
return;
|
||||
}
|
||||
_cancel_state.slot().clear();
|
||||
|
||||
fmt::print(stderr, "Dispatching with error {}\n", ec.message());
|
||||
asio::dispatch(_handler_ex, [h = std::move(_handler), ec]() mutable {
|
||||
std::move(h)(ec);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
class owner {
|
||||
asio::cancellation_signal _cancel_signal;
|
||||
public:
|
||||
void cancel() {
|
||||
_cancel_signal.emit(asio::cancellation_type::terminal);
|
||||
_cancel_signal.slot().clear();
|
||||
}
|
||||
~owner() {
|
||||
cancel();
|
||||
}
|
||||
|
||||
template <typename CompletionToken>
|
||||
decltype(auto) async_perform(asio::io_context& ioc, CompletionToken&& token) {
|
||||
auto initiation = [this, &ioc](auto handler) {
|
||||
auto slot = asio::get_associated_cancellation_slot(handler);
|
||||
async_op<decltype(handler)>(
|
||||
ioc.get_executor(), std::move(handler),
|
||||
slot.is_connected() ? slot : _cancel_signal.slot()
|
||||
).perform();
|
||||
};
|
||||
|
||||
return asio::async_initiate<CompletionToken, void (boost::system::error_code)>(
|
||||
std::move(initiation), token
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
void cancel_test(asio::io_context& ioc) {
|
||||
asio::cancellation_signal cancel_signal;
|
||||
|
||||
asio::thread_pool thp;
|
||||
|
||||
{
|
||||
owner b;
|
||||
b.async_perform(ioc,
|
||||
asio::bind_cancellation_slot(
|
||||
cancel_signal.slot(),
|
||||
asio::bind_executor(thp.get_executor(),
|
||||
[](boost::system::error_code ec) {
|
||||
fmt::print(stderr, "Finished with error {}\n", ec.message());
|
||||
}
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
{
|
||||
asio::steady_timer timer3(ioc);
|
||||
timer3.expires_from_now(std::chrono::seconds(3));
|
||||
timer3.async_wait(
|
||||
asio::bind_cancellation_slot(
|
||||
cancel_signal.slot(),
|
||||
[&] (boost::system::error_code) {
|
||||
// cancel_signal.emit(asio::cancellation_type::terminal);
|
||||
// b.cancel();
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
*/
|
||||
asio::steady_timer timer2(ioc);
|
||||
timer2.expires_from_now(std::chrono::seconds(1));
|
||||
timer2.async_wait([&] (boost::system::error_code) {
|
||||
// cancel_signal.emit(asio::cancellation_type::terminal);
|
||||
// b.cancel();
|
||||
});
|
||||
|
||||
ioc.run();
|
||||
thp.join();
|
||||
}
|
||||
|
@ -1,50 +0,0 @@
|
||||
#include <fmt/format.h>
|
||||
#include <boost/asio/recycling_allocator.hpp>
|
||||
|
||||
#include "../../alloc/memory.h"
|
||||
#include "../../alloc/string.h"
|
||||
#include "../../alloc/vector.h"
|
||||
|
||||
namespace asio = boost::asio;
|
||||
|
||||
struct bx {
|
||||
pma::string s1, s2;
|
||||
|
||||
bx(std::string v1, std::string v2, const pma::alloc<size_t>& alloc) :
|
||||
s1(v1.begin(), v1.end(), alloc),
|
||||
s2(v2.begin(), v2.end(), alloc)
|
||||
{}
|
||||
};
|
||||
|
||||
void test_memory() {
|
||||
asio::recycling_allocator<char> base_alloc;
|
||||
pma::resource_adaptor<asio::recycling_allocator<char>> mem_res { base_alloc };
|
||||
auto alloc = pma::alloc<char>(&mem_res);
|
||||
|
||||
pma::string s1 { "abcdefgrthoasofjasfasf", alloc };
|
||||
pma::string s2 { alloc };
|
||||
s2 = s1;
|
||||
|
||||
//TODO: the commented lines do not compile on Windows
|
||||
//pma::vector<char> v1 { { 'a', 'b'}, alloc };
|
||||
pma::vector<char> v2 { alloc };
|
||||
//v2 = std::move(v1);
|
||||
//pma::vector<char> v3 = v2;
|
||||
//pma::vector<char> v4 = std::move(v3);
|
||||
//v1.swap(v2);
|
||||
|
||||
bx vbx { "ABCD", "EFGH", alloc };
|
||||
|
||||
fmt::print(stderr, "String = {}, is equal: {}\n", s2,
|
||||
s1.get_allocator() == vbx.s2.get_allocator()
|
||||
);
|
||||
|
||||
//fmt::print(stderr, "Vector allocators are equal: {}\n",
|
||||
// v1.get_allocator() == v2.get_allocator()
|
||||
//);
|
||||
|
||||
std::allocator_traits<decltype(alloc)>::rebind_alloc<std::string> char_alloc =
|
||||
alloc;
|
||||
|
||||
}
|
||||
|
@ -1,199 +0,0 @@
|
||||
#include <boost/asio/io_context.hpp>
|
||||
#include <boost/asio/strand.hpp>
|
||||
#include <boost/asio/any_io_executor.hpp>
|
||||
#include <boost/asio/awaitable.hpp>
|
||||
#include <boost/asio/detached.hpp>
|
||||
#include <boost/asio/co_spawn.hpp>
|
||||
#include <boost/asio/use_awaitable.hpp>
|
||||
#include <async/async.h>
|
||||
|
||||
#include <mqtt-client/detail/internal_types.hpp>
|
||||
#include <mqtt-client/codecs/message_encoders.hpp>
|
||||
#include <mqtt-client/codecs/message_decoders.hpp>
|
||||
|
||||
#include <mqtt-client/impl/assemble_op.hpp>
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
namespace asio = boost::asio;
|
||||
|
||||
namespace async_mqtt {
|
||||
|
||||
using byte_iter = detail::byte_iter;
|
||||
|
||||
class fake_stream {
|
||||
asio::any_io_executor _ex;
|
||||
std::string _data;
|
||||
int _chunk_no = -1;
|
||||
|
||||
std::string _read_buff;
|
||||
detail::data_span _data_span;
|
||||
|
||||
public:
|
||||
fake_stream(asio::any_io_executor ex) : _ex(std::move(ex)) {
|
||||
prepare_data();
|
||||
}
|
||||
|
||||
using executor_type = asio::any_io_executor;
|
||||
const executor_type& get_executor() const noexcept { return _ex; }
|
||||
|
||||
template <
|
||||
typename BufferType,
|
||||
typename CompletionToken
|
||||
>
|
||||
auto async_read_some(
|
||||
const BufferType& buffer, detail::duration wait_for,
|
||||
CompletionToken&& token
|
||||
);
|
||||
|
||||
template <typename Stream, typename CompletionToken>
|
||||
decltype(auto) async_assemble(
|
||||
Stream& stream, detail::duration wait_for, CompletionToken&& token
|
||||
);
|
||||
|
||||
private:
|
||||
void prepare_data();
|
||||
std::string_view next_frame();
|
||||
};
|
||||
|
||||
template <
|
||||
typename BufferType,
|
||||
typename CompletionToken
|
||||
>
|
||||
auto fake_stream::async_read_some(
|
||||
const BufferType& buffer, detail::duration wait_for,
|
||||
CompletionToken&& token
|
||||
) {
|
||||
auto read_op = [this] (auto handler, const BufferType& buffer) {
|
||||
auto data = next_frame();
|
||||
size_t bytes_read = data.size();
|
||||
std::copy(data.begin(), data.end(), static_cast<uint8_t*>(buffer.data()));
|
||||
|
||||
asio::post(get_executor(), [h = std::move(handler), bytes_read] () mutable {
|
||||
h(error_code{}, bytes_read);
|
||||
});
|
||||
};
|
||||
|
||||
return asio::async_initiate<CompletionToken, void (error_code, size_t)>(
|
||||
std::move(read_op), token, buffer
|
||||
);
|
||||
}
|
||||
|
||||
template <typename Stream, typename CompletionToken>
|
||||
decltype(auto) fake_stream::async_assemble(
|
||||
Stream& stream, detail::duration wait_for, CompletionToken&& token
|
||||
) {
|
||||
auto initiation = [this] (auto handler, Stream& stream, detail::duration wait_for) mutable {
|
||||
detail::assemble_op (
|
||||
stream, std::move(handler),
|
||||
_read_buff, _data_span
|
||||
).perform(wait_for, asio::transfer_at_least(0));
|
||||
};
|
||||
|
||||
return asio::async_initiate<
|
||||
CompletionToken, void (error_code, uint8_t, byte_iter, byte_iter)
|
||||
> (
|
||||
std::move(initiation), token, std::ref(stream), wait_for
|
||||
);
|
||||
}
|
||||
|
||||
void fake_stream::prepare_data() {
|
||||
connack_props cap;
|
||||
cap[prop::session_expiry_interval] = 60;
|
||||
cap[prop::maximum_packet_size] = 16384;
|
||||
cap[prop::wildcard_subscription_available] = true;
|
||||
_data = encoders::encode_connack(true, 0x8A, cap);
|
||||
|
||||
puback_props pap;
|
||||
pap[prop::user_property].emplace_back("PUBACK user property");
|
||||
_data += encoders::encode_puback(42, 28, pap);
|
||||
}
|
||||
|
||||
std::string_view fake_stream::next_frame() {
|
||||
++_chunk_no;
|
||||
if (_chunk_no == 0)
|
||||
return { _data.begin(), _data.begin() + 2 };
|
||||
if (_chunk_no == 1)
|
||||
return { _data.begin() + 2, _data.begin() + 13 };
|
||||
if (_chunk_no == 2)
|
||||
return { _data.begin() + 13, _data.begin() + 23 };
|
||||
if (_chunk_no == 3)
|
||||
return { _data.begin() + 23, _data.begin() + 35 };
|
||||
if (_chunk_no == 4)
|
||||
return { _data.begin() + 35, _data.end() };
|
||||
return { _data.end(), _data.end() };
|
||||
}
|
||||
|
||||
template <typename Stream, typename CompletionToken>
|
||||
decltype(auto) async_assemble(
|
||||
Stream& stream, detail::duration wait_for,
|
||||
CompletionToken&& token
|
||||
) {
|
||||
return stream.async_assemble(
|
||||
stream, wait_for, std::forward<CompletionToken>(token)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
void test_single(asio::io_context& ioc) {
|
||||
using namespace std::chrono;
|
||||
|
||||
fake_stream s(asio::make_strand(ioc));
|
||||
|
||||
auto on_message = [] (
|
||||
error_code ec, uint8_t control_code, byte_iter first, byte_iter last
|
||||
) {
|
||||
fmt::print(stderr, "Error code: {}\n", ec.message());
|
||||
if (ec) return;
|
||||
size_t remain_length = std::distance(first, last);
|
||||
auto rv = decoders::decode_connack(control_code, remain_length, first);
|
||||
const auto& [session_present, reason_code, cap] = *rv;
|
||||
fmt::print(stderr, "Got CONNACK message, reason_code {}, session {}\n", reason_code, session_present);
|
||||
fmt::print(stderr, "session_expiry_interval: {}\n", *cap[prop::session_expiry_interval]);
|
||||
fmt::print(stderr, "maximum_packet_size: {}\n", *cap[prop::maximum_packet_size]);
|
||||
fmt::print(stderr, "wildcard_subscription_available: {}\n", *cap[prop::wildcard_subscription_available]);
|
||||
};
|
||||
|
||||
async_assemble(s, seconds(1), std::move(on_message));
|
||||
|
||||
ioc.run();
|
||||
ioc.restart();
|
||||
}
|
||||
|
||||
asio::awaitable<void> test_multiple_coro(asio::io_context& ioc) {
|
||||
using namespace std::chrono;
|
||||
|
||||
fake_stream s(asio::make_strand(ioc));
|
||||
|
||||
auto [ec1, cc1, first1, last1] = co_await async_assemble(
|
||||
s, seconds(1), asio::use_nothrow_awaitable
|
||||
);
|
||||
size_t remain_length1 = std::distance(first1, last1);
|
||||
auto rv1 = decoders::decode_connack(cc1, remain_length1, first1);
|
||||
if (rv1)
|
||||
fmt::print(stderr, "CONNACK correctly decoded\n");
|
||||
|
||||
auto [ec2, cc2, first2, last2] = co_await async_assemble(
|
||||
s, seconds(1), asio::use_nothrow_awaitable
|
||||
);
|
||||
size_t remain_length2 = std::distance(first2, last2);
|
||||
auto rv2 = decoders::decode_puback(cc2, remain_length2, first2);
|
||||
|
||||
if (rv2)
|
||||
fmt::print(stderr, "PUBACK correctly decoded\n");
|
||||
}
|
||||
|
||||
void test_multiple(asio::io_context& ioc) {
|
||||
co_spawn(ioc, test_multiple_coro(ioc), asio::detached);
|
||||
ioc.run();
|
||||
ioc.restart();
|
||||
}
|
||||
|
||||
} // end namespace async_mqtt
|
||||
|
||||
void test_assembling(asio::io_context& ioc) {
|
||||
using namespace std::chrono;
|
||||
|
||||
async_mqtt::test_single(ioc);
|
||||
async_mqtt::test_multiple(ioc);
|
||||
}
|
@ -1,237 +0,0 @@
|
||||
// #include <async/run_loop.h>
|
||||
|
||||
#include <boost/asio/io_context.hpp>
|
||||
#include <boost/asio/co_spawn.hpp>
|
||||
#include <boost/asio/detached.hpp>
|
||||
#include <boost/asio/strand.hpp>
|
||||
#include <boost/asio/thread_pool.hpp>
|
||||
#include <boost/asio/bind_cancellation_slot.hpp>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
#include <mutex>
|
||||
|
||||
#include <mqtt-client/detail/async_mutex.hpp>
|
||||
#include <async/mutex.h>
|
||||
#include <fmt/format.h>
|
||||
|
||||
#define ANKERL_NANOBENCH_IMPLEMENT
|
||||
#include <nanobench/nanobench.h>
|
||||
|
||||
constexpr size_t nthreads = 4;
|
||||
constexpr size_t per_job_count = 10'000 / nthreads;
|
||||
|
||||
using namespace async_mqtt5::detail;
|
||||
|
||||
void with_async_mutex(async_mutex& mutex, std::size_t* count) {
|
||||
for (int c = 0; c < per_job_count; ++c) {
|
||||
mutex.lock([&mutex, count](error_code) {
|
||||
++(*count);
|
||||
mutex.unlock();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void test_with_async_mutex(asio::any_io_executor e, async_mutex& mutex, size_t* count) {
|
||||
asio::post(e, [&mutex, count]() {
|
||||
with_async_mutex(mutex, count);
|
||||
});
|
||||
}
|
||||
|
||||
void with_old_async_mutex(async::mutex& mutex, std::size_t* count) {
|
||||
for (int c = 0; c < per_job_count; ++c) {
|
||||
mutex.lock([&mutex, count]() {
|
||||
++(*count);
|
||||
mutex.unlock();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void test_with_old_async_mutex(asio::any_io_executor e, async::mutex& mutex, size_t* count) {
|
||||
asio::post(e, [&mutex, count]() {
|
||||
with_old_async_mutex(mutex, count);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
struct std_mutex : public std::mutex {
|
||||
std_mutex(asio::any_io_executor) : std::mutex() { }
|
||||
};
|
||||
|
||||
void with_mutex(std_mutex& mutex, size_t* count) {
|
||||
for (int c = 0; c < per_job_count; ++c) {
|
||||
mutex.lock();
|
||||
++(*count);
|
||||
mutex.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
void test_with_mutex(asio::any_io_executor e, std_mutex& mutex, size_t* count) {
|
||||
asio::post(e, [&mutex, count]() {
|
||||
with_mutex(mutex, count);
|
||||
});
|
||||
}
|
||||
|
||||
template <class Mutex, class Test>
|
||||
void test_with(Test func) {
|
||||
asio::thread_pool pool(nthreads);
|
||||
auto ex = pool.get_executor();
|
||||
auto count = std::make_unique<size_t>(0);
|
||||
Mutex mutex { ex };
|
||||
{
|
||||
for (auto i = 0; i < nthreads; ++i) {
|
||||
func(ex, mutex, count.get());
|
||||
}
|
||||
}
|
||||
pool.wait();
|
||||
if (*count != nthreads * per_job_count)
|
||||
throw "greska!";
|
||||
}
|
||||
|
||||
void test_cancellation() {
|
||||
|
||||
asio::thread_pool tp;
|
||||
asio::cancellation_signal cancel_signal;
|
||||
|
||||
async_mutex mutex(tp.get_executor());
|
||||
asio::steady_timer timer(tp);
|
||||
|
||||
auto op = [&](error_code ec) {
|
||||
if (ec == asio::error::operation_aborted) {
|
||||
mutex.unlock();
|
||||
return;
|
||||
}
|
||||
timer.expires_from_now(std::chrono::seconds(2));
|
||||
timer.async_wait([&] (boost::system::error_code) {
|
||||
fmt::print(stderr, "Async-locked operation done\n");
|
||||
mutex.unlock();
|
||||
});
|
||||
};
|
||||
|
||||
auto cancellable_op = [&](error_code ec) {
|
||||
fmt::print(
|
||||
stderr,
|
||||
"Cancellable async-locked operation finished with ec: {}\n", ec.message()
|
||||
);
|
||||
if (ec == asio::error::operation_aborted)
|
||||
return;
|
||||
mutex.unlock();
|
||||
};
|
||||
|
||||
mutex.lock(std::move(op));
|
||||
|
||||
mutex.lock(
|
||||
asio::bind_cancellation_slot(
|
||||
cancel_signal.slot(), std::move(cancellable_op)
|
||||
)
|
||||
);
|
||||
|
||||
asio::steady_timer timer2(tp);
|
||||
timer2.expires_from_now(std::chrono::seconds(1));
|
||||
timer2.async_wait([&] (boost::system::error_code) {
|
||||
cancel_signal.emit(asio::cancellation_type::terminal);
|
||||
});
|
||||
|
||||
tp.wait();
|
||||
}
|
||||
|
||||
void test_destructor() {
|
||||
asio::thread_pool tp;
|
||||
asio::cancellation_signal cancel_signal;
|
||||
|
||||
{
|
||||
async_mutex mutex(tp.get_executor());
|
||||
asio::steady_timer timer(tp);
|
||||
|
||||
auto op = [&](error_code ec_mtx) {
|
||||
if (ec_mtx == asio::error::operation_aborted) {
|
||||
fmt::print(
|
||||
stderr,
|
||||
"Mutex operation cancelled error_code {}\n",
|
||||
ec_mtx.message()
|
||||
);
|
||||
mutex.unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
timer.expires_from_now(std::chrono::seconds(2));
|
||||
timer.async_wait([&] (boost::system::error_code ec) {
|
||||
if (ec == asio::error::operation_aborted)
|
||||
return;
|
||||
|
||||
fmt::print(
|
||||
stderr,
|
||||
"Async-locked operation done with error_code {}\n",
|
||||
ec.message()
|
||||
);
|
||||
mutex.unlock();
|
||||
});
|
||||
};
|
||||
|
||||
mutex.lock(std::move(op));
|
||||
}
|
||||
|
||||
tp.wait();
|
||||
}
|
||||
|
||||
void test_basics() {
|
||||
asio::thread_pool tp;
|
||||
|
||||
// {
|
||||
asio::cancellation_signal cs;
|
||||
async_mutex mutex(tp.get_executor());
|
||||
auto s1 = asio::make_strand(tp.get_executor());
|
||||
auto s2 = asio::make_strand(tp.get_executor());
|
||||
|
||||
mutex.lock(asio::bind_executor(s1, [&mutex, s1](boost::system::error_code ec) mutable {
|
||||
fmt::print(
|
||||
stderr,
|
||||
"Scoped-locked operation (1) done with error_code {} ({})\n",
|
||||
ec.message(),
|
||||
s1.running_in_this_thread()
|
||||
);
|
||||
if (ec != asio::error::operation_aborted)
|
||||
mutex.unlock();
|
||||
}));
|
||||
|
||||
mutex.lock(
|
||||
asio::bind_cancellation_slot(
|
||||
cs.slot(),
|
||||
asio::bind_executor(s2, [s2](boost::system::error_code ec){
|
||||
fmt::print(
|
||||
stderr,
|
||||
"Scoped-locked operation (2) done with error_code {} ({})\n",
|
||||
ec.message(),
|
||||
s2.running_in_this_thread()
|
||||
);
|
||||
})
|
||||
)
|
||||
);
|
||||
cs.emit(asio::cancellation_type_t::terminal);
|
||||
cs.slot().clear();
|
||||
// }
|
||||
|
||||
tp.wait();
|
||||
}
|
||||
|
||||
void test_mutex() {
|
||||
// test_basics();
|
||||
// return;
|
||||
// test_destructor();
|
||||
// test_cancellation();
|
||||
// return;
|
||||
|
||||
auto bench = ankerl::nanobench::Bench();
|
||||
bench.relative(true);
|
||||
|
||||
bench.run("std::mutex", [] {
|
||||
test_with<std_mutex>(test_with_mutex);
|
||||
});
|
||||
|
||||
bench.run("async_mutex", [] {
|
||||
test_with<async_mutex>(test_with_async_mutex);
|
||||
});
|
||||
|
||||
bench.run("async::mutex", [] {
|
||||
test_with<async::mutex>(test_with_old_async_mutex);
|
||||
});
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
#include <boost/spirit/home/x3.hpp>
|
||||
|
||||
template <typename T>
|
||||
static constexpr auto to_(T& arg) {
|
||||
return [&](auto& ctx) { arg = boost::spirit::x3::_attr(ctx); };
|
||||
}
|
||||
|
||||
template <typename T, typename Parser>
|
||||
static constexpr auto as_(Parser&& p){
|
||||
return boost::spirit::x3::rule<struct _, T>{} = std::forward<Parser>(p);
|
||||
}
|
||||
|
||||
void test_uri_parser(){
|
||||
struct authority_path { std::string host, port, path; };
|
||||
std::vector<authority_path> _servers;
|
||||
|
||||
std::string brokers = "iot.fcluster.mireo.hr:1234, fc/nesto";
|
||||
std::string default_port = "8883";
|
||||
|
||||
namespace x3 = boost::spirit::x3;
|
||||
|
||||
std::string host, port, path;
|
||||
|
||||
// loosely based on RFC 3986
|
||||
auto unreserved_ = x3::char_("-a-zA-Z_0-9._~");
|
||||
auto digit_ = x3::char_("0-9");
|
||||
auto separator_ = x3::char_(',');
|
||||
|
||||
auto host_ = as_<std::string>(+unreserved_)[to_(host)];
|
||||
auto port_ = as_<std::string>(':' >> +digit_)[to_(port)];
|
||||
auto path_ = as_<std::string>('/' >> *unreserved_)[to_(path)];
|
||||
auto uri_ = *x3::omit[x3::space] >> (host_ >> *port_ >> *path_) >>
|
||||
(*x3::omit[x3::space] >> x3::omit[separator_ | x3::eoi]);
|
||||
|
||||
for (auto b = brokers.begin(); b != brokers.end(); ) {
|
||||
host.clear(); port.clear(); path.clear();
|
||||
if (phrase_parse(b, brokers.end(), uri_, x3::eps(false))) {
|
||||
_servers.push_back({
|
||||
std::move(host), port.empty() ? default_port : std::move(port),
|
||||
std::move(path)
|
||||
});
|
||||
}
|
||||
else b = brokers.end();
|
||||
}
|
||||
}
|
||||
|
@ -1,41 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.4.33110.190
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mqtt-client", "mqtt-client.vcxproj", "{303BA426-05B5-47FB-9F00-E932257FB28F}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mqtt-test", "test/mqtt-test.vcxproj", "{48DEAF83-BA87-4FDE-8A4C-A539BA44A479}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{303BA426-05B5-47FB-9F00-E932257FB28F}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{303BA426-05B5-47FB-9F00-E932257FB28F}.Debug|x64.Build.0 = Debug|x64
|
||||
{303BA426-05B5-47FB-9F00-E932257FB28F}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{303BA426-05B5-47FB-9F00-E932257FB28F}.Debug|x86.Build.0 = Debug|Win32
|
||||
{303BA426-05B5-47FB-9F00-E932257FB28F}.Release|x64.ActiveCfg = Release|x64
|
||||
{303BA426-05B5-47FB-9F00-E932257FB28F}.Release|x64.Build.0 = Release|x64
|
||||
{303BA426-05B5-47FB-9F00-E932257FB28F}.Release|x86.ActiveCfg = Release|Win32
|
||||
{303BA426-05B5-47FB-9F00-E932257FB28F}.Release|x86.Build.0 = Release|Win32
|
||||
{48DEAF83-BA87-4FDE-8A4C-A539BA44A479}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{48DEAF83-BA87-4FDE-8A4C-A539BA44A479}.Debug|x64.Build.0 = Debug|x64
|
||||
{48DEAF83-BA87-4FDE-8A4C-A539BA44A479}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{48DEAF83-BA87-4FDE-8A4C-A539BA44A479}.Debug|x86.Build.0 = Debug|Win32
|
||||
{48DEAF83-BA87-4FDE-8A4C-A539BA44A479}.Release|x64.ActiveCfg = Release|x64
|
||||
{48DEAF83-BA87-4FDE-8A4C-A539BA44A479}.Release|x64.Build.0 = Release|x64
|
||||
{48DEAF83-BA87-4FDE-8A4C-A539BA44A479}.Release|x86.ActiveCfg = Release|Win32
|
||||
{48DEAF83-BA87-4FDE-8A4C-A539BA44A479}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {E5126E4A-FF26-4E63-BC54-CE092A8E7966}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
@ -1,189 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\include\async_mqtt5.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\async_mutex.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\async_traits.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\cancellable_handler.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\control_packet.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\internal_types.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\ring_buffer.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\spinlock.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\error.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\assemble_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\async_sender.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\autoconnect_stream.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\client_service.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\connect_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\disconnect_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\endpoints.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\alloc\memory.h" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\alloc\memory_resource.h" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\alloc\string.h" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\alloc\vector.h" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\base_decoders.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\base_encoders.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\message_decoders.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\message_encoders.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\traits.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\ping_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\publish_rec_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\publish_send_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\read_message_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\read_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\reconnect_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\replies.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\sentry_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\subscribe_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\unsubscribe_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\write_op.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\mqtt_client.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\property_types.hpp" />
|
||||
<ClInclude Include="..\include\async_mqtt5\types.hpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\example\openssl-tls.cpp" />
|
||||
<ClCompile Include="..\example\src\run_examples.cpp" />
|
||||
<ClCompile Include="..\example\tcp.cpp" />
|
||||
<ClCompile Include="..\example\websocket-tcp.cpp" />
|
||||
<ClCompile Include="..\example\websocket-tls.cpp" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{303ba426-05b5-47fb-9f00-e932257fb28f}</ProjectGuid>
|
||||
<RootNamespace>mqttclient</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;WIN32_LEAN_AND_MEAN;WIN32;_WIN32_WINDOWS=0x0601;_WIN32_WINNT=0x0601;_DEBUG;_CONSOLE;_FILE_OFFSET_BITS=64;BOOST_ALL_NO_LIB;BOOST_UUID_RANDOM_PROVIDER_FORCE_WINCRYPT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalIncludeDirectories>..\include;$(DevRoot)3rdParty\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>crypt32.lib;openssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(DevRoot)Components\Bin\libd\x64\MT</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;WIN32_LEAN_AND_MEAN;WIN32;_WIN32_WINDOWS=0x0601;_WIN32_WINNT=0x0601;_CONSOLE;NDEBUG;_FILE_OFFSET_BITS=64;BOOST_ALL_NO_LIB;BOOST_UUID_RANDOM_PROVIDER_FORCE_WINCRYPT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<AdditionalIncludeDirectories>..\include;$(DevRoot)3rdParty\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>crypt32.lib;openssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(DevRoot)Components\Bin\libd\x64\MT</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
@ -1,174 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\example">
|
||||
<UniqueIdentifier>{fc537c67-a947-4840-80e0-6fe3f3d5d460}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\include">
|
||||
<UniqueIdentifier>{b786d33e-710a-4a1c-bc48-a14f6d79399c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\include\impl">
|
||||
<UniqueIdentifier>{0ce770cf-e2fa-429c-94f5-0e70835bed03}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\include\impl\internal">
|
||||
<UniqueIdentifier>{ec0b6550-a767-411d-9cea-1e33bcd63aab}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\include\impl\internal\codecs">
|
||||
<UniqueIdentifier>{e3af9391-bfab-4e35-aad7-0e5b8541ac1c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\include\impl\internal\alloc">
|
||||
<UniqueIdentifier>{e83887a6-c73a-45ca-b224-45de8f660c74}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\include\detail">
|
||||
<UniqueIdentifier>{ab9e608c-0bf9-4e0a-8dfe-1e0a2e040718}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\async_mutex.hpp">
|
||||
<Filter>Header Files\include\detail</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\async_traits.hpp">
|
||||
<Filter>Header Files\include\detail</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\cancellable_handler.hpp">
|
||||
<Filter>Header Files\include\detail</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\control_packet.hpp">
|
||||
<Filter>Header Files\include\detail</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\internal_types.hpp">
|
||||
<Filter>Header Files\include\detail</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\ring_buffer.hpp">
|
||||
<Filter>Header Files\include\detail</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\detail\spinlock.hpp">
|
||||
<Filter>Header Files\include\detail</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\alloc\memory.h">
|
||||
<Filter>Header Files\include\impl\internal\alloc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\alloc\memory_resource.h">
|
||||
<Filter>Header Files\include\impl\internal\alloc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\alloc\string.h">
|
||||
<Filter>Header Files\include\impl\internal\alloc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\alloc\vector.h">
|
||||
<Filter>Header Files\include\impl\internal\alloc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\base_decoders.hpp">
|
||||
<Filter>Header Files\include\impl\internal\codecs</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\base_encoders.hpp">
|
||||
<Filter>Header Files\include\impl\internal\codecs</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\message_decoders.hpp">
|
||||
<Filter>Header Files\include\impl\internal\codecs</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\message_encoders.hpp">
|
||||
<Filter>Header Files\include\impl\internal\codecs</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\internal\codecs\traits.hpp">
|
||||
<Filter>Header Files\include\impl\internal\codecs</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\assemble_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\async_sender.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\autoconnect_stream.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\client_service.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\connect_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\disconnect_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\endpoints.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\ping_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\publish_rec_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\publish_send_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\read_message_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\read_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\reconnect_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\replies.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\sentry_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\subscribe_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\unsubscribe_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\impl\write_op.hpp">
|
||||
<Filter>Header Files\include\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\property_types.hpp">
|
||||
<Filter>Header Files\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\types.hpp">
|
||||
<Filter>Header Files\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\error.hpp">
|
||||
<Filter>Header Files\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\async_mqtt5\mqtt_client.hpp">
|
||||
<Filter>Header Files\include</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\example\openssl-tls.cpp">
|
||||
<Filter>Source Files\example</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\example\tcp.cpp">
|
||||
<Filter>Source Files\example</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\example\websocket-tcp.cpp">
|
||||
<Filter>Source Files\example</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\example\websocket-tls.cpp">
|
||||
<Filter>Source Files\example</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\example\src\run_examples.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,159 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\delayed_op.hpp" />
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\message_exchange.hpp" />
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\packet_util.hpp" />
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\protocol_logging.hpp" />
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\test_broker.hpp" />
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\test_service.hpp" />
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\test_stream.hpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\test\unit\src\run_tests.cpp" />
|
||||
<ClCompile Include="..\..\test\unit\test\cancellation.cpp" />
|
||||
<ClCompile Include="..\..\test\unit\test\client_broker.cpp" />
|
||||
<ClCompile Include="..\..\test\unit\test\coroutine.cpp" />
|
||||
<ClCompile Include="..\..\test\unit\test\publish_send_op.cpp" />
|
||||
<ClCompile Include="..\..\test\unit\test\serialization.cpp" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{48deaf83-ba87-4fde-8a4c-a539ba44a479}</ProjectGuid>
|
||||
<RootNamespace>mqtttest</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;WIN32_LEAN_AND_MEAN;WIN32;_WIN32_WINDOWS=0x0601;_WIN32_WINNT=0x0601;BOOST_TEST_NO_MAIN=1;_DEBUG;_CONSOLE;_FILE_OFFSET_BITS=64;BOOST_ALL_NO_LIB;BOOST_UUID_RANDOM_PROVIDER_FORCE_WINCRYPT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalIncludeDirectories>../../include;../../test/unit/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;WIN32_LEAN_AND_MEAN;WIN32;_WIN32_WINDOWS=0x0601;_WIN32_WINNT=0x0601;BOOST_TEST_NO_MAIN=1;NDEBUG;_CONSOLE;_FILE_OFFSET_BITS=64;BOOST_ALL_NO_LIB;BOOST_UUID_RANDOM_PROVIDER_FORCE_WINCRYPT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalIncludeDirectories>../../include;../../test/unit/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
@ -1,66 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\test_common">
|
||||
<UniqueIdentifier>{6361a7f6-7954-4ea3-a2a7-f3b15537a3ac}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\test">
|
||||
<UniqueIdentifier>{cf0bb550-9227-400c-9e0a-8b38fe2c32a3}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\delayed_op.hpp">
|
||||
<Filter>Header Files\test_common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\message_exchange.hpp">
|
||||
<Filter>Header Files\test_common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\packet_util.hpp">
|
||||
<Filter>Header Files\test_common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\protocol_logging.hpp">
|
||||
<Filter>Header Files\test_common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\test_broker.hpp">
|
||||
<Filter>Header Files\test_common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\test_service.hpp">
|
||||
<Filter>Header Files\test_common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\test\unit\include\test_common\test_stream.hpp">
|
||||
<Filter>Header Files\test_common</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\test\unit\test\client_broker.cpp">
|
||||
<Filter>Source Files\test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\test\unit\test\coroutine.cpp">
|
||||
<Filter>Source Files\test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\test\unit\test\publish_send_op.cpp">
|
||||
<Filter>Source Files\test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\test\unit\test\serialization.cpp">
|
||||
<Filter>Source Files\test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\test\unit\src\run_tests.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\test\unit\test\cancellation.cpp">
|
||||
<Filter>Source Files\test</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
Reference in New Issue
Block a user