2009-08-17 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Mon, 17 Aug 2009 12:38:10 +0000 (12:38 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Mon, 17 Aug 2009 12:38:10 +0000 (12:38 -0000)
* ReplyChannelBase.cs, DuplexChannelBase.cs, RequestChannelBase.cs:
  implement GetProperty<T>() and return its channel manager.

svn path=/trunk/mcs/; revision=140054

mcs/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
mcs/class/System.ServiceModel/System.ServiceModel.Channels/DuplexChannelBase.cs
mcs/class/System.ServiceModel/System.ServiceModel.Channels/ReplyChannelBase.cs
mcs/class/System.ServiceModel/System.ServiceModel.Channels/RequestChannelBase.cs

index 0ea4671f2db2ac3d87721659202eff1412865878..c77856f29d6e4afa73d352ad82fdbae52e99635f 100755 (executable)
@@ -1,3 +1,8 @@
+2009-08-17  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * ReplyChannelBase.cs, DuplexChannelBase.cs, RequestChannelBase.cs:
+         implement GetProperty<T>() and return its channel manager.
+
 2009-08-17  Atsushi Enomoto  <atsushi@ximian.com>
 
        * PeerDuplexChannel.cs : ongoing implementation. Fix wrong peer
index 54b50a6d1c9c4782f1bcd69246e2a76c1023e763..75149f816f4a7225d0058f33066084d6b5f762fd 100644 (file)
@@ -36,15 +36,15 @@ namespace System.ServiceModel.Channels
 {
        internal abstract class DuplexChannelBase : ChannelBase, IDuplexChannel
        {
-               //ChannelFactoryBase channel_factory_base;
-               //ChannelListenerBase channel_listener_base;
+               ChannelFactoryBase channel_factory_base;
+               ChannelListenerBase channel_listener_base;
                EndpointAddress local_address;
                EndpointAddress remote_address;
                Uri via;
                
                public DuplexChannelBase (ChannelFactoryBase factory, EndpointAddress remoteAddress, Uri via) : base (factory)
                {
-                       //channel_factory_base = factory;
+                       channel_factory_base = factory;
                        remote_address = remoteAddress;
                        this.via = via;
                        SetupDelegates ();
@@ -52,7 +52,7 @@ namespace System.ServiceModel.Channels
                
                public DuplexChannelBase (ChannelListenerBase listener) : base (listener)
                {
-                       //channel_listener_base = listener;
+                       channel_listener_base = listener;
                        local_address = new EndpointAddress (listener.Uri);
                        SetupDelegates ();
                }
@@ -79,6 +79,15 @@ namespace System.ServiceModel.Channels
                        try_receive_handler = new TryReceiveHandler (TryReceive);
                }
 
+               public override T GetProperty<T> ()
+               {
+                       if (typeof (T) == typeof (IChannelFactory))
+                               return (T) (object) channel_factory_base;
+                       if (typeof (T) == typeof (IChannelListener))
+                               return (T) (object) channel_listener_base;
+                       return base.GetProperty<T> ();
+               }
+
                // Open
                Action<TimeSpan> open_handler;
 
index 6c2c81db3d6662a359b5862edeff9e22b6657e62..135adc9a3cb2dd6b76cb0bf2c5a41896b5180f8a 100644 (file)
@@ -59,8 +59,17 @@ namespace System.ServiceModel.Channels
                {
                }
 
+               ChannelListenerBase listener;
+
                public abstract EndpointAddress LocalAddress { get; }
 
+               public override T GetProperty<T> ()
+               {
+                       if (typeof (T) == typeof (IChannelListener))
+                               return (T) (object) listener;
+                       return base.GetProperty<T> ();
+               }
+
                protected override void OnAbort ()
                {
                        OnClose (TimeSpan.Zero);
index 392ea2d6bc3bd8399bb28ec362129bb41305961e..ee29936c58be5beb81d6aad7cacfecb5cb67b333 100644 (file)
@@ -66,6 +66,13 @@ namespace System.ServiceModel.Channels
                        get { return via ?? RemoteAddress.Uri; }
                }
 
+               public override T GetProperty<T> ()
+               {
+                       if (typeof (T) == typeof (IChannelFactory))
+                               return (T) (object) channel_factory;
+                       return base.GetProperty<T> ();
+               }
+
                // Request
 
                public Message Request (Message message)