コード例 #1
0
        public ListaAmigos Get(Int64 id)
        {
            #region clases/variaveis
            /// <summary>
            /// Variaveis e classes utilizadas
            /// </summary>
            string msg;
            Crypt  vlToken = new Crypt();
            Dictionary <double, Amigos> lisFriendOrder = new Dictionary <double, Amigos>();
            BaseDados    dbData     = new BaseDados();
            RegraNegocio rn         = new RegraNegocio();
            Amigos       friendTime = null;
            Amigos       friend     = null;
            #endregion

            #region retornoGet
            /// <summary>
            ///Identifica e guarda o amigo que esta fazendo a solicitação
            /// </summary>
            try
            {
                friendTime = dbData.Busca(id);
            }
            catch
            {
                // Registrar uma linha de erro no log caso falhe o acesso pelo Token.
                msg = string.Empty;
                msg = "Token invalid: " + id;
                Log(msg, "CalculoHistoricoLog");
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
            }
            /// <summary>
            /// Essa rotina ira calcular a distancia de todos amigos diferente do amigo que solicitou a busca
            /// </summary>
            int tot = dbData.totalDados();
            int i   = 1;
            while (i <= tot)
            {
                try
                {
                    friend = dbData.Busca2(i);
                }
                catch
                {
                    msg = string.Empty;
                    msg = "Error at find a friend";
                    Log(msg, "CalculoHistoricoLog");
                    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
                }
                if (friend.Token != vlToken.EncDec(id.ToString(), true).ToString())
                {
                    double distancia = rn.DistanciaAmigos(friendTime.latitude, friendTime.longitude, friend.latitude, friend.longitude);
                    lisFriendOrder.Add(distancia, friend);
                    msg = string.Empty;
                    msg = "Calculo de distancia entro o " + friendTime.Name + " com o " + friend.Name + ", total of : " + distancia.ToString() + " KM";
                    Log(msg, "CalculoHistoricoLog");
                }
                i++;
            }
            /// <summary>
            /// Lista que retona apenas os 3 amigos mais proximos, baseado no calculo de distancia.
            /// </summary>
            int         c        = 1;
            ListaAmigos liFriend = new ListaAmigos();
            liFriend.AfProximos = "Your next friends";
            foreach (KeyValuePair <double, Amigos> liRemove in lisFriendOrder.OrderBy(key => key.Key))
            {
                if (c > 3)
                {
                    lisFriendOrder.Remove(liRemove.Key);
                }
                else
                {
                    liFriend.Amigos.Add(liRemove.Value);
                }

                c++;
            }

            return(liFriend);

            #endregion
        }