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