コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
ファイル: NATGateway.cs プロジェクト: ewin66/Forge
        /// <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));
        }
コード例 #5
0
        /// <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);
        }