Esempio n. 1
0
        public Node[] FindShortestPath(Node @from, Node to)
        {
            var control = new VisitingData();

            control.UpdateWeight(@from, new Weight(null, 0));
            control.ScheduleVisitTo(@from);

            while (control.HasScheduledVisits)
            {
                var visitingNode       = control.GetNodeToVisit();
                var visitingNodeWeight = control.QueryWeight(visitingNode);
                control.RegisterVisitTo(visitingNode);

                foreach (var neighborhoodInfo in visitingNode.Neighbors)
                {
                    if (!control.WasVisited(neighborhoodInfo.Node))
                    {
                        control.ScheduleVisitTo(neighborhoodInfo.Node);
                    }

                    var neighborWeight = control.QueryWeight(neighborhoodInfo.Node);

                    var probableWeight = (visitingNodeWeight.Value + neighborhoodInfo.WeightToNode);
                    if (neighborWeight.Value > probableWeight)
                    {
                        control.UpdateWeight(neighborhoodInfo.Node, new Weight(visitingNode, probableWeight));
                    }
                }
            }

            return(control.HasComputedPathToOrigin(to)
                ? control.ComputedPathToOrigin(to).Reverse().ToArray()
                : null);
        }
Esempio n. 2
0
        public static RouteResult BestRouteProcess(Route origin, Route destination)
        {
            var control = new VisitingData();

            control.UpdateFlightPrice(origin, new RouteCost(null, 0));
            control.ScheduleVisitTo(origin);

            while (control.HasScheduledVisits)
            {
                var visitingRoute       = control.GetRouteToVisit();
                var visitingFlightPrice = control.FlightPrice(visitingRoute);
                control.RegisterVisitTo(visitingRoute);

                foreach (var connectionInfo in visitingRoute.Connections)
                {
                    if (!control.WasVisited(connectionInfo.Airport))
                    {
                        control.ScheduleVisitTo(connectionInfo.Airport);
                    }

                    var connectionCost = control.FlightPrice(connectionInfo.Airport);

                    var probablePrice = (visitingFlightPrice.Price + connectionInfo.Price);
                    if (connectionCost.Price > probablePrice)
                    {
                        control.UpdateFlightPrice(connectionInfo.Airport, new RouteCost(visitingRoute, probablePrice));
                    }
                }
            }

            RouteResult result = new RouteResult();

            var cost = control.FlightPrice(destination);

            result.TotalCost = cost.Price;
            result.Routes    = cost.From == null ? null : control.GetEntireRoute(destination).Reverse().ToList();

            return(result);
        }
Esempio n. 3
0
        public async Task <IEnumerable <VisitingData> > GetAnotherData()
        {
            //Dictionary<string, int> data = new Dictionary<string, int>();
            List <VisitingData> data = new List <VisitingData>();

            string userString = HttpContext.Session.GetString("Login");

            userString = userString != null ? userString : "";

            StatisticFake statfake = new StatisticFake();

            List <RabbitModels.RabbitStatistic> result = new List <RabbitModels.RabbitStatistic>();
            var    corrId = string.Format("{0}{1}", DateTime.Now.Ticks, Thread.CurrentThread.ManagedThreadId);
            string request;

            byte[] responseMessage;
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(URLStatisticService);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                string requestString         = "api/statistics";
                HttpResponseMessage response = await client.GetAsync(requestString);

                request = "SERVICE: ArenaService \r\nGET: " + URLStatisticService + "/" + requestString + "\r\n" + client.DefaultRequestHeaders.ToString();
                string responseString = response.Headers.ToString() + "\nStatus: " + response.StatusCode.ToString();
                if (response.IsSuccessStatusCode)
                {
                    responseMessage = await response.Content.ReadAsByteArrayAsync();

                    var json = await response.Content.ReadAsStringAsync();

                    result             = JsonConvert.DeserializeObject <List <RabbitModels.RabbitStatistic> >(json);
                    statfake.statistic = result;
                }
                else
                {
                    responseMessage = Encoding.UTF8.GetBytes(response.ReasonPhrase);
                    SendStatistic("Default", DateTime.Now, "GetData", Request.HttpContext.Connection.RemoteIpAddress.ToString(), false, userString);
                    //return BadRequest();
                }
                await LogQuery(request, responseString, responseMessage);

                //Передаем список доступных городов с ID (для дальнейшей сверки)
                SendStatistic("Default", DateTime.Now, "Statistic", Request.HttpContext.Connection.RemoteIpAddress.ToString(), true, userString);
                //return View(statfake);
            }
            foreach (RabbitModels.RabbitStatistic item in result)
            {
                if (item.Action == "Index")
                {
                    bool found = false;
                    foreach (VisitingData dataItem in data)
                    {
                        if (item.User == dataItem.user)
                        {
                            dataItem.visits++;
                            found = true;
                        }
                    }
                    if (!found)
                    {
                        VisitingData dataItem = new VisitingData()
                        {
                            user = item.User, visits = 1
                        };
                        data.Add(dataItem);
                    }
                }
            }

            var chartData = new object[data.Count + 1];

            chartData[0] = new object[]
            {
                "user",
                "visits"
            };
            int j = 0;

            foreach (var i in data)
            {
                j++;
                chartData[j] = new object[] { i.user, i.visits };
            }

            //return new JsonResult(chartData);
            return(data);
        }