// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
#pragma once
#include "Types.h"
#if COMPILE_WITH_PROFILER
#include "Engine/Core/Collections/Dictionary.h"
#endif
enum class NetworkMessageIDs : uint8
{
None = 0,
Handshake,
HandshakeReply,
ObjectReplicate,
ObjectReplicatePart,
ObjectSpawn,
ObjectSpawnPart,
ObjectDespawn,
ObjectRole,
ObjectRpc,
MAX,
};
class NetworkInternal
{
public:
static void NetworkReplicatorClientConnected(NetworkClient* client);
static void NetworkReplicatorClientDisconnected(NetworkClient* client);
static void NetworkReplicatorClear();
static void NetworkReplicatorPreUpdate();
static void NetworkReplicatorUpdate();
static void OnNetworkMessageObjectReplicate(NetworkEvent& event, NetworkClient* client, NetworkPeer* peer);
static void OnNetworkMessageObjectReplicatePart(NetworkEvent& event, NetworkClient* client, NetworkPeer* peer);
static void OnNetworkMessageObjectSpawn(NetworkEvent& event, NetworkClient* client, NetworkPeer* peer);
static void OnNetworkMessageObjectSpawnPart(NetworkEvent& event, NetworkClient* client, NetworkPeer* peer);
static void OnNetworkMessageObjectDespawn(NetworkEvent& event, NetworkClient* client, NetworkPeer* peer);
static void OnNetworkMessageObjectRole(NetworkEvent& event, NetworkClient* client, NetworkPeer* peer);
static void OnNetworkMessageObjectRpc(NetworkEvent& event, NetworkClient* client, NetworkPeer* peer);
#if COMPILE_WITH_PROFILER
struct ProfilerEvent
{
uint16 Count = 0;
uint16 DataSize = 0;
uint16 MessageSize = 0;
uint16 Receivers = 0;
};
///
/// Enables network usage profiling tools. Captures network objects replication and RPCs send statistics.
///
static bool EnableProfiling;
static Dictionary, ProfilerEvent> ProfilerEvents;
#endif
};