2009-03-05 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.ServiceModel / System.ServiceModel.Channels / ChannelListenerBase_1.cs
1 //
2 // ChannelListenerBase.cs
3 //
4 // Author: Atsushi Enomoto (atsushi@ximian.com)
5 //
6 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
7 //
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:
15 // 
16 // The above copyright notice and this permission notice shall be
17 // included in all copies or substantial portions of the Software.
18 // 
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.
26 //
27 using System;
28 using System.Collections.Generic;
29 using System.ServiceModel;
30
31 namespace System.ServiceModel.Channels
32 {
33         public abstract class ChannelListenerBase<TChannel>
34                 : ChannelListenerBase, IChannelListener<TChannel>, 
35                 IChannelListener,  ICommunicationObject
36                 where TChannel : class, IChannel
37         {
38                 IDefaultCommunicationTimeouts timeouts;
39
40                 protected ChannelListenerBase ()
41                         : this (DefaultCommunicationTimeouts.Instance)
42                 {
43                 }
44
45                 protected ChannelListenerBase (
46                         IDefaultCommunicationTimeouts timeouts)
47                 {
48                         if (timeouts == null)
49                                 throw new ArgumentNullException ("timeouts");
50                         this.timeouts = timeouts;
51                 }
52
53                 public TChannel AcceptChannel ()
54                 {
55                         return AcceptChannel (timeouts.ReceiveTimeout);
56                 }
57
58                 public TChannel AcceptChannel (TimeSpan timeout)
59                 {
60                         ThrowIfDisposedOrNotOpen ();
61                         return OnAcceptChannel (timeout);
62                 }
63
64                 public IAsyncResult BeginAcceptChannel (
65                         AsyncCallback callback, object asyncState)
66                 {
67                         return BeginAcceptChannel (
68                                 timeouts.ReceiveTimeout, callback, asyncState);
69                 }
70
71                 public IAsyncResult BeginAcceptChannel (TimeSpan timeout,
72                         AsyncCallback callback, object asyncState)
73                 {
74                         return OnBeginAcceptChannel (timeout, callback, asyncState);
75                 }
76
77                 public TChannel EndAcceptChannel (IAsyncResult result)
78                 {
79                         return OnEndAcceptChannel (result);
80                 }
81
82                 protected abstract TChannel OnAcceptChannel (TimeSpan timeout);
83
84                 protected abstract IAsyncResult OnBeginAcceptChannel (TimeSpan timeout,
85                         AsyncCallback callback, object asyncState);
86
87                 protected abstract TChannel OnEndAcceptChannel (IAsyncResult result);
88         }
89 }