[Add] FishNet

This commit is contained in:
2026-03-30 20:11:57 +07:00
parent ee793a3361
commit c22c08753a
1797 changed files with 197950 additions and 1 deletions
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 634f0556bc4961f44846882dac5d1c7f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,196 @@
// using FishNet.Connection; // remove on v5
// using FishNet.Serializing;
// using FishNet.Transporting;
// using GameKit.Dependencies.Utilities;
// using System;
// using System.Collections.Generic;
// using System.Diagnostics;
// namespace FishNet.Broadcast.Helping
// {
// internal static class BroadcastHelper
// {
// /// <summary>
// /// Gets the key for a broadcast type.
// /// </summary>
// /// <typeparam name="T"></typeparam>
// /// <param name="broadcastType"></param>
// /// <returns></returns>
// internal static ushort GetKey<T>()
// {
// return typeof(T).FullName.GetStableHashU16();
// }
// }
// /// <summary>
// /// Implemented by server and client broadcast handlers.
// /// </summary>
// public abstract class BroadcastHandlerBase
// {
// /// <summary>
// /// Current index when iterating invokes.
// /// This value will be -1 when not iterating.
// /// </summary>
// protected int IteratingIndex;
// public abstract void RegisterHandler(object obj);
// public abstract void UnregisterHandler(object obj);
// public virtual void InvokeHandlers(PooledReader reader, Channel channel) { }
// public virtual void InvokeHandlers(NetworkConnection conn, PooledReader reader, Channel channel) { }
// public virtual bool RequireAuthentication => false;
// }
// /// <summary>
// /// Handles broadcasts received on server, from clients.
// /// </summary>
// internal class ClientBroadcastHandler<T> : BroadcastHandlerBase
// {
// /// <summary>
// /// Action handlers for the broadcast.
// /// </summary>
// private List<Action<NetworkConnection, T, Channel>> _handlers = new List<Action<NetworkConnection, T, Channel>>();
// /// <summary>
// /// True to require authentication for the broadcast type.
// /// </summary>
// private bool _requireAuthentication;
// public ClientBroadcastHandler(bool requireAuthentication)
// {
// _requireAuthentication = requireAuthentication;
// }
// /// <summary>
// /// Invokes handlers after reading broadcast.
// /// </summary>
// /// <returns>True if a rebuild was required.</returns>
// public override void InvokeHandlers(NetworkConnection conn, PooledReader reader, Channel channel)
// {
// T result = reader.Read<T>();
// for (base.IteratingIndex = 0; base.IteratingIndex < _handlers.Count; base.IteratingIndex++)
// {
// Action<NetworkConnection, T, Channel> item = _handlers[base.IteratingIndex];
// if (item != null)
// {
// item.Invoke(conn, result, channel);
// }
// else
// {
// _handlers.RemoveAt(base.IteratingIndex);
// base.IteratingIndex--;
// }
// }
// base.IteratingIndex = -1;
// }
// /// <summary>
// /// Adds a handler for this type.
// /// </summary>
// public override void RegisterHandler(object obj)
// {
// Action<NetworkConnection, T, Channel> handler = (Action<NetworkConnection, T, Channel>)obj;
// _handlers.AddUnique(handler);
// }
// /// <summary>
// /// Removes a handler from this type.
// /// </summary>
// /// <param name="handler"></param>
// public override void UnregisterHandler(object obj)
// {
// Action<NetworkConnection, T, Channel> handler = (Action<NetworkConnection, T, Channel>)obj;
// int indexOf = _handlers.IndexOf(handler);
// // Not registered.
// if (indexOf == -1)
// return;
// /* Has already been iterated over, need to subtract
// * 1 from iteratingIndex to accomodate
// * for the entry about to be removed. */
// if (base.IteratingIndex >= 0 && (indexOf <= base.IteratingIndex))
// base.IteratingIndex--;
// // Remove entry.
// _handlers.RemoveAt(indexOf);
// }
// /// <summary>
// /// True to require authentication for the broadcast type.
// /// </summary>
// public override bool RequireAuthentication => _requireAuthentication;
// }
// /// <summary>
// /// Handles broadcasts received on client, from server.
// /// </summary>
// internal class ServerBroadcastHandler<T> : BroadcastHandlerBase
// {
// /// <summary>
// /// Action handlers for the broadcast.
// /// Even though List lookups are slower this allows easy adding and removing of entries during iteration.
// /// </summary>
// private List<Action<T, Channel>> _handlers = new List<Action<T, Channel>>();
// /// <summary>
// /// Invokes handlers after reading broadcast.
// /// </summary>
// /// <returns>True if a rebuild was required.</returns>
// public override void InvokeHandlers(PooledReader reader, Channel channel)
// {
// T result = reader.Read<T>();
// for (base.IteratingIndex = 0; base.IteratingIndex < _handlers.Count; base.IteratingIndex++)
// {
// Action<T, Channel> item = _handlers[base.IteratingIndex];
// if (item != null)
// {
// item.Invoke(result, channel);
// }
// else
// {
// _handlers.RemoveAt(base.IteratingIndex);
// base.IteratingIndex--;
// }
// }
// base.IteratingIndex = -1;
// }
// /// <summary>
// /// Adds a handler for this type.
// /// </summary>
// public override void RegisterHandler(object obj)
// {
// Action<T, Channel> handler = (Action<T, Channel>)obj;
// _handlers.AddUnique(handler);
// }
// /// <summary>
// /// Removes a handler from this type.
// /// </summary>
// /// <param name="handler"></param>
// public override void UnregisterHandler(object obj)
// {
// Action<T, Channel> handler = (Action<T, Channel>)obj;
// int indexOf = _handlers.IndexOf(handler);
// // Not registered.
// if (indexOf == -1)
// return;
// /* Has already been iterated over, need to subtract
// * 1 from iteratingIndex to accomodate
// * for the entry about to be removed. */
// if (base.IteratingIndex >= 0 && (indexOf <= base.IteratingIndex))
// base.IteratingIndex--;
// //Remove entry.
// _handlers.RemoveAt(indexOf);
// }
// /// <summary>
// /// True to require authentication for the broadcast type.
// /// </summary>
// public override bool RequireAuthentication => false;
// }
//}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: c314af08d630630449b7b7af740b9c7d
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/Broadcast/Helping/BroadcastHelpers.cs
uploadId: 866910
@@ -0,0 +1,7 @@
namespace FishNet.Broadcast
{
/// <summary>
/// Include this interface on types intended to be used with Broadcast.
/// </summary>
public interface IBroadcast { }
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 88ec864df25feed49bdcdab7f880531d
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/Broadcast/IBroadcast.cs
uploadId: 866910