NetworkManagerTester working
This commit is contained in:
96
Assets/Test stuff/NetworkManagerTester.cs
Normal file
96
Assets/Test stuff/NetworkManagerTester.cs
Normal file
@@ -0,0 +1,96 @@
|
||||
|
||||
using Marro.PacManUdon;
|
||||
using System;
|
||||
using UdonSharp;
|
||||
using UnityEngine;
|
||||
|
||||
public class NetworkManagerTester : UdonSharpBehaviour
|
||||
{
|
||||
[SerializeField] private NetworkManager[] networkManagers;
|
||||
[SerializeField] private float interval = 0.1f;
|
||||
[SerializeField] private int ownerIndex = 0;
|
||||
|
||||
private float countdown = 0;
|
||||
private bool serializationRequested;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
foreach (var networkManager in networkManagers)
|
||||
{
|
||||
networkManager.SetNetworkManagerTester(this);
|
||||
networkManager.Reset();
|
||||
}
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
countdown -= Time.deltaTime;
|
||||
if (countdown > 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
countdown = interval;
|
||||
|
||||
if (!serializationRequested)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var source = networkManagers[ownerIndex];
|
||||
|
||||
var data = PerformSerialization(source);
|
||||
|
||||
Debug.Log($"{nameof(NetworkManagerTester)} Transferring {data.Length} bytes.");
|
||||
|
||||
foreach (var target in networkManagers)
|
||||
{
|
||||
if (target == source)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
PerformDeserialization(target, data);
|
||||
}
|
||||
|
||||
serializationRequested = false;
|
||||
}
|
||||
|
||||
private byte[] PerformSerialization(NetworkManager networkManager)
|
||||
{
|
||||
networkManager.OnPreSerialization();
|
||||
var data = networkManager.NetworkedData;
|
||||
networkManager.OnPostSerializationInternal(true, data.Length) ;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private byte[] PerformDeserialization(NetworkManager networkManager, byte[] data)
|
||||
{
|
||||
networkManager.NetworkedData = data;
|
||||
networkManager.OnDeserialization();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public bool ShouldBeOwner(NetworkManager manager) => Array.IndexOf(networkManagers, manager) == ownerIndex;
|
||||
|
||||
public void RequestSerializationTest()
|
||||
{
|
||||
serializationRequested = true;
|
||||
}
|
||||
|
||||
public void RequestEvent(NetworkEventType eventType)
|
||||
{
|
||||
foreach (var target in networkManagers)
|
||||
{
|
||||
if (!target.IsOwner || !target.SerializationRequested)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Debug.Log($"{nameof(NetworkManagerTester)} Requested event with type {eventType}.");
|
||||
|
||||
target.RequestEventReceived(eventType);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user