using FishNet.Object; using FishNet.Transporting; using System; using System.Collections.Generic; using UnityEngine; namespace FishNet.Managing.Server { public sealed partial class ServerManager : MonoBehaviour { #region Internal /// /// Current RPCLinks. /// internal Dictionary RpcLinks = new(); /// /// RPCLink indexes which can be used. /// private Queue _availableRpcLinkIndexes = new(); #endregion /// /// Initializes RPC Links for NetworkBehaviours. /// private void InitializeRpcLinks() { ushort startingLink = NetworkManager.StartingRpcLinkIndex; for (ushort i = ushort.MaxValue; i >= startingLink; i--) _availableRpcLinkIndexes.Enqueue(i); } /// /// Sets the next RPC Link to use. /// /// True if a link was available and set. internal bool GetRpcLink(out ushort value) { if (_availableRpcLinkIndexes.Count > 0) { value = _availableRpcLinkIndexes.Dequeue(); return true; } else { value = 0; return false; } } /// /// Sets data to RpcLinks for linkIndex. /// internal void SetRpcLink(ushort linkIndex, RpcLink data) { RpcLinks[linkIndex] = data; } /// /// Returns RPCLinks to availableRpcLinkIndexes. /// internal void StoreRpcLinks(Dictionary links) { foreach (RpcLinkType rlt in links.Values) _availableRpcLinkIndexes.Enqueue(rlt.LinkPacketId); } } }