Commit 8204a2a9 authored by Filip Hauzvic's avatar Filip Hauzvic
Browse files

Support multiple callbacks, use registration methods

parent b688c174
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -27,13 +27,19 @@ namespace net

        virtual NetworkMessage* receive() = 0;

        std::function<void()> on_connected;
        std::function<void()> on_disconnected;
        std::function<void(ConnectionId)> on_peer_connected;
        std::function<void(ConnectionId)> on_peer_disconnected;
        void register_on_connected(std::function<void()> callback) { on_connected.push_back(std::move(callback)); }
        void register_on_disconnected(std::function<void()> callback) { on_disconnected.push_back(std::move(callback)); }
        void register_on_peer_connected(std::function<void(ConnectionId)> callback) { on_peer_connected.push_back(std::move(callback)); }
        void register_on_peer_disconnected(std::function<void(ConnectionId)> callback) { on_peer_disconnected.push_back(std::move(callback)); }

        // Update the socket, process incoming, call at least once per frame
        virtual void update() = 0;
        virtual int get_max_message_size() = 0;

    protected:
        std::vector<std::function<void()>> on_connected;
        std::vector<std::function<void()>> on_disconnected;
        std::vector<std::function<void(ConnectionId)>> on_peer_connected;
        std::vector<std::function<void(ConnectionId)>> on_peer_disconnected;
    };
}
+33 −11
Original line number Diff line number Diff line
@@ -90,9 +90,12 @@ bool GNSSocket::start_server(int port, int max_connections)
    }

    m_status = ConnectionStatus::CONNECTED;
    if (on_connected)
    if (!on_connected.empty())
    {
        on_connected();
        for (const auto& callback : on_connected)
        {
            callback();
        }
    }

    return true;
@@ -235,9 +238,12 @@ void GNSSocket::shutdown()
    m_port = 0;
    m_max_connections = 0;

    if (old_status == ConnectionStatus::CONNECTED && on_disconnected)
    if (old_status == ConnectionStatus::CONNECTED && !on_disconnected.empty())
    {
        on_disconnected();
        for (const auto& callback : on_disconnected)
        {
            callback();
        }
    }
}

@@ -388,9 +394,12 @@ void GNSSocket::handle_connection_established(HSteamNetConnection connection)
void GNSSocket::handle_client_connected()
{
    m_status = ConnectionStatus::CONNECTED;
    if (on_connected)
    if (!on_connected.empty())
    {
        on_connected();
        for (const auto& callback : on_connected)
        {
            callback();
        }
    }
}

@@ -419,7 +428,14 @@ void GNSSocket::handle_new_peer_connection(HSteamNetConnection connection)
    ConnectionId peer_id = generate_peer_id();
    m_peer_to_connection[peer_id] = connection;
    m_connection_to_peer[connection] = peer_id;
    on_peer_connected(peer_id);

    if (!on_peer_connected.empty())
    {
        for (const auto& callback: on_peer_connected)
        {
            callback(peer_id);
        }
    }
}

void GNSSocket::handle_connection_closed(HSteamNetConnection connection)
@@ -439,13 +455,19 @@ void GNSSocket::handle_connection_closed(HSteamNetConnection connection)
    if (m_mode == SocketMode::CLIENT && peer_id == SERVER_PEER_ID)
    {
        m_status = ConnectionStatus::DISCONNECTED;
        if (on_disconnected)
        if (!on_disconnected.empty())
        {
            for (const auto& callback : on_disconnected)
            {
            on_disconnected();
                callback();
            }
    } else if (on_peer_disconnected)
        }
    } else if (!on_peer_disconnected.empty())
    {
        for (const auto& callback : on_peer_disconnected)
        {
        on_peer_disconnected(peer_id);
            callback(peer_id);
        }
    }
}