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