public static void Main(String[] args) { if (args.Length != 3) { Console.WriteLine( "Usage: mono EdirEventSample <host name> <login dn>" + " <password> "); Console.WriteLine( "Example: mono EdirEventSample Acme.com \"cn=admin,o=Acme\"" + " secret "); Environment.Exit(0); } int ldapPort = LdapConnection.DEFAULT_PORT; int ldapVersion = LdapConnection.Ldap_V3; String ldapHost = args[0]; String loginDN = args[1]; String password = args[2]; LdapResponseQueue queue = null; LdapConnection lc = new LdapConnection(); try { // connect to the server lc.Connect(ldapHost, ldapPort); // authenticate to the server lc.Bind(ldapVersion, loginDN, password); //Create an Array of EdirEventSpecifier EdirEventSpecifier[] specifier = new EdirEventSpecifier[1]; //Register for all Add Value events. specifier[0] = new EdirEventSpecifier(EdirEventType.EVT_CREATE_ENTRY, //Generate an Value Event of Type Add Value EdirEventResultType.EVT_STATUS_ALL //Generate Event for all status ); //Create an MonitorEventRequest using the specifiers. MonitorEventRequest requestoperation = new MonitorEventRequest(specifier); //Send the request to server and get the response queue. queue = lc.ExtendedOperation(requestoperation, null, null); } catch (LdapException e) { Console.WriteLine("Error: " + e.ToString()); try { lc.Disconnect(); } catch (LdapException e2) { Console.WriteLine("Error: " + e2.ToString()); } Environment.Exit(1); } catch (Exception e) { Console.WriteLine("Error: " + e.ToString()); } Console.WriteLine("Monitoring the events for {0} minutes..", TIME_OUT_IN_MINUTES); Console.WriteLine(); //Set the timeout value timeOut = DateTime.Now.AddMinutes(TIME_OUT_IN_MINUTES); try { //Monitor till the timeout happens while (DateTime.Now.CompareTo(timeOut) < 0) { if (!checkForAChange(queue)) { break; } System.Threading.Thread.Sleep(10); } } catch (System.IO.IOException e) { Console.WriteLine(e.Message); } catch (System.Threading.ThreadInterruptedException e) { Console.WriteLine(e.Message); } //disconnect from the server before exiting try { lc.Abandon(queue); //abandon the search lc.Disconnect(); } catch (LdapException e) { Console.WriteLine(); Console.WriteLine("Error: " + e.ToString()); } Environment.Exit(0); } // end main
protected void Execute(string ldapHost, string ldapPort, string loginDN, string password) { // Connect to the LDAP Server LdapConnection connection = new LdapConnection(); try { connection.Connect(ldapHost, int.Parse(ldapPort)); connection.Bind(loginDN, password); } catch (Exception e) { Console.WriteLine("Exception occurred: {0}", e.Message); try { connection.Disconnect(); } catch (Exception e2) { } Environment.Exit(1); } Console.WriteLine(STARTING_PROMPT); EdirEventSpecifier[] specifier = new EdirEventSpecifier[1]; specifier[0] = new EdirEventSpecifier( EdirEventType.EVT_CREATE_ENTRY, EdirEventResultType.EVT_STATUS_ALL //, we could have optionally specified a filter here like "(attributeName=city)" ); // Make an object of EdirEventSource EdirEventSource objEventSource = new EdirEventSource(specifier, connection); // register for events objEventSource.EdirEvent += new EdirEventSource.EdirEventHandler(MyEdirEventHandler); // Another listener can be easily added objEventSource.EdirEvent += new EdirEventSource.EdirEventHandler(MyEdirEventHandler02); // Add a listener for generic directory event objEventSource.DirectoryEvent += new EdirEventSource.DirectoryEventHandler(MyDirectoryEventHandler); // Add a listener for exception event objEventSource.DirectoryExceptionEvent += new EdirEventSource.DirectoryExceptionEventHandler(MyDirectoryExceptionEventHandler); string input; bool bContinue; do { Console.WriteLine(QUIT_PROMPT); input = Console.ReadLine(); bContinue = (input != null) && !(input.StartsWith("q")) && !(input.StartsWith("Q")); } while(bContinue); // time to unregister objEventSource.EdirEvent -= new EdirEventSource.EdirEventHandler(MyEdirEventHandler); objEventSource.EdirEvent -= new EdirEventSource.EdirEventHandler(MyEdirEventHandler02); objEventSource.DirectoryEvent -= new EdirEventSource.DirectoryEventHandler(MyDirectoryEventHandler); objEventSource.DirectoryExceptionEvent -= new EdirEventSource.DirectoryExceptionEventHandler(MyDirectoryExceptionEventHandler); // Disconnect try { connection.Disconnect(); } catch (Exception e) { } }