private ListAddressInfo testGetAddressN_one(object no) { var client = new ServiceKeeperReference.ServiceKeeperClient(); var step = 20; var ret = new ListAddressInfo(); for (int i = 0; i < step * 2; i++) { var info = new GetAddressInfo(); info.No = no.ToString(); try { info.BeginTime = DateTime.Now; var address = client.GetServiceAddress("calc"); info.EndTime = DateTime.Now; info.Message = address.Address; } catch (Exception ex) { info.EndTime = DateTime.Now; info.Message = "error"; } ret.Add(info); } client.Close(); return(ret); }
public AddressInfoType(IQueryDispatcher queryDispatcher) { Field(x => x.AccessAddressId, type: typeof(IdGraphType)).Description("Internal or external access address id"); Field(x => x.UnitAddressId, type: typeof(IdGraphType)).Description("Internal or external unit address id"); Field(x => x.Remark, type: typeof(StringGraphType)).Description("Additional address information remark"); Field <AccessAddressType>( name: "accessAddress", description: "Access address and its containing unit addresses", resolve: context => { if (context.Source.AccessAddressId != null && context.Source.AccessAddressId != Guid.Empty) { var getAddressInfoQuery = new GetAddressInfo(new Guid[] { context.Source.AccessAddressId.Value }); var result = queryDispatcher.HandleAsync <GetAddressInfo, Result <GetAddressInfoResult> >(getAddressInfoQuery).Result; if (result.IsFailed) { context.Errors.Add(new ExecutionError(result.Errors.First().Message)); return(null); } // If no address is found with that id, just return null if (result.Value.AccessAddresses.Count != 1) { return(null); } return(AddressServiceQueries.MapAccessAddress(result.Value.AccessAddresses.First().Id, result.Value)); } else { return(null); } } ); Field <UnitAddressType>( name: "unitAddress", description: "Access address and its containing unit addresses", resolve: context => { if (context.Source.UnitAddressId != null && context.Source.UnitAddressId != Guid.Empty) { var getAddressInfoQuery = new GetAddressInfo(new Guid[] { context.Source.UnitAddressId.Value }); var result = queryDispatcher.HandleAsync <GetAddressInfo, Result <GetAddressInfoResult> >(getAddressInfoQuery).Result; if (result.IsFailed) { context.Errors.Add(new ExecutionError(result.Errors.First().Message)); return(null); } // If no address is found with that id, just return null if (result.Value.UnitAddresses.Count != 1) { context.Errors.Add(new ExecutionError($"Problem find unit address with id {context.Source.UnitAddressId.Value} in address database. Expected one hit but gut {result.Value.UnitAddresses.Count}")); return(null); } return(result.Value.UnitAddresses.First()); } else { return(null); } } ); }
public AddressServiceQueries(ILogger <AddressServiceQueries> logger, IQueryDispatcher queryDispatcher) { _logger = logger; Description = "GraphQL API for querying address information"; FieldAsync <ListGraphType <NearestAddressSearchHitType> >( "nearestAccessAddresses", arguments: new QueryArguments( new QueryArgument <IdGraphType> { Name = "routeNodeId" }, new QueryArgument <IdGraphType> { Name = "spanEquipmentOrSegmentId" }, new QueryArgument <FloatGraphType> { Name = "x" }, new QueryArgument <FloatGraphType> { Name = "y" }, new QueryArgument <IntGraphType> { Name = "srid" }, new QueryArgument <NonNullGraphType <IntGraphType> > { Name = "maxHits" } ), resolve: async(context) => { double x = context.GetArgument <double>("x"); double y = context.GetArgument <double>("y"); int srid = context.GetArgument <int>("srid"); int maxHits = context.GetArgument <int>("maxHits"); Guid routeNodeId = context.GetArgument <Guid>("routeNodeId"); Guid spanEquipmentOrSegmentId = context.GetArgument <Guid>("spanEquipmentOrSegmentId"); if (routeNodeId != Guid.Empty) { var nodeCoord = await GetNodeCoordinates(routeNodeId, queryDispatcher).ConfigureAwait(false); if (nodeCoord == (0, 0)) { context.Errors.Add(new ExecutionError($"Could not find a route node with id: {routeNodeId}")); return(null); } var getAddressInfoQuery = new GetAddressInfo(nodeCoord.Item1, nodeCoord.Item2, 25832, maxHits); var result = await queryDispatcher.HandleAsync <GetAddressInfo, Result <GetAddressInfoResult> >(getAddressInfoQuery); if (result.IsFailed) { context.Errors.Add(new ExecutionError(result.Errors.First().Message)); return(null); } return(MapToGraphQLAddressHits(result.Value)); } else if (spanEquipmentOrSegmentId != Guid.Empty) { var segmentEnd = await GetSpanSegmentEndCoordinate(spanEquipmentOrSegmentId, queryDispatcher).ConfigureAwait(false); // Find address near the from span equipment end var getAddressInfoQuery = new GetAddressInfo(segmentEnd.Item1, segmentEnd.Item2, 25832, maxHits); var getAddressInfoQueryResult = await queryDispatcher.HandleAsync <GetAddressInfo, Result <GetAddressInfoResult> >(getAddressInfoQuery).ConfigureAwait(false); if (getAddressInfoQueryResult.IsFailed) { context.Errors.Add(new ExecutionError(getAddressInfoQueryResult.Errors.First().Message)); return(null); } return(MapToGraphQLAddressHits(getAddressInfoQueryResult.Value)); } else { var getAddressInfoQuery = new GetAddressInfo(x, y, srid, maxHits); var result = await queryDispatcher.HandleAsync <GetAddressInfo, Result <GetAddressInfoResult> >(getAddressInfoQuery).ConfigureAwait(false); if (result.IsFailed) { context.Errors.Add(new ExecutionError(result.Errors.First().Message)); return(null); } return(MapToGraphQLAddressHits(result.Value)); } } ); }