r2mods/ilspy_dump/ror2_csproj/RoR2.Networking/AddressPortPair.cs

82 lines
1.6 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using System;
using System.Globalization;
using System.Net;
namespace RoR2.Networking;
public struct AddressPortPair : IEquatable<AddressPortPair>
{
public string address;
public ushort port;
public bool isValid => !string.IsNullOrEmpty(address);
public AddressPortPair(string address, ushort port)
{
this.address = address;
this.port = port;
}
public AddressPortPair(IPAddress address, ushort port)
{
this.address = address.ToString();
this.port = port;
}
public static bool TryParse(string str, out AddressPortPair addressPortPair)
{
if (!string.IsNullOrEmpty(str))
{
int num = str.Length - 1;
while (num >= 0 && str[num] != ':')
{
num--;
}
if (num >= 0)
{
string text = str.Substring(0, num);
string s = str.Substring(num + 1, str.Length - num - 1);
addressPortPair.address = text;
addressPortPair.port = (ushort)(TextSerialization.TryParseInvariant(s, out ushort result) ? result : 0);
return true;
}
}
addressPortPair.address = "";
addressPortPair.port = 0;
return false;
}
public override string ToString()
{
return string.Format(CultureInfo.InvariantCulture, "{0}:{1}", address, port);
}
public bool Equals(AddressPortPair other)
{
if (string.Equals(address, other.address))
{
return port == other.port;
}
return false;
}
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if (obj is AddressPortPair other)
{
return Equals(other);
}
return false;
}
public override int GetHashCode()
{
return (((address != null) ? address.GetHashCode() : 0) * 397) ^ port.GetHashCode();
}
}