private static object CreateMethodReturnContracts(IPayloadDescriptorProvider payloadProvider, IMethodDescriptorProvider methodProvider, IHubDescriptorProvider hubProvider) { return hubProvider.GetHubs() .Select(hub => methodProvider.GetMethods(hub) .Where(methodDescriptor => payloadProvider.HasPayload(methodDescriptor.ReturnType))) .Where(methodList => methodList.Count() > 0) .ToDictionary(methodList => methodList.First().Hub.HubType.GetHubName(), methodList => methodList .Select(methodDescriptor => { PayloadDescriptor payloadDescriptor = payloadProvider.GetPayload(methodDescriptor.ReturnType); bool enumerable = false; // If payloadDescriptor is null then the return type has a payload within it if (payloadDescriptor == null) { payloadDescriptor = payloadProvider.GetPayload(methodDescriptor.ReturnType.GetEnumerableType()); enumerable = true; } return new object[]{ methodDescriptor.Name, new object[]{ payloadDescriptor.ID, enumerable ? CompressionTypeHelper.EnumerableTypeId : CompressionTypeHelper.DefaultTypeId } }; }).ToDictionary(methodNameToID => methodNameToID[0], methodNameToID => methodNameToID[1])); }
private static bool HasPayloadArgument(IEnumerable<ParameterDescriptor> arguments, IPayloadDescriptorProvider payloadProvider) { try { return arguments.Where(parameterDescriptor => payloadProvider.HasPayload(parameterDescriptor.ParameterType)) .Count() > 0; } catch { return false; } }