using System; namespace Mirror { /// Profiling statistics for tool to subscribe to (profiler etc.) public static class NetworkDiagnostics { /// Describes an outgoing message public readonly struct MessageInfo { /// The message being sent public readonly NetworkMessage message; /// channel through which the message was sent public readonly int channel; /// how big was the message (does not include transport headers) public readonly int bytes; /// How many connections was the message sent to. public readonly int count; internal MessageInfo(NetworkMessage message, int channel, int bytes, int count) { this.message = message; this.channel = channel; this.bytes = bytes; this.count = count; } } /// Event for when Mirror sends a message. Can be subscribed to. public static event Action OutMessageEvent; /// Event for when Mirror receives a message. Can be subscribed to. public static event Action InMessageEvent; // RuntimeInitializeOnLoadMethod -> fast playmode without domain reload [UnityEngine.RuntimeInitializeOnLoadMethod] static void ResetStatics() { InMessageEvent = null; OutMessageEvent = null; } internal static void OnSend(T message, int channel, int bytes, int count) where T : struct, NetworkMessage { if (count > 0 && OutMessageEvent != null) { MessageInfo outMessage = new MessageInfo(message, channel, bytes, count); OutMessageEvent?.Invoke(outMessage); } } internal static void OnReceive(T message, int channel, int bytes) where T : struct, NetworkMessage { if (InMessageEvent != null) { MessageInfo inMessage = new MessageInfo(message, channel, bytes, 1); InMessageEvent?.Invoke(inMessage); } } } }