static public Hashtable GetHits (Query q) { QueryClosure qc; qc = new QueryClosure (q); q.HitsAddedEvent += qc.OnHitsAdded; q.FinishedEvent += qc.OnFinished; q.SendAsyncBlocking (); return qc.Hits; }
public void DoQuery (Query query, IQueryResult result, IQueryableChangeData data) { // Get rid of the standard UnixTransport so that we can // forward our local query to remote hosts. query.Transports.Clear (); List<string[]> network_services = Conf.Networking.GetListOptionValues (Conf.Names.NetworkServices); if (network_services != null) { foreach (string[] service in network_services) query.RegisterTransport (new HttpTransport (service [1])); } // Anonymous delegates cannot be un-registered ... hence Query.HitsAdded hits_added_handler; hits_added_handler = delegate (HitsAddedResponse response) { //Console.WriteLine ("Adding hits added response"); TransformResponse(response); result.Add (response.Hits, response.NumMatches); }; Query.HitsSubtracted hits_subtracted_handler; hits_subtracted_handler = delegate (HitsSubtractedResponse response) { // Console.WriteLine ("Adding hits subtracted response"); result.Subtract (response.Uris); }; Query.Finished finished_handler; finished_handler = delegate (FinishedResponse response) { //Console.WriteLine ("Adding finished response"); // NO-OP }; // FIXME: ClosedEvent ? Should be handled by HttpTransport but should we do something more query.HitsAddedEvent += hits_added_handler; query.HitsSubtractedEvent += hits_subtracted_handler; query.FinishedEvent += finished_handler; Exception throw_me = null; try { query.SendAsyncBlocking (); } catch (Exception ex) { throw_me = ex; } // FIXME FIXME FIXME: Live query does not work! query.HitsAddedEvent -= hits_added_handler; query.HitsSubtractedEvent -= hits_subtracted_handler; query.FinishedEvent -= finished_handler; query.Transports.Clear (); if (throw_me != null) throw throw_me; return; }