示例#1
0
        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));
                }
            }
                );
        }