1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- // ----------------------------------------------------------------------------
- // <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; }
- /// <summary>Weighted ping time.</summary>
- /// <remarks>
- /// Regions gets pinged 5 times (RegionPinger.Attempts).
- /// Out of those, the worst rtt is discarded and the best will be counted two times for a weighted average.
- /// </remarks>
- 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);
- }
- }
- }
- }
|