1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel
{
using System.Runtime;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
sealed class ServiceEndpointTrait<TChannel> : EndpointTrait<TChannel>
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<TChannel> trait1 = obj as ServiceEndpointTrait<TChannel>;
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<TChannel> CreateChannelFactory()
{
if (this.callbackInstance != null)
return CreateDuplexFactory();
return CreateSimplexFactory();
}
DuplexChannelFactory<TChannel> CreateDuplexFactory()
{
Fx.Assert(this.endpoint != null, "endpoint should not be null.");
return new DuplexChannelFactory<TChannel>(this.callbackInstance, this.endpoint);
}
ChannelFactory<TChannel> CreateSimplexFactory()
{
Fx.Assert(this.endpoint != null, "endpoint should not be null.");
return new ChannelFactory<TChannel>(this.endpoint);
}
}
}
|