//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ namespace System.ServiceModel { using System.Runtime; using System.ServiceModel.Channels; using System.ServiceModel.Description; sealed class ServiceEndpointTrait : EndpointTrait where TChannel : class { InstanceContext callbackInstance; ServiceEndpoint endpoint; public ServiceEndpointTrait(ServiceEndpoint endpoint, InstanceContext callbackInstance) { this.endpoint = endpoint; this.callbackInstance = callbackInstance; } public override bool Equals(object obj) { ServiceEndpointTrait trait1 = obj as ServiceEndpointTrait; if (trait1 == null) return false; if (!object.ReferenceEquals(this.callbackInstance, trait1.callbackInstance)) return false; if (!object.ReferenceEquals(this.endpoint, trait1.endpoint)) return false; return true; } public override int GetHashCode() { int hashCode = 0; if (this.callbackInstance != null) { hashCode ^= this.callbackInstance.GetHashCode(); } Fx.Assert(this.endpoint != null, "endpoint should not be null."); hashCode ^= this.endpoint.GetHashCode(); return hashCode; } public override ChannelFactory CreateChannelFactory() { if (this.callbackInstance != null) return CreateDuplexFactory(); return CreateSimplexFactory(); } DuplexChannelFactory CreateDuplexFactory() { Fx.Assert(this.endpoint != null, "endpoint should not be null."); return new DuplexChannelFactory(this.callbackInstance, this.endpoint); } ChannelFactory CreateSimplexFactory() { Fx.Assert(this.endpoint != null, "endpoint should not be null."); return new ChannelFactory(this.endpoint); } } }