[Add] FishNet
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishNet.Managing.Debugging
|
||||
{
|
||||
/// <summary>
|
||||
/// A container for debugging.
|
||||
/// </summary>
|
||||
[DisallowMultipleComponent]
|
||||
[AddComponentMenu("FishNet/Manager/DebugManager")]
|
||||
public class DebugManager : MonoBehaviour
|
||||
{
|
||||
/// <summary>
|
||||
/// True to write additional information about scene objects being sent in spawn messages. This is primarily used to resolve sceneId not found errors.
|
||||
/// </summary>
|
||||
[Tooltip("True to write additional information about scene objects being sent in spawn messages. This is primarily used to resolve sceneId not found errors.")]
|
||||
public bool WriteSceneObjectDetails;
|
||||
/// <summary>
|
||||
/// True to validate written versus read length of Rpcs. Errors will be thrown if read length is not equal to written length.
|
||||
/// </summary>
|
||||
[Tooltip("True to validate written versus read length of Rpcs. Errors will be thrown if read length is not equal to written length.")]
|
||||
public bool ValidateRpcLengths;
|
||||
/// <summary>
|
||||
/// True to disable RpcLinks for Observer RPCs.
|
||||
/// </summary>
|
||||
[Tooltip("True to disable RpcLinks for Observer RPCs.")]
|
||||
public bool DisableObserversRpcLinks;
|
||||
/// <summary>
|
||||
/// True to disable RpcLinks for Target RPCs.
|
||||
/// </summary>
|
||||
[Tooltip("True to disable RpcLinks for Target RPCs.")]
|
||||
public bool DisableTargetRpcLinks;
|
||||
/// <summary>
|
||||
/// True to disable RpcLinks for Server RPCs.
|
||||
/// </summary>
|
||||
[Tooltip("True to disable RpcLinks for Server RPCs.")]
|
||||
public bool DisableServerRpcLinks;
|
||||
/// <summary>
|
||||
/// True to disable RpcLinks for Replicate RPCs.
|
||||
/// </summary>
|
||||
[Tooltip("True to disable RpcLinks for Replicate RPCs.")]
|
||||
public bool DisableReplicateRpcLinks;
|
||||
/// <summary>
|
||||
/// True to disable RpcLinks for Reconcile RPCs.
|
||||
/// </summary>
|
||||
[Tooltip("True to disable RpcLinks for Reconcile RPCs.")]
|
||||
public bool DisableReconcileRpcLinks;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6d0962ead4b02a34aae248fccce671ce
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {fileID: 2800000, guid: bf9191e2e07d29749bca3a1ae44e4bc8, type: 3}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Runtime/Managing/Debugging/DebugManager.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f59bd8d1da17e3c49b541b79d1adfbf9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,70 @@
|
||||
#if UNITY_EDITOR
|
||||
using FishNet.Managing.Debugging;
|
||||
using GameKit.Dependencies.Utilities;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using LayoutTools = GameKit.Dependencies.Utilities.EditorGuiLayoutTools;
|
||||
|
||||
namespace FishNet.Managing.Editing
|
||||
{
|
||||
[CustomEditor(typeof(DebugManager))]
|
||||
public class DebugManagerEditor : Editor
|
||||
{
|
||||
private SerializedProperty _writeSceneObjectDetails;
|
||||
private SerializedProperty _validateRpcLengths;
|
||||
private SerializedProperty _disableObserversRpcLinks;
|
||||
private SerializedProperty _disableTargetRpcLinks;
|
||||
private SerializedProperty _disableServerRpcLinks;
|
||||
private SerializedProperty _disableReplicateRpcLinks;
|
||||
private SerializedProperty _disableReconcileRpcLinks;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
_writeSceneObjectDetails = serializedObject.FindProperty(nameof(_writeSceneObjectDetails).MemberToPascalCase());
|
||||
_validateRpcLengths = serializedObject.FindProperty(nameof(_validateRpcLengths).MemberToPascalCase());
|
||||
_disableObserversRpcLinks = serializedObject.FindProperty(nameof(_disableObserversRpcLinks).MemberToPascalCase());
|
||||
_disableTargetRpcLinks = serializedObject.FindProperty(nameof(_disableTargetRpcLinks).MemberToPascalCase());
|
||||
_disableServerRpcLinks = serializedObject.FindProperty(nameof(_disableServerRpcLinks).MemberToPascalCase());
|
||||
_disableReplicateRpcLinks = serializedObject.FindProperty(nameof(_disableReplicateRpcLinks).MemberToPascalCase());
|
||||
_disableReconcileRpcLinks = serializedObject.FindProperty(nameof(_disableReconcileRpcLinks).MemberToPascalCase());
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
serializedObject.Update();
|
||||
|
||||
DebugManager DebugManager = (DebugManager)target;
|
||||
|
||||
GUI.enabled = false;
|
||||
EditorGUILayout.ObjectField("Script:", MonoScript.FromMonoBehaviour(DebugManager), typeof(DebugManager), false);
|
||||
GUI.enabled = true;
|
||||
|
||||
LayoutTools.AddHelpBox("Debug features will only be run in Unity Editor, and development builds. Enabling debug features will increase bandwidth consumption and likely create garbage allocations.", MessageType.Warning);
|
||||
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.LabelField("Detail Writing", EditorStyles.boldLabel);
|
||||
EditorGUI.indentLevel++;
|
||||
LayoutTools.AddPropertyField(_writeSceneObjectDetails, "Scene Objects");
|
||||
EditorGUI.indentLevel--;
|
||||
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.LabelField("Packet Validation", EditorStyles.boldLabel);
|
||||
EditorGUI.indentLevel++;
|
||||
LayoutTools.AddPropertyField(_validateRpcLengths, "Rpc Lengths");
|
||||
EditorGUI.indentLevel--;
|
||||
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.LabelField("Disable RpcLinks", EditorStyles.boldLabel);
|
||||
EditorGUI.indentLevel++;
|
||||
LayoutTools.AddPropertyField(_disableObserversRpcLinks, "ObserversRpcs");
|
||||
LayoutTools.AddPropertyField(_disableTargetRpcLinks, "TargetRpcs");
|
||||
LayoutTools.AddPropertyField(_disableServerRpcLinks, "ServerRpcs");
|
||||
LayoutTools.AddPropertyField(_disableReplicateRpcLinks, "ReplicateRpcs");
|
||||
LayoutTools.AddPropertyField(_disableReconcileRpcLinks, "ReconcileRpcs");
|
||||
EditorGUI.indentLevel--;
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e6de332294b6706489cb1de30b878ac7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Runtime/Managing/Debugging/Editor/DebugManagerEditor.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,103 @@
|
||||
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
||||
#define DEVELOPMENT
|
||||
#endif
|
||||
#if DEVELOPMENT
|
||||
using FishNet.Managing.Logging;
|
||||
using FishNet.Object;
|
||||
using FishNet.Serializing;
|
||||
using FishNet.Transporting;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using FishNet.Transporting.Tugboat;
|
||||
|
||||
namespace FishNet.Managing.Debugging
|
||||
{
|
||||
internal class PacketIdHistory
|
||||
{
|
||||
/// <summary>
|
||||
/// Last several non-split packetIds to be received on the client.
|
||||
/// </summary>
|
||||
private readonly Queue<PacketId> _serverPacketsReceived = new();
|
||||
/// <summary>
|
||||
/// Last several non-split packetIds to be received on the server.
|
||||
/// </summary>
|
||||
private readonly Queue<PacketId> _clientPacketsReceived = new();
|
||||
/// <summary>
|
||||
/// StringBuilder to limit garbage allocation.
|
||||
/// </summary>
|
||||
private static StringBuilder _stringBuilder = new();
|
||||
/// <summary>
|
||||
/// Maximum number of packets allowed to be queued.
|
||||
/// </summary>
|
||||
private const int PACKET_COUNT = 5;
|
||||
|
||||
/// <summary>
|
||||
/// Resets data.
|
||||
/// </summary>
|
||||
internal void ResetState(bool packetsFromServer)
|
||||
{
|
||||
if (packetsFromServer)
|
||||
_serverPacketsReceived.Clear();
|
||||
else
|
||||
_clientPacketsReceived.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a packet to data.
|
||||
/// </summary>
|
||||
internal void ReceivedPacket(PacketId pId, bool packetFromServer)
|
||||
{
|
||||
Queue<PacketId> queue = packetFromServer ? _serverPacketsReceived : _clientPacketsReceived;
|
||||
|
||||
queue.Enqueue(pId);
|
||||
|
||||
while (queue.Count > PACKET_COUNT)
|
||||
queue.Dequeue();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Prints current data.
|
||||
/// </summary>
|
||||
internal string GetReceivedPacketIds(bool packetsFromServer, bool resetReceived = false)
|
||||
{
|
||||
string packetOriginTxt = packetsFromServer ? "from Server" : "from Client";
|
||||
|
||||
_stringBuilder.Clear();
|
||||
Queue<PacketId> queue = GetQueue(packetsFromServer);
|
||||
|
||||
_stringBuilder.AppendLine($"The last {queue.Count} packets to arrive {packetOriginTxt} are:");
|
||||
foreach (PacketId item in queue)
|
||||
_stringBuilder.AppendLine($"{item.ToString()}");
|
||||
|
||||
// Attach nob information.
|
||||
_stringBuilder.Append($"The last parsed NetworkObject is ");
|
||||
NetworkObject lastNob = Reader.LastNetworkObject;
|
||||
if (lastNob != null)
|
||||
_stringBuilder.Append($"Id {lastNob.ObjectId} on gameObject {lastNob.name}");
|
||||
else
|
||||
_stringBuilder.Append("Unset");
|
||||
|
||||
// Attach nb information.
|
||||
_stringBuilder.Append($", and NetworkBehaviour ");
|
||||
NetworkBehaviour lastNb = Reader.LastNetworkBehaviour;
|
||||
if (lastNb == null)
|
||||
_stringBuilder.Append("Unset");
|
||||
else
|
||||
_stringBuilder.Append($"{lastNb.GetType().Name}");
|
||||
|
||||
_stringBuilder.Append(".");
|
||||
|
||||
if (resetReceived)
|
||||
ResetState(packetsFromServer);
|
||||
|
||||
return _stringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns which packet queue to use.
|
||||
/// </summary>
|
||||
private Queue<PacketId> GetQueue(bool packetsFromServer) => packetsFromServer ? _serverPacketsReceived : _clientPacketsReceived;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: afc241e869d97a44f8339510586dce73
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Runtime/Managing/Debugging/PacketIdHistory.cs
|
||||
uploadId: 866910
|
||||
Reference in New Issue
Block a user