/// <summary> /// Visszaadja azt a gateway-t, amit eddig a legkevesebbet próbáltunk. /// Ha mindegyiket egyforma mennyiségben próbáltuk, akkor null-t ad vissza. /// </summary> /// <returns>Kiválasztott gateway vagy null</returns> private NATGateway GetLeastTriedServer() { NATGateway result = null; // először megnézzük, hogy mindegyik gateway-t azonos mennyiségben próbáltuk e már bool allEqv = true; int tried = mNATGateways[0].Attempts; foreach (NATGateway sc in mNATGateways) { if (tried != sc.Attempts) { // nem egyformán próbálkoztunk eddig allEqv = false; break; } } if (!allEqv) { // ha nem, akkor kikeressük azt, amelyiket a legkevesebbszer próbáltuk tried = mNATGateways[0].Attempts; result = mNATGateways[0]; mNATGateways.RemoveAt(0); foreach (NATGateway sc in mNATGateways) { if (tried < sc.Attempts) { // ezt kevesebbszer próbáltuk result = sc; tried = sc.Attempts; } } } return(result); }
/// <summary> /// Visszaadja az első olyan gateway-t, amit még sosem próbáltunk /// </summary> /// <returns>Kiválasztott szerver vagy null, ha már mindent próbáltunk legalább 1x</returns> private NATGateway GetNeverTriedServer() { NATGateway result = null; foreach (NATGateway sc in mNATGateways) { if (sc.Attempts == 0) { result = sc; break; } } return(result); }
/// <summary> /// Visszaad egy gateway-t, amin már volt sikeres csatlakoztatás /// </summary> /// <returns>Kiválasztott gateway vagy null, ha nem talált sikeresen csatlakozott gateway-t</returns> private NATGateway GetGoodServer() { NATGateway result = null; foreach (NATGateway sc in mNATGateways) { if (sc.Success) { result = sc; break; } } return(result); }
/// <summary> /// Determines whether the specified <see cref="System.Object"/> is equal to this instance. /// </summary> /// <param name="obj">The <see cref="System.Object"/> to compare with this instance.</param> /// <returns> /// <c>true</c> if the specified <see cref="System.Object"/> is equal to this instance; otherwise, <c>false</c>. /// </returns> public override bool Equals(object obj) { if (obj == null) { return(false); } if (ReferenceEquals(this, obj)) { return(true); } if (!obj.GetType().Equals(GetType())) { return(false); } NATGateway other = (NATGateway)obj; return(other.mEndPoint.Equals(mEndPoint)); }
/// <summary> /// Selects the NAT gate way. /// </summary> /// <returns>NATGateway</returns> internal NATGateway SelectNATGateWay() { NATGateway result = null; lock (mNATGateways) { if (mNATGateways.Count > 0) { // először megnézzük, melyik servert nem próbáltuk még result = GetNeverTriedServer(); if (result == null) { // megkeressük azt a szervert, amin már volt sikeres kapcsolódás result = GetGoodServer(); if (result == null) { // visszaadja azt a szervert, amit a legkevesebbszer próbáltunk eddig result = GetLeastTriedServer(); } } } } return(result); }