Pun-01/Assets/Photon/PhotonRealtime/Code/Region.cs
2022-07-08 09:14:55 +08:00

90 lines
2.7 KiB
C#

// ----------------------------------------------------------------------------
// <copyright file="Region.cs" company="Exit Games GmbH">
// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH
// </copyright>
// <summary>
// Represents regions in the Photon Cloud.
// </summary>
// <author>developer@photonengine.com</author>
// ----------------------------------------------------------------------------
#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER
#define SUPPORTED_UNITY
#endif
namespace Photon.Realtime
{
using ExitGames.Client.Photon;
#if SUPPORTED_UNITY || NETFX_CORE
using Hashtable = ExitGames.Client.Photon.Hashtable;
using SupportClass = ExitGames.Client.Photon.SupportClass;
#endif
public class Region
{
public string Code { get; private set; }
/// <summary>Unlike the CloudRegionCode, this may contain cluster information.</summary>
public string Cluster { get; private set; }
public string HostAndPort { get; protected internal set; }
public int Ping { get; set; }
public bool WasPinged { get { return this.Ping != int.MaxValue; } }
public Region(string code, string address)
{
this.SetCodeAndCluster(code);
this.HostAndPort = address;
this.Ping = int.MaxValue;
}
public Region(string code, int ping)
{
this.SetCodeAndCluster(code);
this.Ping = ping;
}
private void SetCodeAndCluster(string codeAsString)
{
if (codeAsString == null)
{
this.Code = "";
this.Cluster = "";
return;
}
codeAsString = codeAsString.ToLower();
int slash = codeAsString.IndexOf('/');
this.Code = slash <= 0 ? codeAsString : codeAsString.Substring(0, slash);
this.Cluster = slash <= 0 ? "" : codeAsString.Substring(slash+1, codeAsString.Length-slash-1);
}
public override string ToString()
{
return this.ToString(false);
}
public string ToString(bool compact = false)
{
string regionCluster = this.Code;
if (!string.IsNullOrEmpty(this.Cluster))
{
regionCluster += "/" + this.Cluster;
}
if (compact)
{
return string.Format("{0}:{1}", regionCluster, this.Ping);
}
else
{
return string.Format("{0}[{2}]: {1}ms", regionCluster, this.Ping, this.HostAndPort);
}
}
}
}