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);
77 if (0 == connections_count)
86 auto** messages =
static_cast<SteamNetworkingMessage_t**
>(
87 NALCHI_ALLOCA(connections_count *
sizeof(SteamNetworkingMessage_t*)));
89 std::remove_const_t<
decltype(connections_count)> i = 0;
90 for (
const auto conn : connections)
93 messages[i] = SteamNetworkingUtils()->AllocateMessage(0);
96 payload.add_to_message(messages[i], logical_bytes_length);
97 messages[i]->m_conn = conn;
98 messages[i]->m_nFlags = send_flags;
99 messages[i]->m_idxLane = lane;
100 messages[i]->m_nUserData = user_data;
106 sockets->SendMessages(
static_cast<int>(connections_count), messages,
107 reinterpret_cast<int64*
>(out_message_number_or_result.data()));
129 NALCHI_API
static void multicast(ISteamNetworkingSockets* sockets,
unsigned connections_count,
131 int logical_bytes_length,
int send_flags,
132 std::int64_t* out_message_number_or_result, std::uint16_t lane = 0,
133 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
static void force_deallocate(shared_payload payload)
Force deallocates the shared payload without sending it.