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); }
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; }