Commit 16ca0c8a authored by Filip Hauzvic's avatar Filip Hauzvic
Browse files

Add RPC broadcast option

parent 2a707c81
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -2,8 +2,6 @@
#include <com/runner.hpp>
#include <net/types.hpp>
#include <net/socket/isocket.hpp>


#include <span>


@@ -11,6 +9,7 @@ namespace net
{
    struct Driver final : public com::Runner
    {
        const ConnectionId SERVER_ID = 0;
        static inline std::string self_name() { return "net_driver"; }

        Driver();
+20 −12
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ namespace net
{
    struct RPCSystem : com::Library
    {
        const ConnectionId BROADCAST_ID = static_cast<uint32_t>(-1);
        static inline std::string self_name() { return "rpc_system.lib"; }

        RPCSystem();
@@ -21,6 +22,25 @@ namespace net
         */
        void process_packet(ConnectionId from, void* deserializer);

        void call_remote(
            com::ContextItem* context_item,
            const std::string& method_name,
            ConnectionId target,
            ReliabilityMode reliability,
            const std::vector<com::Reflection::ValuePtr>& params)
        {
            int written_bytes = 0;
            auto buffer = create_packet(context_item, method_name, params, written_bytes);
            std::span<const uint8_t> buffer_span(buffer.data(), written_bytes);
            if (target == BROADCAST_ID)
            {
                driver()->broadcast(buffer_span, reliability);
                return;
            }

            driver()->send(target, buffer_span, reliability);
        }

        template<typename... Args>
        void call_remote(
            com::ContextItem* context_item,
@@ -38,18 +58,6 @@ namespace net
                static_cast<const std::vector<com::Reflection::ValuePtr>&>(params));
        }

        void call_remote(
            com::ContextItem* context_item,
            const std::string& method_name,
            ConnectionId target,
            ReliabilityMode reliability,
            const std::vector<com::Reflection::ValuePtr>& params)
        {
            int written_bytes = 0;
            auto buffer = create_packet(context_item, method_name, params, written_bytes);
            std::span<const uint8_t> buffer_span(buffer.data(), written_bytes);
            driver()->send(target, buffer_span, reliability);
        }

    private:
        void register_functions() override;