Playvoi/Playvoi.Client/Assets/_Hub/Scripts/Network/NetworkClient.cs
2026-01-17 01:59:13 +03:00

101 lines
No EOL
2.5 KiB
C#

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)
{
}
}
}