first commit
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using LiteNetLib;
|
||||
using LiteNetLib.Utils;
|
||||
using NitroxModel.Networking;
|
||||
using NitroxModel.Packets;
|
||||
|
||||
namespace NitroxServer.Communication.LiteNetLib;
|
||||
|
||||
public class LiteNetLibConnection : INitroxConnection, IEquatable<LiteNetLibConnection>
|
||||
{
|
||||
private readonly NetDataWriter dataWriter = new();
|
||||
private readonly NetPeer peer;
|
||||
|
||||
public IPEndPoint Endpoint => peer;
|
||||
public NitroxConnectionState State => peer.ConnectionState.ToNitrox();
|
||||
|
||||
public LiteNetLibConnection(NetPeer peer)
|
||||
{
|
||||
this.peer = peer;
|
||||
}
|
||||
|
||||
public void SendPacket(Packet packet)
|
||||
{
|
||||
if (peer.ConnectionState == ConnectionState.Connected)
|
||||
{
|
||||
byte[] packetData = packet.Serialize();
|
||||
dataWriter.Reset();
|
||||
dataWriter.Put(packetData.Length);
|
||||
dataWriter.Put(packetData);
|
||||
|
||||
peer.Send(dataWriter, (byte)packet.UdpChannel, NitroxDeliveryMethod.ToLiteNetLib(packet.DeliveryMethod));
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Warn($"Cannot send packet {packet?.GetType()} to a closed connection {peer as IPEndPoint}");
|
||||
}
|
||||
}
|
||||
|
||||
public static bool operator ==(LiteNetLibConnection left, LiteNetLibConnection right)
|
||||
{
|
||||
return Equals(left, right);
|
||||
}
|
||||
|
||||
public static bool operator !=(LiteNetLibConnection left, LiteNetLibConnection right)
|
||||
{
|
||||
return !Equals(left, right);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj is null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, obj))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (obj.GetType() != GetType())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return Equals((LiteNetLibConnection)obj);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return peer?.Id.GetHashCode() ?? 0;
|
||||
}
|
||||
|
||||
public bool Equals(LiteNetLibConnection other)
|
||||
{
|
||||
return peer?.Id == other?.peer?.Id;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user