2 // ChannelListenerBase.cs
4 // Author: Atsushi Enomoto (atsushi@ximian.com)
6 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
8 // Permission is hereby granted, free of charge, to any person obtaining
9 // a copy of this software and associated documentation files (the
10 // "Software"), to deal in the Software without restriction, including
11 // without limitation the rights to use, copy, modify, merge, publish,
12 // distribute, sublicense, and/or sell copies of the Software, and to
13 // permit persons to whom the Software is furnished to do so, subject to
14 // the following conditions:
16 // The above copyright notice and this permission notice shall be
17 // included in all copies or substantial portions of the Software.
19 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 using System.Collections.Generic;
29 using System.Collections.ObjectModel;
30 using System.ServiceModel;
32 namespace System.ServiceModel.Channels
35 public abstract class ChannelListenerBase : ChannelManagerBase,
36 IChannelListener, ICommunicationObject,
37 IDefaultCommunicationTimeouts
39 IDefaultCommunicationTimeouts timeouts;
40 KeyedByTypeCollection<object> properties;
42 protected ChannelListenerBase ()
43 : this (DefaultCommunicationTimeouts.Instance)
47 protected ChannelListenerBase (
48 IDefaultCommunicationTimeouts timeouts)
50 this.timeouts = timeouts;
53 public abstract Uri Uri { get; }
55 protected internal override TimeSpan DefaultCloseTimeout {
56 get { return timeouts.CloseTimeout; }
59 protected internal override TimeSpan DefaultOpenTimeout {
60 get { return timeouts.OpenTimeout; }
63 protected internal override TimeSpan DefaultReceiveTimeout {
64 get { return timeouts.ReceiveTimeout; }
67 protected internal override TimeSpan DefaultSendTimeout {
68 get { return timeouts.SendTimeout; }
71 TimeSpan IDefaultCommunicationTimeouts.CloseTimeout {
72 get { return timeouts.CloseTimeout; }
75 TimeSpan IDefaultCommunicationTimeouts.OpenTimeout {
76 get { return timeouts.OpenTimeout; }
79 TimeSpan IDefaultCommunicationTimeouts.ReceiveTimeout {
80 get { return timeouts.ReceiveTimeout; }
83 TimeSpan IDefaultCommunicationTimeouts.SendTimeout {
84 get { return timeouts.SendTimeout; }
87 internal virtual KeyedByTypeCollection<object> Properties {
89 if (properties == null)
90 properties = new KeyedByTypeCollection<object> ();
95 public virtual T GetProperty<T> () where T : class
97 return properties != null ? properties.Find<T> () : null;
100 public IAsyncResult BeginWaitForChannel (
101 TimeSpan timeout, AsyncCallback callback, object state)
103 return OnBeginWaitForChannel (timeout, callback, state);
106 public bool EndWaitForChannel (IAsyncResult result)
108 return OnEndWaitForChannel (result);
111 public bool WaitForChannel (TimeSpan timeout)
113 return OnWaitForChannel (timeout);
116 protected abstract IAsyncResult OnBeginWaitForChannel (
117 TimeSpan timeout, AsyncCallback callback, object state);
119 protected abstract bool OnEndWaitForChannel (IAsyncResult result);
121 protected abstract bool OnWaitForChannel (TimeSpan timeout);