using System; using System.Net; using System.Net.Sockets; using LiteNetLib; using Unity.Collections.LowLevel.Unsafe; using UnityEngine; public class TestDataPublisher : MonoBehaviour, INetEventListener { private NetManager _client; [SerializeField] private int _count; private byte[] _data; // Start is called before the first frame update void Start() { this._client = new NetManager(this); this._client.Start(); this._client.Connect("localhost" /* host ip or name */, 9050 /* port */, "SomeConnectionKey" /* text key or NetDataWriter */); _data = new byte[this._count]; for (var i = 0; i < this._count; i++) { _data[i] = (byte)(i % 255); } } // Update is called once per frame unsafe void Update() { if (_client != null) { _client.PollEvents(); if (Time.frameCount % 10 == 0) { DateTime dateTime = DateTime.Now; var dest = UnsafeUtility.PinGCArrayAndGetDataAddress(this._data, out var handle); try { UnsafeUtility.MemCpy(dest, &dateTime, sizeof(DateTime)); this._client.SendToAll(this._data, DeliveryMethod.ReliableOrdered); } finally { UnsafeUtility.ReleaseGCObject(handle); } } } } private void OnDestroy() { _client.Stop(); } public void OnPeerConnected(NetPeer peer) { Debug.Log($"[{nameof(OnPeerConnected)}]{peer.Address}:{peer.Port}"); } public void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo) { Debug.Log($"[{nameof(OnPeerDisconnected)}]{peer.Address}:{peer.Port}"); } public void OnNetworkError(IPEndPoint endPoint, SocketError socketError) { Debug.Log($"[{nameof(OnNetworkError)}]{endPoint.Address}:{endPoint.Port} {socketError}"); } public void OnNetworkReceive(NetPeer peer, NetPacketReader reader, byte channelNumber, DeliveryMethod deliveryMethod) { Debug.Log($"[{nameof(OnNetworkReceive)}]{peer.Address}:{peer.Port}"); reader.Recycle(); } public void OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType) { Debug.Log($"[{nameof(OnNetworkReceiveUnconnected)}]{remoteEndPoint.Address}:{remoteEndPoint.Port} {messageType}"); } public void OnNetworkLatencyUpdate(NetPeer peer, int latency) { Debug.Log($"[{nameof(OnNetworkLatencyUpdate)}]{peer.Address}:{peer.Port}"); } public void OnConnectionRequest(ConnectionRequest request) { Debug.Log($"[{nameof(OnConnectionRequest)}]{request.RemoteEndPoint.Address}:{request.RemoteEndPoint.Port}"); } }