예제 #1
0
        private async Task <List <BusDirections> > GetDirectionsBus(Coordinates coordinates, List <StopAccessibleViewModel> path, string startPlace, string endPlace)
        {
            List <BusDirections> busDirections = new List <BusDirections>();

            var        firstStop                = path[0];
            var        firstStopName            = GetBusStop(firstStop.InitialStopId).StopName;
            Directions directionsToTheFirstStop = await GetDirectionsByFoot(coordinates.StartingPoint,
                                                                            Context.BusStops.ProjectTo <BusStopViewModel>().First(x => x.Id == firstStop.InitialStopId).LatLng);

            var byFoot = new BusDirections()
            {
                Method        = "foot",
                Polyline      = directionsToTheFirstStop.Polylines.First(),
                Distance      = directionsToTheFirstStop.Distance,
                Duration      = directionsToTheFirstStop.Duration,
                LocationStart = startPlace,
                LocationEnd   = firstStopName
            };

            busDirections.Add(byFoot);
            foreach (var item in path)
            {
                string     waypoints = GetWayPoints(item);
                string     f         = GetBusStop(item.InitialStopId).StopName;
                string     second    = GetBusStop(item.DestStopId).StopName;
                Directions directionsBetweenStops = await GetDirectionsCar(waypoints);

                string polyline = "";
                foreach (var s in directionsBetweenStops.Polylines)
                {
                    polyline = polyline.PolylineAdd(s);
                }
                busDirections.Add(new BusDirections()
                {
                    Bus           = GetBusName(item.BusId),
                    Method        = "bus",
                    Distance      = directionsBetweenStops.Distance,
                    Duration      = directionsBetweenStops.Duration,
                    Polyline      = polyline,
                    LocationStart = f,
                    LocationEnd   = second
                });
            }
            var        lastStop                = path[path.Count - 1];
            var        lastStopName            = GetBusStop(lastStop.DestStopId).StopName;
            Directions directionsToDestination = await GetDirectionsByFoot(Context.BusStops
                                                                           .ProjectTo <BusStopViewModel>().First(x => x.Id == lastStop.DestStopId).LatLng, coordinates.EndPoint);

            busDirections.Add(new BusDirections()
            {
                Polyline      = directionsToDestination.Polylines.First(),
                Method        = "foot",
                Distance      = directionsToDestination.Distance,
                Duration      = directionsToDestination.Duration,
                LocationStart = lastStopName,
                LocationEnd   = endPlace
            });

            return(busDirections);
        }
