This repository has been archived on 2025-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
Files
skolavdf/phr/StickGame/Assets/FishNet/Runtime/Managing/Server/ServerManager.RpcLinks.cs
2024-03-24 22:21:16 +01:00

71 lines
2.0 KiB
C#

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
/// <summary>
/// Current RPCLinks.
/// </summary>
internal Dictionary<ushort, RpcLink> RpcLinks = new Dictionary<ushort, RpcLink>();
/// <summary>
/// RPCLink indexes which can be used.
/// </summary>
private Queue<ushort> _availableRpcLinkIndexes = new Queue<ushort>();
#endregion
/// <summary>
/// Initializes RPC Links for NetworkBehaviours.
/// </summary>
private void InitializeRpcLinks()
{
ushort startingLink = NetworkManager.StartingRpcLinkIndex;
for (ushort i = ushort.MaxValue; i >= startingLink; i--)
_availableRpcLinkIndexes.Enqueue(i);
}
/// <summary>
/// Sets the next RPC Link to use.
/// </summary>
/// <returns>True if a link was available and set.</returns>
internal bool GetRpcLink(out ushort value)
{
if (_availableRpcLinkIndexes.Count > 0)
{
value = _availableRpcLinkIndexes.Dequeue();
return true;
}
else
{
value = 0;
return false;
}
}
/// <summary>
/// Sets data to RpcLinks for linkIndex.
/// </summary>
internal void SetRpcLink(ushort linkIndex, RpcLink data)
{
RpcLinks[linkIndex] = data;
}
/// <summary>
/// Returns RPCLinks to availableRpcLinkIndexes.
/// </summary>
internal void StoreRpcLinks(Dictionary<uint, RpcLinkType> links)
{
foreach (RpcLinkType rlt in links.Values)
_availableRpcLinkIndexes.Enqueue(rlt.LinkIndex);
}
}
}