1 /******************************************************************************
3 * Copyright (c) 2003 Novell Inc. www.novell.com
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the Software), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
15 * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 *******************************************************************************/
24 // Novell.Directory.Ldap.Events.Edir.EdirEventSource.cs
27 // Anil Bhatia (banil@novell.com)
29 // (C) 2003 Novell, Inc (http://www.novell.com)
35 namespace Novell.Directory.Ldap.Events.Edir
38 /// This is the source class for Edir events.
40 public class EdirEventSource : LdapEventSource
42 protected EdirEventHandler edir_event;
45 /// Caller has to register with this event in order to be notified of
46 /// corresponding Edir events.
48 public event EdirEventHandler EdirEvent
63 /// EdirEventHandler is the delegate definition for EdirEvent.
64 /// The client (listener) has to register using this delegate in order to
65 /// get corresponding Edir events.
68 void EdirEventHandler(object source,
69 EdirEventArgs objEdirEventArgs);
71 protected override int GetListeners()
74 if (null != edir_event)
75 nListeners = edir_event.GetInvocationList().Length;
80 protected LdapConnection mConnection;
81 protected MonitorEventRequest mRequestOperation = null;
82 protected LdapResponseQueue mQueue = null;
84 public EdirEventSource(EdirEventSpecifier[] specifier, LdapConnection conn)
86 if ((null == specifier) || (null == conn))
87 throw new ArgumentException("Null argument specified");
89 mRequestOperation = new MonitorEventRequest(specifier);
93 protected override void StartSearchAndPolling()
95 mQueue = mConnection.ExtendedOperation(mRequestOperation, null, null);
96 int[] ids = mQueue.MessageIDs;
100 throw new LdapException(
102 LdapException.LOCAL_ERROR,
103 "Unable to Obtain Message Id"
107 StartEventPolling(mQueue, mConnection, ids[0]);
110 protected override void StopSearchAndPolling()
112 mConnection.Abandon(mQueue);
116 protected override bool NotifyEventListeners(LdapMessage sourceMessage,
117 EventClassifiers aClassification,
120 bool bListenersNotified = false;
121 if (null != edir_event)
123 if (null != sourceMessage)
125 if ((sourceMessage.Type == LdapMessage.INTERMEDIATE_RESPONSE) &&
126 (sourceMessage is EdirEventIntermediateResponse))
129 new EdirEventArgs(sourceMessage,
130 EventClassifiers.CLASSIFICATION_EDIR_EVENT));
131 bListenersNotified = true;
136 return bListenersNotified;