예제 #2
0
 protected override BusCollection GetBusCollection(MediaTypes mediaType, BusDirections busDir)
 {
     return(mediaType switch
     {
         MediaTypes.Audio => busDir == BusDirections.Input ? _audioInputs : _audioOutputs,
         MediaTypes.Event => busDir == BusDirections.Input ? _eventInputs : _eventOutputs,
         _ => null
     });
예제 #3
0
        protected override BusCollection GetBusCollection(MediaTypes mediaType, BusDirections busDir)
        {
            if (mediaType == MediaTypes.Audio)
            {
                return(busDir == BusDirections.Input ? _audioInputs : _audioOutputs);
            }

            return(null);
        }
예제 #4
0
        // retval NOT a TResult
        public virtual int GetBusCount(MediaTypes type, BusDirections dir)
        {
            System.Diagnostics.Trace.WriteLine("IComponent.GetBusCount(" + type + ", " + dir + ")");

            var busses = GetBusCollection(type, dir);

            if (busses != null)
            {
                return(busses.Count);
            }

            return(0);
        }
예제 #5
0
        public virtual int GetBusArrangement(BusDirections dir, int index, ref SpeakerArrangement arr)
        {
            System.Diagnostics.Trace.WriteLine("IAudioProcessor.GetBusArrangement(" + dir + ", " + index + ")");

            var busses = GetBusCollection(MediaTypes.Audio, dir);

            if (busses == null)
            {
                return(TResult.E_NotImplemented);
            }
            if (index < 0 || index > busses.Count)
            {
                return(TResult.E_InvalidArg);
            }

            arr = ((AudioBus)busses[index]).SpeakerArrangement;

            return(TResult.S_OK);
        }
예제 #6
0
        public AudioBusAccessor(ref ProcessData processData, BusDirections busDir, int busIndex)
        {
            _busDir     = busDir;
            _numSamples = processData.NumSamples;
            _sampleSize = processData.SymbolicSampleSize;

            if (busDir == BusDirections.Input)
            {
                Guard.ThrowIfOutOfRange("busIndex", busIndex, 0, processData.NumInputs);

                InitializeAudioBuffers(processData.Inputs, busIndex);
            }
            else
            {
                Guard.ThrowIfOutOfRange("busIndex", busIndex, 0, processData.NumOutputs);

                InitializeAudioBuffers(processData.Outputs, busIndex);
            }
        }
예제 #7
0
        public virtual int ActivateBus(MediaTypes type, BusDirections dir, int index, bool state)
        {
            System.Diagnostics.Trace.WriteLine("IComponent.ActivateBus(" + type + ", " + dir + ", " + index + ", " + state + ")");

            var busses = GetBusCollection(type, dir);

            if (busses != null)
            {
                if (index < 0 || index >= busses.Count)
                {
                    return(TResult.E_InvalidArg);
                }

                busses[index].IsActive = state;

                return(TResult.S_OK);
            }

            return(TResult.E_Unexpected);
        }
예제 #8
0
        public virtual int GetBusInfo(MediaTypes type, BusDirections dir, int index, ref BusInfo bus)
        {
            System.Diagnostics.Trace.WriteLine("IComponent.GetBusInfo(" + type + ", " + dir + ", " + index + ")");

            var busses = GetBusCollection(type, dir);

            if (busses != null)
            {
                if (index < 0 || index >= busses.Count)
                {
                    return(TResult.E_InvalidArg);
                }

                busses[index].GetInfo(ref bus);

                return(TResult.S_OK);
            }

            return(TResult.E_Unexpected);
        }
예제 #9
0
 public virtual int GetUnitByBus(MediaTypes type, BusDirections dir, int busIndex, int channel, ref int unitId)
 {
     return(TResult.E_NotImplemented);
 }
예제 #10
0
 protected abstract BusCollection GetBusCollection(MediaTypes mediaType, BusDirections busDir);
예제 #11
0
 public BusCollection(MediaTypes mediaType, BusDirections busDir)
 {
     MediaType    = mediaType;
     BusDirection = busDir;
 }
예제 #12
0
        public async Task <List <List <BusDirections> > > BusAlgorithm(Coordinates coordinates, string startPlace, string endPlace, int cityId)
        {
            StaticData.ListStopAccessibilities = Context.StopsAccessibility.Where(x => x.InitialStop.CityId == cityId).ToList();
            StaticData.ListStopOrdered         = Context.StopsOrdered.Where(x => x.BusStop.CityId == cityId).Include(x => x.BusStop).ToList();
            List <BusStopViewModel> toLocation = new List <BusStopViewModel>();
            List <BusStopViewModel> busStops   = await BusStops(cityId);

            toLocation = FindStopsInRadius(coordinates.StartingPoint, busStops).ToList();
            int stopsTaken = 3 - toLocation.Count;

            for (int i = 0; i < stopsTaken; i++)
            {
                toLocation.Add(FindNearestBusStopWithRemove(coordinates.StartingPoint, busStops));
            }
            if (stopsTaken > 0)
            {
                busStops.AddRange(toLocation.Skip(3 - stopsTaken));
            }
            List <BusStopViewModel> toDestination = new List <BusStopViewModel>();

            toDestination = FindStopsInRadius(coordinates.EndPoint, busStops).ToList();
            stopsTaken    = 3 - toDestination.Count;
            for (int i = 0; i < stopsTaken; i++)
            {
                toDestination.Add(FindNearestBusStopWithRemove(coordinates.EndPoint, busStops));
            }
            busStops.AddRange(toDestination.Skip(3 - stopsTaken));
            bool tryOnFoot = false;
            var  paths     = new List <List <StopAccessibleViewModel> >();
            List <List <StopAccessibleViewModel> > pathsWithTransfer = new List <List <StopAccessibleViewModel> >();
            List <List <StopAccessibleViewModel> > directPaths       = new List <List <StopAccessibleViewModel> >();

            for (int i = 0; i < toLocation.Count; i++)
            {
                for (int j = 0; j < toDestination.Count; j++)
                {
                    if (toLocation[i].Id == toDestination[j].Id)
                    {
                        tryOnFoot = true;
                        continue;
                    }

                    var result = GetBiDirectionalBFSAsync(toLocation[i].Id, toDestination[j].Id, coordinates.EndPoint);
                    if (result == null)
                    {
                        continue;
                    }
                    if (result.Count == 2)
                    {
                        pathsWithTransfer.Add(result[0]);
                        directPaths.Add(result[1]);
                    }
                    else
                    {
                        if (result[0].Count == 1)
                        {
                            directPaths.Add(result[0]);
                        }
                        else
                        {
                            pathsWithTransfer.Add(result[0]);
                        }
                    }
                }
            }
            if (directPaths.Count != 0)
            {
                paths.Add(BestDirectPath(coordinates.StartingPoint, coordinates.EndPoint, directPaths));
            }
            if (pathsWithTransfer.Count != 0)
            {
                paths.Add(BestDirectPath(coordinates.StartingPoint, coordinates.EndPoint, pathsWithTransfer));
            }
            List <List <BusDirections> > busDirections = new List <List <BusDirections> >();

            for (int i = 0; i < paths.Count; i++)
            {
                busDirections.Add(await GetDirectionsBus(coordinates, paths[i], startPlace, endPlace));
            }
            if (DistanceBetween(coordinates.StartingPoint, coordinates.EndPoint) < 0.5 || tryOnFoot)
            {
                Directions d = await GetDirectionsByFoot(coordinates.StartingPoint, coordinates.EndPoint);

                BusDirections footDirections = new BusDirections();
                footDirections.Polyline      = d.Polylines.First();
                footDirections.Distance      = d.Distance;
                footDirections.Duration      = d.Duration;
                footDirections.LocationEnd   = startPlace;
                footDirections.LocationStart = endPlace;
                footDirections.Method        = "foot";
                busDirections.Insert(0, new List <BusDirections>()
                {
                    footDirections
                });
            }
            return(busDirections.ToList());
        }