namespace Sandbox.Network; internal interface IObjectPoolEvent { void OnRented() { } void OnReturned() { } } internal class NetworkObjectPool where T : IObjectPoolEvent, new() { private readonly Queue _pool = new(); /// /// Rent an object from the pool. /// public T Rent() { var instance = _pool.Count > 0 ? _pool.Dequeue() : new(); instance.OnRented(); return instance; } /// /// Return an object to the pool. /// public void Return( T instance ) { instance.OnReturned(); _pool.Enqueue( instance ); } }