The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Additional documentation and release notes are available at [Multiplayer Documentation](https://docs-multiplayer.unity3d.com). ## [2.0.0-pre.1] - 2024-06-17 ### Added - Added event `NetworkManager.OnSessionOwnerPromoted` that is invoked when a new session owner promotion occurs. (#2948) - Added `NetworkRigidBodyBase.GetLinearVelocity` and `NetworkRigidBodyBase.SetLinearVelocity` convenience/helper methods. (#2948) - Added `NetworkRigidBodyBase.GetAngularVelocity` and `NetworkRigidBodyBase.SetAngularVelocity` convenience/helper methods. (#2948) ### Fixed - Fixed issue when `NetworkTransform` half float precision is enabled and ownership changes the current base position was not being synchronized. (#2948) - Fixed issue where `OnClientConnected` not being invoked on the session owner when connecting to a new distributed authority session. (#2948) - Fixed issue where Rigidbody micro-motion (i.e. relatively small velocities) would result in non-authority instances slightly stuttering as the body would come to a rest (i.e. no motion). Now, the threshold value can increase at higher velocities and can decrease slightly below the provided threshold to account for this. (#2948) ### Changed - Changed the client's owned objects is now returned (`NetworkClient` and `NetworkSpawnManager`) as an array as opposed to a list for performance purposes. (#2948) - Changed `NetworkTransfrom.TryCommitTransformToServer` to be internal as it will be removed by the final 2.0.0 release. (#2948) - Changed `NetworkTransformEditor.OnEnable` to a virtual method to be able to customize a `NetworkTransform` derived class by creating a derived editor control from `NetworkTransformEditor`. (#2948)
95 lines
3.5 KiB
C#
95 lines
3.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Unity.Netcode.TestHelpers.Runtime
|
|
{
|
|
internal class MockTransport : NetworkTransport
|
|
{
|
|
private struct MessageData
|
|
{
|
|
public ulong FromClientId;
|
|
public ArraySegment<byte> Payload;
|
|
public NetworkEvent Event;
|
|
}
|
|
|
|
private static Dictionary<ulong, Queue<MessageData>> s_MessageQueue = new Dictionary<ulong, Queue<MessageData>>();
|
|
|
|
public override ulong ServerClientId { get; } = 0;
|
|
|
|
public static ulong HighTransportId = 0;
|
|
public ulong TransportId = 0;
|
|
|
|
public NetworkManager NetworkManager;
|
|
|
|
public override void Send(ulong clientId, ArraySegment<byte> payload, NetworkDelivery networkDelivery)
|
|
{
|
|
var copy = new byte[payload.Array.Length];
|
|
Array.Copy(payload.Array, copy, payload.Array.Length);
|
|
s_MessageQueue[clientId].Enqueue(new MessageData { FromClientId = TransportId, Payload = new ArraySegment<byte>(copy, payload.Offset, payload.Count), Event = NetworkEvent.Data });
|
|
}
|
|
|
|
public override NetworkEvent PollEvent(out ulong clientId, out ArraySegment<byte> payload, out float receiveTime)
|
|
{
|
|
if (s_MessageQueue[TransportId].Count > 0)
|
|
{
|
|
var data = s_MessageQueue[TransportId].Dequeue();
|
|
clientId = data.FromClientId;
|
|
payload = data.Payload;
|
|
receiveTime = NetworkManager.RealTimeProvider.RealTimeSinceStartup;
|
|
if (NetworkManager.IsServer && data.Event == NetworkEvent.Connect)
|
|
{
|
|
s_MessageQueue[data.FromClientId].Enqueue(new MessageData { Event = NetworkEvent.Connect, FromClientId = ServerClientId, Payload = new ArraySegment<byte>() });
|
|
}
|
|
return data.Event;
|
|
}
|
|
clientId = 0;
|
|
payload = new ArraySegment<byte>();
|
|
receiveTime = 0;
|
|
return NetworkEvent.Nothing;
|
|
}
|
|
|
|
public override bool StartClient()
|
|
{
|
|
TransportId = ++HighTransportId;
|
|
s_MessageQueue[TransportId] = new Queue<MessageData>();
|
|
s_MessageQueue[ServerClientId].Enqueue(new MessageData { Event = NetworkEvent.Connect, FromClientId = TransportId, Payload = new ArraySegment<byte>() });
|
|
return true;
|
|
}
|
|
|
|
public override bool StartServer()
|
|
{
|
|
s_MessageQueue[ServerClientId] = new Queue<MessageData>();
|
|
return true;
|
|
}
|
|
|
|
public override void DisconnectRemoteClient(ulong clientId)
|
|
{
|
|
s_MessageQueue[clientId].Enqueue(new MessageData { Event = NetworkEvent.Disconnect, FromClientId = TransportId, Payload = new ArraySegment<byte>() });
|
|
}
|
|
|
|
public override void DisconnectLocalClient()
|
|
{
|
|
s_MessageQueue[ServerClientId].Enqueue(new MessageData { Event = NetworkEvent.Disconnect, FromClientId = TransportId, Payload = new ArraySegment<byte>() });
|
|
}
|
|
|
|
public override ulong GetCurrentRtt(ulong clientId)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public override void Shutdown()
|
|
{
|
|
}
|
|
|
|
protected override NetworkTopologyTypes OnCurrentTopology()
|
|
{
|
|
return NetworkManager != null ? NetworkManager.NetworkConfig.NetworkTopology : NetworkTopologyTypes.ClientServer;
|
|
}
|
|
|
|
public override void Initialize(NetworkManager networkManager = null)
|
|
{
|
|
NetworkManager = networkManager;
|
|
}
|
|
}
|
|
}
|