first commit
This commit is contained in:
64
Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs
Normal file
64
Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR)
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
#define MOBILE_ANDROID
|
||||
#endif
|
||||
#if UNITY_IOS && !UNITY_EDITOR
|
||||
#define MOBILE_IOS
|
||||
#endif
|
||||
#if MOBILE_ANDROID || MOBILE_IOS
|
||||
#define MOBILE
|
||||
#endif
|
||||
|
||||
using System;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace SingularityGroup.HotReload {
|
||||
static class IpHelper {
|
||||
// get my local ip address
|
||||
|
||||
static DateTime cachedAt;
|
||||
static string ipCached;
|
||||
public static string GetIpAddressCached() {
|
||||
if (string.IsNullOrEmpty(ipCached) || DateTime.UtcNow - cachedAt > TimeSpan.FromSeconds(5)) {
|
||||
ipCached = GetIpAddress();
|
||||
cachedAt = DateTime.UtcNow;
|
||||
}
|
||||
return ipCached;
|
||||
}
|
||||
|
||||
public static string GetIpAddress() {
|
||||
var ip = GetLocalIPv4(NetworkInterfaceType.Wireless80211);
|
||||
|
||||
if (string.IsNullOrEmpty(ip)) {
|
||||
return GetLocalIPv4(NetworkInterfaceType.Ethernet);
|
||||
}
|
||||
return ip;
|
||||
}
|
||||
|
||||
private static string GetLocalIPv4(NetworkInterfaceType _type) {
|
||||
string output = "";
|
||||
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()) {
|
||||
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up) {
|
||||
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) {
|
||||
if (ip.Address.AddressFamily == AddressFamily.InterNetwork && IsLocalIp(ip.Address.MapToIPv4().GetAddressBytes())) {
|
||||
output = ip.Address.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
// https://datatracker.ietf.org/doc/html/rfc1918#section-3
|
||||
static bool IsLocalIp(byte[] ipAddress) {
|
||||
return ipAddress[0] == 10
|
||||
|| ipAddress[0] == 172
|
||||
&& ipAddress[1] >= 16
|
||||
&& ipAddress[1] <= 31
|
||||
|| ipAddress[0] == 192
|
||||
&& ipAddress[1] == 168;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user