Lolwut
This commit is contained in:
parent
07698b70b4
commit
a65bff1697
@ -18,10 +18,13 @@
|
||||
#ifndef message_0c61530748b9f966
|
||||
#define message_0c61530748b9f966
|
||||
|
||||
#include "parselink/utility/ctstring.h"
|
||||
|
||||
#include <cstdint>
|
||||
#include <span>
|
||||
#include <string_view>
|
||||
|
||||
|
||||
namespace parselink {
|
||||
namespace proto {
|
||||
|
||||
@ -36,10 +39,15 @@ namespace proto {
|
||||
|
||||
struct base_message {};
|
||||
|
||||
template <ct::string Str>
|
||||
struct message : base_message {
|
||||
static constexpr auto name() noexcept { return Str; }
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
concept message_type = std::is_base_of_v<base_message, T>;
|
||||
|
||||
struct error_message : base_message {
|
||||
struct error_message : message<"error"> {
|
||||
std::uint32_t code; // An error code
|
||||
std::string_view what; // A string
|
||||
};
|
||||
|
||||
@ -21,11 +21,13 @@
|
||||
#include "parselink/logging.h"
|
||||
#include "parselink/utility/ctstring.h"
|
||||
|
||||
#include "parselink/msgpack/core/packer.h"
|
||||
|
||||
#include <boost/asio/as_tuple.hpp>
|
||||
#include <boost/asio/co_spawn.hpp>
|
||||
#include <boost/asio/detached.hpp>
|
||||
#include <boost/asio/ip/address.hpp>
|
||||
#include <boost/asio/ip/tcp.hpp>
|
||||
#include <boost/asio/ip/udp.hpp>
|
||||
#include <boost/asio/signal_set.hpp>
|
||||
#include <boost/beast.hpp>
|
||||
|
||||
@ -37,6 +39,7 @@ using net::awaitable;
|
||||
using net::co_spawn;
|
||||
using net::detached;
|
||||
using net::use_awaitable;
|
||||
using udp = net::ip::udp;
|
||||
|
||||
namespace {
|
||||
|
||||
@ -78,7 +81,7 @@ simple_client::simple_client(config const& cfg) noexcept
|
||||
|
||||
awaitable<void> simple_client::connect_to_server() noexcept {
|
||||
logger.debug("Connecting to parselink server...");
|
||||
net::ip::tcp::resolver resolver(io_context_);
|
||||
udp::resolver resolver(io_context_);
|
||||
auto [ec, results] = co_await resolver.async_resolve(
|
||||
{server_address_, std::to_string(server_port_)}, no_ex_coro);
|
||||
|
||||
@ -92,12 +95,18 @@ awaitable<void> simple_client::connect_to_server() noexcept {
|
||||
co_return;
|
||||
}
|
||||
|
||||
net::ip::tcp::socket socket(io_context_);
|
||||
|
||||
for (auto const& r : results) {
|
||||
udp::socket socket(io_context_);
|
||||
socket.open(r.endpoint().protocol());
|
||||
logger.debug("Connecting to {}", r.endpoint());
|
||||
auto [ec] = co_await socket.async_connect(r, no_ex_coro);
|
||||
if (!ec) {
|
||||
std::array<std::byte, 4096> buff;
|
||||
msgpack::packer packer(buff);
|
||||
packer.pack("hello");
|
||||
auto span = packer.subspan();
|
||||
auto [ec, bw] = co_await socket.async_send_to(
|
||||
net::buffer(span.data(), span.size()), r.endpoint(),
|
||||
no_ex_coro);
|
||||
if (ec) {
|
||||
logger.error("connection to {} failed: {}",
|
||||
results.begin()->endpoint(), ec);
|
||||
continue;
|
||||
@ -118,8 +127,8 @@ std::error_code simple_client::run() noexcept {
|
||||
logger.debug("Starting client.");
|
||||
|
||||
net::signal_set signals(io_context_, SIGINT, SIGTERM);
|
||||
signals.async_wait([&](auto sig, auto) {
|
||||
logger.info("Received signal: {}. Shutting down.", sig);
|
||||
signals.async_wait([&](auto sig, auto g) {
|
||||
logger.info("Received signal: {} {}. Shutting down.", sig, g);
|
||||
});
|
||||
|
||||
co_spawn(io_context_, connect_to_websocket(), detached);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user