DotAmf.ServiceModel.Dispatcher.AmfEndpointContext.ResolveContracts C# (CSharp) Method

ResolveContracts() private method

Resolve endpoint contracts.
private ResolveContracts ( ServiceEndpoint endpoint ) : void
endpoint System.ServiceModel.Description.ServiceEndpoint
return void
        private void ResolveContracts(ServiceEndpoint endpoint)
        {
            //Add default contracts
            AddContract(typeof(AbstractMessage));
            AddContract(typeof(AcknowledgeMessage));
            AddContract(typeof(CommandMessage));
            AddContract(typeof(ErrorMessage));
            AddContract(typeof(RemotingMessage));

            //Add endpoint contract's types
            var types = new List<Type>();

            //Get return types and methods parameters
            foreach (var method in endpoint.Contract.Operations.Select(operation => operation.SyncMethod))
            {
                types.Add(method.ReturnType);
                types.AddRange(method.GetParameters().Select(param => param.ParameterType));
            }

            //Get operation fault contracts
            var faultTypes = from operation in endpoint.Contract.Operations
                             from fault in operation.Faults
                             select fault.DetailType;

            types.AddRange(faultTypes);

            //Handle complex types
            for (var i = 0; i < types.Count; i++)
            {
                var type = types[i];

                //Type is an array
                if (type.IsArray && type.HasElementType)
                    types[i] = type.GetElementType();
            }

            //Remove duplicates and invalid types
            var validtypes = types
                .Distinct()
                .Where(IsValidDataContract)
                .Where(type => !IsContractRegistered(type));

            //Register all valid types
            foreach (var type in validtypes)
                AddContract(type);
        }