3#include "nalchi/alloca.hpp"
4#include "nalchi/export.hpp"
5#include "nalchi/shared_payload.hpp"
6#include "nalchi/typed_input_range.hpp"
8#include <steam/isteamnetworkingsockets.h>
9#include <steam/isteamnetworkingutils.h>
10#include <steam/steamnetworkingtypes.h>
44 NALCHI_API
static void unicast(ISteamNetworkingSockets* sockets, HSteamNetConnection connection,
46 std::int64_t* out_message_number_or_result, std::uint16_t lane = 0,
47 std::int64_t user_data = 0);
68 template <typed_input_range<HSteamNetConnection> ConnectionRange>
69 static void multicast(ISteamNetworkingSockets* sockets, ConnectionRange&& connections,
71 std::span<std::int64_t> out_message_number_or_result, std::uint16_t lane = 0,
72 std::int64_t user_data = 0)
74 const auto connections_count = std::ranges::size(connections);
78 auto** messages =
static_cast<SteamNetworkingMessage_t**
>(
79 NALCHI_ALLOCA(connections_count *
sizeof(SteamNetworkingMessage_t*)));
81 std::remove_const_t<
decltype(connections_count)> i = 0;
82 for (
const auto conn : connections)
85 messages[i] = SteamNetworkingUtils()->AllocateMessage(0);
88 payload.add_to_message(messages[i], logical_bytes_length);
89 messages[i]->m_conn = conn;
90 messages[i]->m_nFlags = send_flags;
91 messages[i]->m_idxLane = lane;
92 messages[i]->m_nUserData = user_data;
98 sockets->SendMessages(
static_cast<int>(connections_count), messages,
99 reinterpret_cast<int64*
>(out_message_number_or_result.data()));
121 NALCHI_API
static void multicast(ISteamNetworkingSockets* sockets,
unsigned connections_count,
123 int logical_bytes_length,
int send_flags,
124 std::int64_t* out_message_number_or_result, std::uint16_t lane = 0,
125 std::int64_t user_data = 0);
Extensions for ISteamNetworkingSockets.
Definition socket_extensions.hpp:21
static void multicast(ISteamNetworkingSockets *sockets, ConnectionRange &&connections, nalchi::shared_payload payload, int logical_bytes_length, int send_flags, std::span< std::int64_t > out_message_number_or_result, std::uint16_t lane=0, std::int64_t user_data=0)
Multicasts a shared_payload to the connections.
Definition socket_extensions.hpp:69
static void unicast(ISteamNetworkingSockets *sockets, HSteamNetConnection connection, nalchi::shared_payload payload, int logical_bytes_length, int send_flags, std::int64_t *out_message_number_or_result, std::uint16_t lane=0, std::int64_t user_data=0)
Unicasts a shared_payload to a connection.
static void multicast(ISteamNetworkingSockets *sockets, unsigned connections_count, const HSteamNetConnection *connections, nalchi::shared_payload payload, int logical_bytes_length, int send_flags, std::int64_t *out_message_number_or_result, std::uint16_t lane=0, std::int64_t user_data=0)
Multicasts a shared_payload to the connections.
Shared payload to store data to send.
Definition shared_payload.hpp:20