using System; using System.Net; using System.Net.Sockets; using System.Text; using LiteNetLib; using LiteNetLib.Utils; using UnityEngine; using UnityEngine.PlayerLoop; namespace _Hub.Scripts.Network { public class NetworkClient : MonoBehaviour, INetEventListener { public static NetworkClient Instance { get; private set; } #region Network private NetManager _netManager; private NetPeer _netPeer; private NetDataWriter _netDataWriter; #endregion private void Awake() { if (Instance != null && Instance != this) { Destroy(gameObject); return; } Instance = this; DontDestroyOnLoad(gameObject); } private void Start() { Init(); } private void Update() { _netManager.PollEvents(); } private void Init() { _netManager = new NetManager(this) { DisconnectTimeout = 100000 }; _netManager.Start(); } public void Connect() { _netManager.Connect("localhost", 9050, ""); } public void SendServer(string data) { var bytes = Encoding.UTF8.GetBytes(data); _netPeer.Send(bytes, DeliveryMethod.ReliableOrdered); } public void OnPeerConnected(NetPeer peer) { Debug.Log("We connect to server at " + peer.Address); _netPeer = peer; } public void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo) { Debug.Log("Lost Connection: " + disconnectInfo.Reason); } public void OnNetworkError(IPEndPoint endPoint, SocketError socketError) { } public void OnNetworkReceive(NetPeer peer, NetPacketReader reader, byte channelNumber, DeliveryMethod deliveryMethod) { var data = Encoding.UTF8.GetString(reader.RawData).Replace("\0", ""); Debug.Log($"Data received '{data}'"); } public void OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType) { } public void OnNetworkLatencyUpdate(NetPeer peer, int latency) { } public void OnConnectionRequest(ConnectionRequest request) { } } }