Beispiel #1
0
        private async Task <IActionResult> HandleNextBusLoadAction(DialogFulfillmentRequest <NextBusLoadParameters> data)
        {
            var originalParameters = data.QueryResult.OutputContexts.First(x => x.Name.EndsWith("route-data"));

            if (originalParameters == null)
            {
                throw new Exception("Could not determine route pattern");
            }
            var parameters = new NextBusLoadParameters()
            {
                Location  = originalParameters.Parameters.location,
                PatternId = originalParameters.Parameters.patternId
            };

            string    stopId;
            string    routeCode;
            Locations location;

            ValidateLocationParameter(parameters);
            GetStopIdAndRouteCode(parameters, out stopId, out routeCode, out location);

            if (parameters.PatternId == 0)
            {
                throw new Exception("Could not determine route pattern");
            }
            var vehicleStatuses = await _bcTransitRouteSchedule.GetVehicleStatuses(parameters.PatternId);

            var busInfo = GetNextBusFromLocation(location, vehicleStatuses);
            var message = "Bus # " + busInfo.Name + " " + busInfo.HeadsignText;

            if (!string.IsNullOrWhiteSpace(busInfo.HeadsignText))
            {
                switch (busInfo.vehicleCapacityIndicator.ToUpper())
                {
                case "GREEN":
                    message += " has low load";
                    break;

                case "YELLOW":
                    message += " has medium load";
                    break;

                case "RED":
                    message += " has heavy load";
                    break;
                }
            }
            else
            {
                message += " has no load data";
            }

            message += $" and is going {busInfo.Velocity} km/h";

            return(new OkObjectResult(new DialogFulfillmentResponse()
            {
                FulfillmentText = message
            }));
        }
Beispiel #2
0
        private async Task <IActionResult> HandleNextBusAction(DialogFulfillmentRequest <NextBusParameters> data)
        {
            string    stopId;
            string    routeCode;
            Locations location;

            ValidateLocationParameter(data.QueryResult.Parameters);
            GetStopIdAndRouteCode(data.QueryResult.Parameters, out stopId, out routeCode, out location);

            int patternId = 0;
            List <StopPredictionData> results;

            try
            {
                var stopData = await _bcTransitRouteSchedule.GetStopPredictionsForRoute(stopId, routeCode);

                results   = stopData.Item1;
                patternId = stopData.Item2;

                if (results.Count == 0)
                {
                    return(new OkObjectResult(new DialogFulfillmentResponse()
                    {
                        FulfillmentText = $"No scheduled busses found"
                    }));
                }

                var firstBus = results[0];

                string message = "";
                if (firstBus.PredictionType == PredictionTypes.Predicted.ToString())
                {
                    var now     = DateTime.Now;
                    var diff    = results[0].PredictTime - now;
                    var minutes = diff.Minutes;
                    message = $"Next bus comes in {minutes} minutes.";
                    if (firstBus.PredictTime > firstBus.ScheduleTime)
                    {
                        var timeDiff = firstBus.PredictTime - firstBus.ScheduleTime;
                        if (timeDiff.Minutes > 2)
                        {
                            message += $" The bus is running later than scheduled by {timeDiff.Minutes} minutes.";
                        }
                    }
                    else if (firstBus.PredictTime < firstBus.ScheduleTime)
                    {
                        var timeDiff = firstBus.ScheduleTime - firstBus.PredictTime;
                        if (timeDiff.Minutes > 2)
                        {
                            message += $" The bus is running earlier than scheduled by {timeDiff.Minutes} minutes.";
                        }
                    }
                }
                else
                {
                    message = $"Next bus is scheduled for {GetTimeStamp(firstBus.PredictTime)}.";
                }

                if (results.Count > 1)
                {
                    var secondBusDiff = results[1].PredictTime - DateTime.Now;
                    message += $" The following bus comes in {secondBusDiff.Minutes} minutes at {GetTimeStamp(results[1].PredictTime)}";
                }

                return(new OkObjectResult(new DialogFulfillmentResponse()
                {
                    FulfillmentText = message,
                    OutputContexts = new List <DialogFulfullmentOutputContext>()
                    {
                        new DialogFulfullmentOutputContext
                        {
                            LifespanCount = 1,
                            Name = data.Session + "/contexts/route-data",
                            Parameters = new
                            {
                                PatternId = patternId,
                                Location = location.ToString()
                            }
                        }
                    }
                }));
            }
            catch (Exception e)
            {
                _log.LogError(e.Message, e);
                return(new OkObjectResult(new DialogFulfillmentResponse()
                {
                    FulfillmentText = $"Error fetching next bus"
                }));
            }
        }