示例#1
0
        public Route Execute()
        {
            string uri = this.GetRequestUri();

            System.Net.WebRequest request = System.Net.HttpWebRequest.Create(uri);

            AutoResetEvent waitEvent = new AutoResetEvent(false);
            IAsyncResult   result    = request.BeginGetResponse((AsyncCallback) delegate(IAsyncResult ar)
            {
                waitEvent.Set();
                Thread.Sleep(0);
            }, this);

            waitEvent.WaitOne();

            RouteRestResponse response;

            using (System.IO.StreamReader str = new System.IO.StreamReader(request.EndGetResponse(result).GetResponseStream()))
            {
                response = DeserializeResponse(str.ReadToEnd());
            }

            Route restRoute = null;

            if (response.ResourceSets.Length > 0 && response.ResourceSets[0].Resources.Length > 0)
            {
                restRoute = response.ResourceSets[0].Resources[0] as Route;
            }

            if (null != restRoute)
            {
                StringBuilder sb1 = new StringBuilder();
                StringBuilder sb2 = new StringBuilder();

                foreach (RouteLeg leg in restRoute.RouteLeg)
                {
                    foreach (ItineraryItem item in leg.ItineraryItem)
                    {
                        sb1.AppendLine(item.Instruction.maneuverType + "\t" + item.Instruction.Value);
                    }
                    sb1.AppendLine();
                }

                // Apparently we don't get good traffic data from this call
                MobileSrc.Services.RouteServices.RouteServiceClient client = new Services.RouteServices.RouteServiceClient("BasicHttpBinding_IRouteService");
#if SERVER
                if (response.ResourceSets.Length > 0 && response.ResourceSets[0].Resources.Length > 0)
                {
                    Services.RouteServices.RouteRequest soapRequest = GetRequest(response.ResourceSets[0].Resources[0] as Route);

                    try
                    {
                        Services.RouteServices.RouteResponse soapResponse = client.CalculateRoute(soapRequest);
                        restRoute.TravelDuration = soapResponse.Result.Summary.TimeInSeconds;

                        foreach (MobileSrc.Services.RouteServices.RouteLeg leg in soapResponse.Result.Legs)
                        {
                            foreach (MobileSrc.Services.RouteServices.ItineraryItem item in leg.Itinerary)
                            {
                                sb2.AppendLine(item.ManeuverType + "\t" + item.Text);
                            }
                            sb2.AppendLine();
                        }
                    }
                    catch
                    {
                    }
                }
#else
                client.CalculateRouteCompleted += new EventHandler <Services.RouteServices.CalculateRouteCompletedEventArgs>
                                                  (
                    delegate(object sender, Services.RouteServices.CalculateRouteCompletedEventArgs e)
                {
                    if (null == e.Error)
                    {
                        restRoute.TravelDuration = e.Result.Result.Summary.TimeInSeconds;

                        foreach (MobileSrc.Services.RouteServices.RouteLeg leg in e.Result.Result.Legs)
                        {
                            foreach (MobileSrc.Services.RouteServices.ItineraryItem item in leg.Itinerary)
                            {
                                sb2.AppendLine(item.ManeuverType + "\t" + item.Text);
                            }
                            sb2.AppendLine();
                        }
                    }
                    waitEvent.Set();
                }
                                                  );
                if (response.ResourceSets.Length > 0 && response.ResourceSets[0].Resources.Length > 0)
                {
                    Services.RouteServices.RouteRequest soapRequest = GetRequest(response.ResourceSets[0].Resources[0] as Route);
                    client.CalculateRouteAsync(soapRequest);
                }

                waitEvent.WaitOne();
#endif
            }

            return(restRoute);
        }
示例#2
0
        public Route Execute()
        {
            string uri = this.GetRequestUri();

            System.Net.WebRequest request = System.Net.HttpWebRequest.Create(uri);

            AutoResetEvent waitEvent = new AutoResetEvent(false);
            IAsyncResult result = request.BeginGetResponse((AsyncCallback)delegate(IAsyncResult ar)
            {
                waitEvent.Set();
                Thread.Sleep(0);
            }, this);
            waitEvent.WaitOne();

            RouteRestResponse response;
            using (System.IO.StreamReader str = new System.IO.StreamReader(request.EndGetResponse(result).GetResponseStream()))
            {
                response = DeserializeResponse(str.ReadToEnd());
            }

            Route restRoute = null;
            if (response.ResourceSets.Length > 0 && response.ResourceSets[0].Resources.Length > 0)
            {
                restRoute = response.ResourceSets[0].Resources[0] as Route;
            }

            if (null != restRoute)
            {
                StringBuilder sb1 = new StringBuilder();
                StringBuilder sb2= new StringBuilder();

                foreach (RouteLeg leg in restRoute.RouteLeg)
                {
                    foreach (ItineraryItem item in leg.ItineraryItem)
                    {
                        sb1.AppendLine(item.Instruction.maneuverType + "\t" + item.Instruction.Value);
                    }
                    sb1.AppendLine();
                }

                // Apparently we don't get good traffic data from this call
                MobileSrc.Services.RouteServices.RouteServiceClient client = new Services.RouteServices.RouteServiceClient("BasicHttpBinding_IRouteService");
            #if SERVER
                if (response.ResourceSets.Length > 0 && response.ResourceSets[0].Resources.Length > 0)
                {
                    Services.RouteServices.RouteRequest soapRequest = GetRequest(response.ResourceSets[0].Resources[0] as Route);

                    try
                    {
                        Services.RouteServices.RouteResponse soapResponse = client.CalculateRoute(soapRequest);
                        restRoute.TravelDuration = soapResponse.Result.Summary.TimeInSeconds;

                        foreach (MobileSrc.Services.RouteServices.RouteLeg leg in soapResponse.Result.Legs)
                        {
                            foreach (MobileSrc.Services.RouteServices.ItineraryItem item in leg.Itinerary)
                            {
                                sb2.AppendLine(item.ManeuverType + "\t" + item.Text);
                            }
                            sb2.AppendLine();
                        }
                    }
                    catch
                    {
                    }
                }
            #else
                client.CalculateRouteCompleted += new EventHandler<Services.RouteServices.CalculateRouteCompletedEventArgs>
                (
                    delegate(object sender, Services.RouteServices.CalculateRouteCompletedEventArgs e)
                    {
                        if (null == e.Error)
                        {
                            restRoute.TravelDuration = e.Result.Result.Summary.TimeInSeconds;

                            foreach (MobileSrc.Services.RouteServices.RouteLeg leg in e.Result.Result.Legs)
                            {
                                foreach (MobileSrc.Services.RouteServices.ItineraryItem item in leg.Itinerary)
                                {
                                    sb2.AppendLine(item.ManeuverType + "\t" + item.Text);
                                }
                                sb2.AppendLine();
                            }
                        }
                        waitEvent.Set();
                    }
                );
                if (response.ResourceSets.Length > 0 && response.ResourceSets[0].Resources.Length > 0)
                {
                    Services.RouteServices.RouteRequest soapRequest = GetRequest(response.ResourceSets[0].Resources[0] as Route);
                    client.CalculateRouteAsync(soapRequest);
                }

                waitEvent.WaitOne();
            #endif
            }

            return restRoute;
        }